batch sprite 1
This commit is contained in:
+14
-14
@@ -1,7 +1,8 @@
|
||||
use crate::constants::{ITILE_SIZE, TILE_SIZE};
|
||||
use crate::tile::{self, FixtureTile, FloorTile, NeedsOccluded, TileMap};
|
||||
use crate::tiles::{FixtureTilePrefab, FloorTilePrefab, Textures};
|
||||
use crate::tiles::{self, FixtureTilePrefab, FloorTilePrefab, Textures};
|
||||
use bevy::prelude::*;
|
||||
use bevy::text::cosmic_text::ttf_parser::gpos::PositioningSubtable;
|
||||
use noise::{NoiseFn, Perlin};
|
||||
use std::collections::HashMap;
|
||||
|
||||
@@ -38,6 +39,7 @@ pub fn handle_tile_occlusion_updates(
|
||||
Query<(&mut FixtureTile, &Transform, &mut NeedsOccluded)>,
|
||||
Query<(Entity, &mut NeedsOccluded)>,
|
||||
)>,
|
||||
mut cwss: ResMut<tiles::CurrentWorldSpriteState>,
|
||||
) {
|
||||
query_set
|
||||
.p0()
|
||||
@@ -68,6 +70,7 @@ pub fn handle_tile_occlusion_updates(
|
||||
commands.entity(entity).remove::<NeedsOccluded>();
|
||||
}
|
||||
}
|
||||
cwss.state = tiles::WorldSpriteState::WaitingForRender;
|
||||
}
|
||||
|
||||
pub fn calculate_visibility(pos: IVec3, tilemap: &TileMap) -> [u32; 8] {
|
||||
@@ -211,19 +214,19 @@ fn handle_chunk_loading(
|
||||
z as f64 * 0.05,
|
||||
]);
|
||||
if noise_value < -0.5 {
|
||||
FloorTilePrefab::air(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::air(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (0, false, true, 0, [0; 8])); // Air tile
|
||||
floor_positions.push((position, "air"));
|
||||
} else if noise_value < 0.8 {
|
||||
FloorTilePrefab::rock(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::rock(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (2, true, false, 50, [0; 8])); // Rock tile
|
||||
floor_positions.push((position, "rock"));
|
||||
} else {
|
||||
FloorTilePrefab::dirt(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::dirt(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (1, true, true, 85, [0; 8])); // Dirt tile
|
||||
@@ -233,20 +236,20 @@ fn handle_chunk_loading(
|
||||
if (generate_surface_noise(world_x, world_y) * TILE_SIZE).round()
|
||||
<= position.z + TILE_SIZE
|
||||
{
|
||||
FloorTilePrefab::grass(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::grass(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (1, true, true, 100, [0; 8])); // Dirt tile (grass)
|
||||
floor_positions.push((position, "dirt"));
|
||||
} else {
|
||||
FloorTilePrefab::dirt(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::dirt(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (1, true, true, 85, [0; 8])); // Dirt tile
|
||||
floor_positions.push((position, "dirt"));
|
||||
}
|
||||
} else {
|
||||
FloorTilePrefab::air(position, &textures).spawn(&mut commands);
|
||||
FloorTilePrefab::air(position).spawn(&mut commands);
|
||||
tilemap
|
||||
.floor_tiles
|
||||
.insert(pos_ivec, (0, false, true, 0, [0; 8])); // Air tile
|
||||
@@ -263,17 +266,17 @@ fn handle_chunk_loading(
|
||||
|
||||
match *floor_type {
|
||||
"dirt" => {
|
||||
FixtureTilePrefab::dirt_wall(above_pos, &textures).spawn(&mut commands);
|
||||
FixtureTilePrefab::dirt_wall(above_pos).spawn(&mut commands);
|
||||
tilemap.fixture_tiles.insert(above_ivec, (1, true, [0; 8]));
|
||||
// Dirt wall
|
||||
}
|
||||
"rock" => {
|
||||
FixtureTilePrefab::rock_wall(above_pos, &textures).spawn(&mut commands);
|
||||
FixtureTilePrefab::rock_wall(above_pos).spawn(&mut commands);
|
||||
tilemap.fixture_tiles.insert(above_ivec, (2, true, [0; 8]));
|
||||
// Rock wall
|
||||
}
|
||||
"bedrock" => {
|
||||
FixtureTilePrefab::bedrock_wall(above_pos, &textures).spawn(&mut commands);
|
||||
FixtureTilePrefab::bedrock_wall(above_pos).spawn(&mut commands);
|
||||
tilemap.fixture_tiles.insert(above_ivec, (3, true, [0; 8]));
|
||||
// Bedrock wall
|
||||
}
|
||||
@@ -310,9 +313,6 @@ impl Plugin for TilemapPlugin {
|
||||
)
|
||||
.chain(),
|
||||
)
|
||||
.add_systems(
|
||||
FixedUpdate,
|
||||
(handle_chunk_loading, handle_tile_occlusion_updates).chain(),
|
||||
);
|
||||
.add_systems(FixedUpdate, (handle_chunk_loading).chain());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user