1use screeps::local::RoomName;
2
3#[derive(Debug, PartialEq, Eq)]
4pub enum RoomType {
5 Normal,
6 Highway,
7 HighwayIntersection,
8 Keeper,
9 Center,
10}
11
12pub fn room_type_for_name(room_name: RoomName) -> RoomType {
15 let x_coord = room_name.x_coord();
16 let x_mod = if x_coord < 0 {
17 (x_coord.abs() - 1) % 10
18 } else {
19 x_coord % 10
20 };
21
22 let y_coord = room_name.y_coord();
23 let y_mod = if y_coord < 0 {
24 (y_coord.abs() - 1) % 10
25 } else {
26 y_coord % 10
27 };
28
29 if x_mod == 0 && y_mod == 0 {
30 RoomType::HighwayIntersection
31 } else if x_mod == 0 || y_mod == 0 {
32 RoomType::Highway
33 } else if x_mod == 5 && y_mod == 5 {
34 RoomType::Center
35 } else if (4..=6).contains(&x_mod) && (4..=6).contains(&y_mod) {
36 RoomType::Keeper
37 } else {
38 RoomType::Normal
39 }
40}
41
42#[cfg(test)]
43mod test {
44 use super::*;
45
46 #[test]
47 fn room_types() {
48 assert_eq!(
49 room_type_for_name(RoomName::new("W0N0").unwrap()),
50 RoomType::HighwayIntersection
51 );
52 assert_eq!(
53 room_type_for_name(RoomName::new("E0S0").unwrap()),
54 RoomType::HighwayIntersection
55 );
56
57 assert_eq!(
58 room_type_for_name(RoomName::new("W0N1").unwrap()),
59 RoomType::Highway
60 );
61 assert_eq!(
62 room_type_for_name(RoomName::new("E0S1").unwrap()),
63 RoomType::Highway
64 );
65
66 assert_eq!(
67 room_type_for_name(RoomName::new("W1N1").unwrap()),
68 RoomType::Normal
69 );
70 assert_eq!(
71 room_type_for_name(RoomName::new("E1S1").unwrap()),
72 RoomType::Normal
73 );
74
75 assert_eq!(
76 room_type_for_name(RoomName::new("W3N3").unwrap()),
77 RoomType::Normal
78 );
79 assert_eq!(
80 room_type_for_name(RoomName::new("E3S3").unwrap()),
81 RoomType::Normal
82 );
83
84 assert_eq!(
85 room_type_for_name(RoomName::new("W4N4").unwrap()),
86 RoomType::Keeper
87 );
88 assert_eq!(
89 room_type_for_name(RoomName::new("E4S4").unwrap()),
90 RoomType::Keeper
91 );
92
93 assert_eq!(
94 room_type_for_name(RoomName::new("W5N5").unwrap()),
95 RoomType::Center
96 );
97 assert_eq!(
98 room_type_for_name(RoomName::new("E5S5").unwrap()),
99 RoomType::Center
100 );
101
102 assert_eq!(
103 room_type_for_name(RoomName::new("W6N6").unwrap()),
104 RoomType::Keeper
105 );
106 assert_eq!(
107 room_type_for_name(RoomName::new("E6S6").unwrap()),
108 RoomType::Keeper
109 );
110
111 assert_eq!(
112 room_type_for_name(RoomName::new("W7N7").unwrap()),
113 RoomType::Normal
114 );
115 assert_eq!(
116 room_type_for_name(RoomName::new("E7S7").unwrap()),
117 RoomType::Normal
118 );
119
120 assert_eq!(
121 room_type_for_name(RoomName::new("W9N9").unwrap()),
122 RoomType::Normal
123 );
124 assert_eq!(
125 room_type_for_name(RoomName::new("E9S9").unwrap()),
126 RoomType::Normal
127 );
128
129 assert_eq!(
130 room_type_for_name(RoomName::new("W10N10").unwrap()),
131 RoomType::HighwayIntersection
132 );
133 assert_eq!(
134 room_type_for_name(RoomName::new("E10S10").unwrap()),
135 RoomType::HighwayIntersection
136 );
137
138 assert_eq!(
139 room_type_for_name(RoomName::new("W11N10").unwrap()),
140 RoomType::Highway
141 );
142 assert_eq!(
143 room_type_for_name(RoomName::new("E11S10").unwrap()),
144 RoomType::Highway
145 );
146 }
147}