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}