Separate simulation and placing systems
This commit is contained in:
		
							parent
							
								
									a3e8b1387b
								
							
						
					
					
						commit
						508f7d7ad8
					
				| 
						 | 
					@ -22,7 +22,12 @@ impl Plugin for FallingSandPlugin {
 | 
				
			||||||
        app.add_systems(Startup, setup);
 | 
					        app.add_systems(Startup, setup);
 | 
				
			||||||
        app.add_systems(
 | 
					        app.add_systems(
 | 
				
			||||||
            Update,
 | 
					            Update,
 | 
				
			||||||
            (simulate_chunk_system, update_chunk_texture_system).chain(),
 | 
					            (
 | 
				
			||||||
 | 
					                place_sand_system,
 | 
				
			||||||
 | 
					                simulate_chunk_system,
 | 
				
			||||||
 | 
					                update_chunk_texture_system,
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					                .chain(),
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -68,6 +73,22 @@ pub struct Chunk {
 | 
				
			||||||
    dirty_rect: DirtyRect,
 | 
					    dirty_rect: DirtyRect,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn place_sand_system(mut chunk: Query<&mut Chunk>) {
 | 
				
			||||||
 | 
					    // We know for now there's only one chunk
 | 
				
			||||||
 | 
					    let chunk = chunk.get_single_mut();
 | 
				
			||||||
 | 
					    if chunk.is_err() {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut chunk = chunk.unwrap();
 | 
				
			||||||
 | 
					    let frac = chunk.width / 2;
 | 
				
			||||||
 | 
					    let x = (chunk.width - frac) / 2 + rand::thread_rng().gen_range(0..frac);
 | 
				
			||||||
 | 
					    let y = chunk.height - 1;
 | 
				
			||||||
 | 
					    let index = x + y * chunk.width;
 | 
				
			||||||
 | 
					    chunk.cells[index] = Elements::Sand;
 | 
				
			||||||
 | 
					    chunk.dirty_rect.add_point(x, y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn simulate_chunk_system(mut chunk: Query<&mut Chunk>) {
 | 
					pub fn simulate_chunk_system(mut chunk: Query<&mut Chunk>) {
 | 
				
			||||||
    // We know for now there's only one chunk
 | 
					    // We know for now there's only one chunk
 | 
				
			||||||
    let chunk = chunk.get_single_mut();
 | 
					    let chunk = chunk.get_single_mut();
 | 
				
			||||||
| 
						 | 
					@ -75,14 +96,7 @@ pub fn simulate_chunk_system(mut chunk: Query<&mut Chunk>) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut query = chunk.unwrap();
 | 
					    let mut chunk = chunk.unwrap();
 | 
				
			||||||
    let chunk = query.as_mut();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Place sand
 | 
					 | 
				
			||||||
    let frac = chunk.width / 2;
 | 
					 | 
				
			||||||
    let x = (chunk.width - frac) / 2 + rand::thread_rng().gen_range(0..frac);
 | 
					 | 
				
			||||||
    let y = chunk.height - 1;
 | 
					 | 
				
			||||||
    chunk.cells[x + y * chunk.width] = Elements::Sand;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Simulate sand
 | 
					    // Simulate sand
 | 
				
			||||||
    for y in 0..chunk.height {
 | 
					    for y in 0..chunk.height {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue