update
Some checks failed
Rust Checks / checks (push) Failing after 19s
Rust Checks / checks (pull_request) Failing after 5s

This commit is contained in:
CoCo_Sol 2024-02-21 11:15:54 +01:00
parent acd2de265c
commit 915d5ba5a4
3 changed files with 25 additions and 13 deletions

View file

@ -5,6 +5,7 @@ use noise::{NoiseFn, Perlin};
use super::hex::*;
use super::Tile;
use super::TilePosition;
/// A plugin to handle the map generation.
pub struct MapGenerationPlugin;
@ -41,24 +42,25 @@ fn generate_map(
mut end_map_event: EventWriter<EndMapGeneration>,
mut commands: Commands,
mut noise: Local<Option<Perlin>>,
mut map_iterator: Local<Option<HexSpiral<i32>>>,
mut spiral: Local<Option<HexSpiral<i32>>>,
) {
// Handle map generation events.
for event in event.read() {
*noise = Some(Perlin::new(event.seed));
*map_iterator = Some(HexPosition(0, 0).spiral(event.radius as usize));
*spiral = Some(TilePosition::new(0,0).spiral(event.radius as usize));
}
if let (Some(perlin), Some(spiral)) = (noise.as_ref(), map_iterator.as_mut()) {
if let Some(position) = spiral.next() {
let pixel_position = position.to_pixel_coordinates((0.2, 0.2));
commands.spawn((get_type(pixel_position, perlin), position));
} else {
end_map_event.send(EndMapGeneration);
*noise = None;
*map_iterator = None;
}
}
if let (None, None) = (noise.as_ref(), spiral.as_mut()) {
return;
}
if let Some(position) = spiral.as_mut().unwrap().next() {
let pixel_position = position.to_pixel_coordinates((0.2, 0.2));
commands.spawn((get_type(pixel_position, &noise.unwrap()), position as TilePosition));
} else {
end_map_event.send(EndMapGeneration);
*noise = None;
*spiral = None;
}
}
/// Returns the type of the position with the given noise.

View file

@ -234,6 +234,11 @@ impl<T: Number> Iterator for HexSpiral<T> {
}
impl<T: Number> HexPosition<T> {
/// Creates a new [HexPosition].
pub fn new(x: T, y: T) -> Self {
Self(x, y)
}
/// Converts the current [HexPosition] into a pixel coordinate.
/// Input: The size of the hexagon in pixels (witdh, height).
///

View file

@ -5,8 +5,13 @@ pub mod hex;
use bevy::prelude::*;
use self::hex::*;
/// The position of a tile in a hexagonal map.
pub type TilePosition = HexPosition<i32>;
/// The tile of the map.
#[derive(Component)]
#[derive(Component, Debug)]
pub enum Tile {
/// The hill tile.
Hill,