feat: Update tiles representation only when tile is updated
This commit is contained in:
parent
3f20b45ed3
commit
a3752a6496
2 changed files with 20 additions and 9 deletions
|
|
@ -19,8 +19,11 @@ impl Plugin for GameViewPlugin {
|
|||
#[derive(Resource, Default)]
|
||||
pub struct CubeStages(pub Vec<Handle<Mesh>>);
|
||||
|
||||
#[derive(Component, FromTemplate)]
|
||||
pub struct TileWatch(pub usize);
|
||||
#[derive(Component, Clone, Default)]
|
||||
pub struct TileWatch{
|
||||
pub index: usize,
|
||||
pub previous_element: GridElement
|
||||
}
|
||||
|
||||
#[derive(Resource, Default)]
|
||||
pub struct TileMaterials {
|
||||
|
|
@ -92,17 +95,23 @@ pub fn cube(position: Vec3,index: usize,mesh: Handle<Mesh>) -> impl Scene {
|
|||
Mesh3d(mesh)
|
||||
MeshMaterial3d<StandardMaterial>
|
||||
Transform::from_translation(position)
|
||||
TileWatch(index)
|
||||
TileWatch{
|
||||
index
|
||||
}
|
||||
Visibility::Hidden
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_cubes(query: Query<(&mut Mesh3d,&mut Visibility,&mut MeshMaterial3d<StandardMaterial>,&TileWatch, &mut Transform)>, materials: Res<TileMaterials>, stages: Res<CubeStages>, grid: Res<Grid>) {
|
||||
pub fn update_cubes(query: Query<(&mut Mesh3d,&mut Visibility,&mut MeshMaterial3d<StandardMaterial>,&mut TileWatch, &mut Transform)>, materials: Res<TileMaterials>, stages: Res<CubeStages>, grid: Res<Grid>) {
|
||||
if grid.is_changed() == false { return; }
|
||||
|
||||
for (mut mesh,mut visibility, mut material, index, mut transform) in query {
|
||||
let state = grid.data[index.0];
|
||||
for (mut mesh,mut visibility, mut material, mut tile_data, mut transform) in query {
|
||||
let state = grid.data[tile_data.index];
|
||||
|
||||
if tile_data.previous_element == state {
|
||||
continue;
|
||||
}
|
||||
|
||||
match state {
|
||||
GridElement::Air => {
|
||||
|
|
@ -113,7 +122,7 @@ pub fn update_cubes(query: Query<(&mut Mesh3d,&mut Visibility,&mut MeshMaterial3
|
|||
material.0 = materials.water.clone();
|
||||
let stage = ((amount as f32)/(MAX_FLUID_AMOUNT as f32) * (FLUID_FULLNES_STAGES-1) as f32).ceil() as usize;
|
||||
|
||||
transform.translation = grid.deindexify(index.0 as u32).as_vec3() - vec3(0.,((FLUID_FULLNES_STAGES-1-stage) as f32 / (FLUID_FULLNES_STAGES as f32))/2.,0.);
|
||||
transform.translation = grid.deindexify(tile_data.index as u32).as_vec3() - vec3(0.,((FLUID_FULLNES_STAGES-1-stage) as f32 / (FLUID_FULLNES_STAGES as f32))/2.,0.);
|
||||
|
||||
mesh.0 = stages.0[stage].clone();
|
||||
},
|
||||
|
|
@ -132,11 +141,13 @@ pub fn update_cubes(query: Query<(&mut Mesh3d,&mut Visibility,&mut MeshMaterial3
|
|||
material.0 = materials.source.clone();
|
||||
let stage = ((source_amount as f32)/(MAX_FLUID_AMOUNT as f32) * (FLUID_FULLNES_STAGES-1) as f32).ceil() as usize;
|
||||
|
||||
transform.translation = grid.deindexify(index.0 as u32).as_vec3() - vec3(0.,((FLUID_FULLNES_STAGES-1-stage) as f32 / (FLUID_FULLNES_STAGES as f32))/2.,0.);
|
||||
transform.translation = grid.deindexify(tile_data.index as u32).as_vec3() - vec3(0.,((FLUID_FULLNES_STAGES-1-stage) as f32 / (FLUID_FULLNES_STAGES as f32))/2.,0.);
|
||||
|
||||
mesh.0 = stages.0[stage].clone();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
tile_data.previous_element = state;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue