diff --git a/game/buildings/src/footprint.rs b/game/buildings/src/footprint.rs index 82f0cd2..74238fc 100644 --- a/game/buildings/src/footprint.rs +++ b/game/buildings/src/footprint.rs @@ -1,32 +1,39 @@ use bevy::math::{IVec2, Vec3Swizzles}; use serde::{Deserialize, Serialize}; +use shared::coords::CoordsCollection; use world_generation::hex_utils::HexCoord; #[derive(Serialize, Deserialize, Debug)] -pub struct BuildingFootprint { +pub struct BuildingFootprint +{ pub footprint: Vec, } -impl BuildingFootprint { - pub fn get_footprint(&self, center: &HexCoord) -> Vec { - let c = center.hex.xy(); - return self.footprint.iter().map(|p| HexCoord::from_hex(*p + c)).collect(); +impl BuildingFootprint +{ + pub fn get_footprint(&self, position: &HexCoord) -> CoordsCollection + { + CoordsCollection::from_points(self.footprint.clone()).with_translation(position) } - pub fn get_footprint_rotated(&self, center: &HexCoord, rotation: i32) -> Vec { - let c = center.hex.xy(); - return self + pub fn get_neighbors(&self, position: &HexCoord) -> CoordsCollection + { + let n_points: Vec = self .footprint .iter() - .map(|p| HexCoord::from_hex(*p + c).rotate_around(center, rotation)) + .flat_map(|p| HexCoord::from_hex(*p).get_neighbors()) + .map(|c| c.hex.xy()) + .filter(|p| !self.footprint.contains(p)) .collect(); - } - - pub fn get_neighbors(&self, center: &HexCoord) -> Vec { - todo!() - } - - pub fn get_neighbors_rotated(&self, center: &HexCoord, rotation: i32) -> Vec { - todo!(); + let mut out_points: Vec = Vec::with_capacity(n_points.len()); + for p in n_points + { + if out_points.contains(&p) + { + continue; + } + out_points.push(p); + } + return CoordsCollection::from_points(out_points).with_translation(position); } } diff --git a/game/shared/src/lib.rs b/game/shared/src/lib.rs index d5f3278..fc1eb1d 100644 --- a/game/shared/src/lib.rs +++ b/game/shared/src/lib.rs @@ -2,6 +2,7 @@ use bevy::reflect::Reflect; use serde::{Deserialize, Serialize}; pub mod building; +pub mod coords; pub mod despawn; pub mod events; pub mod identifiers; @@ -14,7 +15,8 @@ pub mod tags; // pub mod component_defination; #[derive(Debug, Serialize, Deserialize)] -pub enum Tier { +pub enum Tier +{ Zero, One, Two, @@ -23,7 +25,8 @@ pub enum Tier { } #[derive(Serialize, Deserialize, Debug, Reflect)] -pub enum StatusEffect { +pub enum StatusEffect +{ UnitRange(f32), UnitAttack(f32), UnitHealth(f32),