Adding a map creation plugin #57

Merged
CoCo_Sol merged 39 commits from map-generation into main 2024-02-21 20:10:03 +00:00
Showing only changes of commit fcd0bdf9ed - Show all commits

View file

@ -11,8 +11,8 @@ pub struct MapGenerationPlugin;
impl Plugin for MapGenerationPlugin { impl Plugin for MapGenerationPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.add_event::<MapGenerationEvent>() app.add_event::<MapGeneration>()
.add_event::<EndMapGenerationEvent>() .add_event::<EndMapGeneration>()
.add_systems( .add_systems(
Update, Update,
(generate_map.after(delete_map), delete_map) (generate_map.after(delete_map), delete_map)
@ -23,7 +23,7 @@ impl Plugin for MapGenerationPlugin {
/// An event to trigger the generation of the map. /// An event to trigger the generation of the map.
#[derive(Event)] #[derive(Event)]
pub struct MapGenerationEvent { pub struct MapGeneration {
/// The seed used to generate the map. /// The seed used to generate the map.
pub seed: u32, pub seed: u32,
@ -33,12 +33,12 @@ pub struct MapGenerationEvent {
/// An event send when the map is generated. /// An event send when the map is generated.
#[derive(Event)] #[derive(Event)]
pub struct EndMapGenerationEvent; pub struct EndMapGeneration;
/// Spawns the tiles if the event is received. /// Spawns the tiles if the event is received.
fn generate_map( fn generate_map(
mut event: EventReader<MapGenerationEvent>, mut event: EventReader<MapGeneration>,
mut end_map_event: EventWriter<EndMapGenerationEvent>, mut end_map_event: EventWriter<EndMapGeneration>,
mut commands: Commands, mut commands: Commands,
mut noise: Local<Option<Perlin>>, mut noise: Local<Option<Perlin>>,
mut map_iterator: Local<Option<HexSpiral<isize>>>, mut map_iterator: Local<Option<HexSpiral<isize>>>,
@ -51,10 +51,10 @@ fn generate_map(
if let (Some(perlin), Some(spiral)) = (noise.as_ref(), map_iterator.as_mut()) { if let (Some(perlin), Some(spiral)) = (noise.as_ref(), map_iterator.as_mut()) {
if let Some(position) = spiral.next() { if let Some(position) = spiral.next() {
let pixel_position = position.to_pixel_coordinates((0.1, 0.1)); let pixel_position = position.to_pixel_coordinates((0.2, 0.2)); // Réduire la taille de la tuile
commands.spawn((get_type_tile(pixel_position, perlin), position)); commands.spawn((get_type_tile(pixel_position, perlin), position));
} else { } else {
end_map_event.send(EndMapGenerationEvent); end_map_event.send(EndMapGeneration);
*noise = None; *noise = None;
*map_iterator = None; *map_iterator = None;
} }
@ -65,17 +65,18 @@ fn generate_map(
fn get_type_tile(position: (f32, f32), noise: &Perlin) -> Tile { fn get_type_tile(position: (f32, f32), noise: &Perlin) -> Tile {
CoCo_Sol marked this conversation as resolved
Review

This should be in the get_type function and the value shouldn't be hard coded

This should be in the get_type function and the value shouldn't be hard coded
let value = noise.get([position.0 as f64, position.1 as f64]); let value = noise.get([position.0 as f64, position.1 as f64]);
match value { match value {
v if v <= -0.4 => Tile::Hill, v if v <= -0.5 => Tile::Hill, // Réduire le seuil pour les collines
v if v >= 0.4 => Tile::Forest, v if v >= 0.5 => Tile::Forest, // Réduire le seuil pour les forêts
_ => Tile::Grass, _ => Tile::Grass,
} }
} }
/// Despawns the tiles if the event : [EndMapGenerationEvent] is received. /// Despawns the tiles if the event : [EndMapGenerationEvent] is received.
fn delete_map( fn delete_map(
mut commands: Commands, mut commands: Commands,
query: Query<Entity, With<Tile>>, query: Query<Entity, With<Tile>>,
mut event: EventReader<MapGenerationEvent>, mut event: EventReader<MapGeneration>,
) { ) {
for _ in event.read() { for _ in event.read() {
for entity in query.iter() { for entity in query.iter() {