ashscript_types/
map.rs

1use hexx::Hex;
2use serde::Serialize;
3
4use crate::{chunk::{Chunk, Chunks}, constants::map::CHUNK_SIZE, structures::{factory::Factory, turret::Turret}, unit::Unit};
5
6#[derive(Default, Serialize, Clone)]
7pub struct Map {
8    pub chunks: Chunks,
9}
10
11impl Map {
12    pub fn new() -> Self {
13        Self {
14            ..Default::default()
15        }
16    }
17
18    pub fn chunk_at(&self, hex: &Hex) -> Option<&Chunk> {
19        let chunk_hex = hex.to_lower_res(CHUNK_SIZE);
20        self.chunks.get(&chunk_hex)
21    }
22
23    pub fn chunk_at_mut(&mut self, hex: &Hex) -> Option<&mut Chunk> {
24        let chunk_hex = hex.to_lower_res(CHUNK_SIZE);
25        self.chunks.get_mut(&chunk_hex)
26    }
27
28    pub fn unit_at(&self, hex: &Hex) -> Option<&Unit> {
29        let chunk = self.chunk_at(hex)?;
30        chunk.units.get(hex)
31    }
32
33    pub fn unit_at_mut(&mut self, hex: &Hex) -> Option<&mut Unit> {
34        let chunk = self.chunk_at_mut(hex)?;
35        chunk.units.get_mut(hex)
36    }
37
38    pub fn factory_at(&self, hex: &Hex) -> Option<&Factory> {
39        let chunk = self.chunk_at(hex)?;
40        chunk.factories.get(hex)
41    }
42
43    pub fn factory_at_mut(&mut self, hex: &Hex) -> Option<&mut Factory> {
44        let chunk = self.chunk_at_mut(hex)?;
45        chunk.factories.get_mut(hex)
46    }
47
48    pub fn turret_at(&self, hex: &Hex) -> Option<&Turret> {
49        let chunk = self.chunk_at(hex)?;
50        chunk.turrets.get(hex)
51    }
52
53    pub fn turret_at_mut(&mut self, hex: &Hex) -> Option<&mut Turret> {
54        let chunk = self.chunk_at_mut(hex)?;
55        chunk.turrets.get_mut(hex)
56    }
57
58    /* pub fn game_object(&self, identifier: &Identifier) -> Option<GameObject> {
59
60        match identifier.kind {
61            GameObjectKind::Unit => {
62                let object = self.unit_at(&identifier.hex)?;
63                Some(GameObject::Unit(object))
64            },
65            GameObjectKind::Turret => {
66                let object = self.turret_at(&identifier.hex)?;
67                Some(GameObject::Turret(object))
68            }
69            GameObjectKind::Factory => {
70                let object = self.factory_at(&identifier.hex)?;
71                Some(GameObject::Factory(object))
72            }
73            _ => None,
74        }
75    }
76
77    pub fn game_object_mut<T>(&mut self, identifier: &Identifier) -> Option<GameObjectMut> {
78        match identifier.kind {
79            GameObjectKind::Unit => {
80                let object = self.unit_at_mut(&identifier.hex)?;
81                Some(GameObjectMut::Unit(object))
82            }
83            GameObjectKind::Turret => {
84                let object = self.turret_at_mut(&identifier.hex)?;
85                Some(GameObjectMut::Turret(object))
86            }
87            GameObjectKind::Factory => {
88                let object = self.factory_at_mut(&identifier.hex)?;
89                Some(GameObjectMut::Factory(object))
90            }
91            _ => None,
92        }
93    } */
94}