generated from tipragot/rust
Adding a map creation plugin #57
|
@ -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
|
|||||||
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() {
|
||||||
|
|
Loading…
Reference in a new issue
This should be in the get_type function and the value shouldn't be hard coded