batch sprite 1

This commit is contained in:
StephenAdamson
2025-02-08 00:23:49 +00:00
parent 4089851734
commit 4ba6fecc27
6 changed files with 151 additions and 106 deletions
+14 -14
View File
@@ -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());
}
}