1 package cz.cuni.amis.pogamut.defcon.consts;
2
3 import cz.cuni.amis.pogamut.defcon.base3d.worldview.object.DefConLocation;
4 import cz.cuni.amis.pogamut.defcon.communication.messages.infos.*;
5 import cz.cuni.amis.pogamut.defcon.consts.state.*;
6
7 import java.util.EnumSet;
8 import java.util.HashMap;
9 import java.util.Map;
10
11 import javabot.JBot;
12
13 import javabot.JBot.UnitData;
14
15
16
17
18
19
20
21 public enum UnitType {INVALID(JBot.TypeInvalid), CITY(JBot.TypeCity), SILO(JBot.TypeSilo),
22 RADAR(JBot.TypeRadarStation), NUKE(JBot.TypeNuke), EXPLOSION(JBot.TypeExplosion),
23 SUB(JBot.TypeSub), BATTLE_SHIP(JBot.TypeBattleShip), AIR_BASE(JBot.TypeAirBase),
24 FIGHTER(JBot.TypeFighter), BOMBER(JBot.TypeBomber), CARRIER(JBot.TypeCarrier),
25 TORNADO(JBot.TypeTornado), SAUCER(JBot.TypeSaucer), FLEET(JBot.TypeFleet),
26 GUNSHOT(JBot.TypeGunshot), QUEUE_ITEM(JBot.TypeQueueItem), NUM_OBJECTS(18);
27
28
29
30
31
32 private static Map<Integer, UnitType> enums = new HashMap<Integer, UnitType>();
33
34
35
36
37
38
39
40
41 public static UnitType getEnum(int id) {
42 return enums.get(id);
43 }
44
45 static {
46 for (UnitType item : UnitType.values()) {
47 enums.put(item.id, item);
48 }
49 }
50
51
52
53
54 public final int id;
55
56
57
58
59
60
61 public static final EnumSet<UnitType> units;
62
63
64
65
66
67 public static final EnumSet<UnitType> air;
68
69
70
71
72
73 public static final EnumSet<UnitType> naval;
74
75
76
77
78
79 public static final EnumSet<UnitType> ground;
80
81
82
83
84
85 public static final EnumSet<UnitType> misc;
86
87
88
89
90
91
92 private UnitType(int id) {
93 this.id = id;
94 }
95
96 static {
97 units = EnumSet.of(SILO, RADAR, NUKE, SUB, BATTLE_SHIP, AIR_BASE, FIGHTER, BOMBER, CARRIER,
98 FLEET);
99 air = EnumSet.of(NUKE, FIGHTER, BOMBER);
100 naval = EnumSet.of(SUB, BATTLE_SHIP, CARRIER, FLEET);
101 ground = EnumSet.of(SILO, RADAR, AIR_BASE);
102 misc = EnumSet.of(INVALID, CITY, EXPLOSION, TORNADO, SAUCER, GUNSHOT, QUEUE_ITEM,
103 NUM_OBJECTS);
104 }
105
106
107
108
109
110
111
112 public boolean isUnit() {
113 return units.contains(this);
114 }
115
116
117
118
119
120
121
122 public boolean isAir() {
123 return air.contains(this);
124 }
125
126
127
128
129
130
131
132 public boolean isGround() {
133 return ground.contains(this);
134 }
135
136
137
138
139
140
141
142 public boolean isNaval() {
143 return naval.contains(this);
144 }
145
146
147
148
149
150
151
152 public boolean isMisc() {
153 return misc.contains(this);
154 }
155
156
157
158
159
160
161
162
163
164
165 public static DefConObject getInstanceOfUnitTypeFromUnitData(UnitData data, double time) {
166 try {
167 switch (UnitType.getEnum(data.m_type)) {
168 case CARRIER:return new Carrier(data.m_objectId, data.m_teamId,
169 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
170 CarrierState.getState(data.m_currentState),
171 JBot.GetStateCount(data.m_objectId, data.m_currentState),
172 JBot.GetCurrentTargetId(data.m_objectId), JBot.GetNukeSupply(data.m_objectId),
173 JBot.GetStateCount(data.m_objectId, CarrierState.FIGHTER_LAUNCH.getStateId()),
174 JBot.GetStateCount(data.m_objectId, CarrierState.BOMBER_LAUNCH.getStateId()),
175 time);
176
177 case NUKE:return new Nuke(data.m_objectId, data.m_teamId,
178 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
179 NukeState.getState(data.m_currentState),
180 JBot.GetStateCount(data.m_objectId, data.m_currentState),
181 JBot.GetCurrentTargetId(data.m_objectId), time);
182
183 case BOMBER:return new Bomber(data.m_objectId, data.m_teamId,
184 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
185 BomberState.getState(data.m_currentState),
186 JBot.GetStateCount(data.m_objectId, data.m_currentState),
187 JBot.GetCurrentTargetId(data.m_objectId),
188 new DefConLocation(JBot.GetBomberNukeTarget(data.m_objectId)), time);
189
190 case EXPLOSION:return new Explosion(data.m_objectId, data.m_teamId,
191 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible, time);
192
193 case QUEUE_ITEM:return new QueueItem(data.m_objectId, time);
194
195 case FIGHTER:return new Fighter(data.m_objectId, data.m_teamId,
196 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
197 FighterState.getState(data.m_currentState),
198 JBot.GetStateCount(data.m_objectId, data.m_currentState),
199 JBot.GetCurrentTargetId(data.m_objectId), time);
200
201 case SAUCER:return new Saucer(data.m_objectId, data.m_teamId,
202 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible, time);
203
204 case FLEET:return new Fleet(data.m_objectId, data.m_teamId,
205 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
206 JBot.GetFleetMembers(data.m_objectId), time);
207
208 case BATTLE_SHIP:return new Battleship(data.m_objectId, data.m_teamId,
209 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
210 BattleshipState.getState(data.m_currentState),
211 JBot.GetStateCount(data.m_objectId, data.m_currentState),
212 JBot.GetCurrentTargetId(data.m_objectId), time);
213
214 case CITY:return new City(data.m_objectId, data.m_teamId,
215 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
216 JBot.GetCityPopulation(data.m_objectId), time);
217
218 case AIR_BASE:return new AirBase(data.m_objectId, data.m_teamId,
219 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
220 AirBaseState.getState(data.m_currentState),
221 JBot.GetStateCount(data.m_objectId, data.m_currentState),
222 JBot.GetCurrentTargetId(data.m_objectId), JBot.GetNukeSupply(data.m_objectId),
223 JBot.GetStateCount(data.m_objectId, AirBaseState.FIGHTER_LAUNCH.getStateId()),
224 JBot.GetStateCount(data.m_objectId, AirBaseState.BOMBER_LAUNCH.getStateId()),
225 time);
226
227 case TORNADO:return new Tornado(data.m_objectId, data.m_teamId,
228 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible, time);
229
230 case RADAR:return new Radar(data.m_objectId, data.m_teamId,
231 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
232 RadarState.getState(data.m_currentState),
233 JBot.GetStateCount(data.m_objectId, data.m_currentState),
234 JBot.GetCurrentTargetId(data.m_objectId), time);
235
236 case SUB:return new Sub(data.m_objectId, data.m_teamId,
237 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
238 SubState.getState(data.m_currentState),
239 JBot.GetStateCount(data.m_objectId, data.m_currentState),
240 JBot.GetCurrentTargetId(data.m_objectId), JBot.GetNukeSupply(data.m_objectId),
241 time);
242
243 case GUNSHOT:return new Gunshot(data.m_objectId, data.m_teamId,
244 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible, time);
245
246 case SILO:return new Silo(data.m_objectId, data.m_teamId,
247 new DefConLocation(data.m_longitude, data.m_latitude), data.m_visible,
248 SiloState.getState(data.m_currentState),
249 JBot.GetStateCount(data.m_objectId, data.m_currentState),
250 JBot.GetCurrentTargetId(data.m_objectId), JBot.GetNukeSupply(data.m_objectId),
251 time);
252
253 case INVALID:return new InvalidObject(data.m_objectId, time);
254 }
255 } catch (Exception e) {
256 }
257
258 return null;
259 }
260
261
262
263
264
265
266 public Class<?extends DefConObject> getClassOfUnitType() {
267 return getClassOfUnitType(this);
268 }
269
270
271
272
273
274
275
276
277 public static Class<?extends DefConObject> getClassOfUnitType(UnitType data) {
278 switch (data) {
279 case CARRIER:return Carrier.class;
280
281 case NUKE:return Nuke.class;
282
283 case BOMBER:return Bomber.class;
284
285 case EXPLOSION:return Explosion.class;
286
287 case QUEUE_ITEM:return QueueItem.class;
288
289 case FIGHTER:return Fighter.class;
290
291 case SAUCER:return Saucer.class;
292
293 case FLEET:return Fleet.class;
294
295 case BATTLE_SHIP:return Battleship.class;
296
297 case CITY:return City.class;
298
299 case AIR_BASE:return AirBase.class;
300
301 case TORNADO:return Tornado.class;
302
303 case RADAR:return Radar.class;
304
305 case SUB:return Sub.class;
306
307 case GUNSHOT:return Gunshot.class;
308
309 case SILO:return Silo.class;
310
311 case INVALID:return InvalidObject.class;
312 }
313
314 return null;
315 }
316 }