1 package cz.cuni.amis.pogamut.ut2004.communication.messages;
2
3 import java.io.Serializable;
4 import java.util.HashMap;
5 import java.util.Set;
6
7 import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
8 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Self;
9 import cz.cuni.amis.utils.maps.HashMapSet;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class ItemType implements Serializable {
28
29
30
31
32 public static final HashMapSet<Category, ItemType> CATEGORIES = new HashMapSet<Category, ItemType>();
33
34
35
36
37
38 public enum Category {
39
40 WEAPON("Weapon"),
41
42 AMMO("Ammo"),
43
44 HEALTH("Health"),
45
46 ARMOR("Armor"),
47
48 SHIELD("Shield"),
49
50 ADRENALINE("Adrenaline"),
51
52 OTHER("Other"),
53
54 NONE("No category");
55
56
57
58
59 public final String name;
60
61
62
63
64
65
66
67
68
69 Category(String name) {
70 this.name = name;
71 }
72
73
74
75
76
77 public Set<ItemType> getTypes() {
78 return CATEGORIES.get(this);
79 }
80
81 }
82
83
84
85
86
87
88
89 public static final HashMapSet<Group, ItemType> GROUPS = new HashMapSet<Group, ItemType>();
90
91
92
93
94
95
96
97 public enum Group {
98
99 TRANSLOCATOR("Translocator"),
100
101 SHIELD_GUN("ShieldGun"),
102
103 ASSAULT_RIFLE("AssaultRifle"),
104
105 BIO_RIFLE("BioRifle"),
106
107 SHOCK_RIFLE("ShockRifle"),
108
109 LINK_GUN("LinkGun"),
110
111 MINIGUN("Minigun"),
112
113 FLAK_CANNON("FlakCannon"),
114
115 ROCKET_LAUNCHER("RocketLauncher"),
116
117 LIGHTNING_GUN("LightningGun"),
118
119 SNIPER_RIFLE("SniperRifle"),
120
121 ION_PAINTER("IonPainter"),
122
123 REDEEMER("Redeemer"),
124
125 SUPER_SHOCK_RIFLE("SuperShockRifle"),
126
127 ONS_MINE_LAYER("ONS MineLayer"),
128
129 ONS_GRENADE_LAUNCHER("ONS GrenadeLauncher"),
130
131 ONS_AVRIL("ONS AVRiL"),
132
133 ONS_TARGET_PAINTER("TargetPainter"),
134
135
136 HEALTH("HealthKit"),
137
138 MINI_HEALTH("HealthVial"),
139
140 SUPER_HEALTH("SuperHealth"),
141
142
143 SMALL_ARMOR("SmallShield"),
144
145 SUPER_ARMOR("SuperShield"),
146
147
148 ADRENALINE("Adrenaline"),
149
150 UDAMAGE("UDamage"),
151
152 KEY("Key"),
153
154 OTHER("Unknown"),
155
156 NONE("None");
157
158
159
160
161 public String name;
162
163
164
165
166
167
168
169
170
171 Group(String name) {
172 this.name = name;
173 }
174
175 public Set<ItemType> getTypes() {
176 return GROUPS.get(this);
177 }
178 }
179
180
181
182
183
184
185 private static HashMap<String, ItemType> protos = new HashMap<String, ItemType>();
186
187
188
189
190 public static final ItemType TRANSLOCATOR = MakePrototype(Category.WEAPON,
191 Group.TRANSLOCATOR, new String[] { "XWeapons.TransPickup", "XWeapons.Transpickup", "XWeapons.Translauncher" });
192
193
194 public static final ItemType SHIELD_GUN = MakePrototype(Category.WEAPON,
195 Group.SHIELD_GUN, new String[] { "XWeapons.ShieldGunPickup" });
196
197
198 public static final ItemType SHIELD_GUN_AMMO = MakePrototype(Category.AMMO,
199 Group.SHIELD_GUN, new String[] { "XWeapons.ShieldAmmoPickup", "XWeapons.ShieldAmmo" }
200 );
201
202
203 public static final ItemType ASSAULT_RIFLE = MakePrototype(Category.WEAPON,
204 Group.ASSAULT_RIFLE, new String[] { "XWeapons.AssaultRiflePickup" });
205
206 public static final ItemType ASSAULT_RIFLE_AMMO = MakePrototype(
207 Category.AMMO, Group.ASSAULT_RIFLE,
208 new String[] { "XWeapons.AssaultAmmoPickup", "XWeapons.AssaultAmmo" });
209
210
211 public static final ItemType ASSAULT_RIFLE_GRENADE = MakePrototype(
212 Category.AMMO, Group.ASSAULT_RIFLE,
213 new String[] { "XWeapons.GrenadeAmmoPickup", "XWeapons.GrenadeAmmo" }
214 );
215
216
217 public static final ItemType BIO_RIFLE = MakePrototype(Category.WEAPON,
218 Group.BIO_RIFLE, new String[] { "XWeapons.BioRiflePickup",
219 "UTClassic.ClassicBioRiflePickup" });
220
221 public static final ItemType BIO_RIFLE_AMMO = MakePrototype(Category.AMMO,
222 Group.BIO_RIFLE, new String[] { "XWeapons.BioAmmoPickup", "XWeapons.BioAmmo" });
223
224
225 public static final ItemType SHOCK_RIFLE = MakePrototype(Category.WEAPON,
226 Group.SHOCK_RIFLE, new String[] { "XWeapons.ShockRiflePickup",
227 "UTClassic.ClassicShockRiflePickup" });
228
229 public static final ItemType SHOCK_RIFLE_AMMO = MakePrototype(
230 Category.AMMO, Group.SHOCK_RIFLE,
231 new String[] { "XWeapons.ShockAmmoPickup", "XWeapons.ShockAmmo" });
232
233
234 public static final ItemType LINK_GUN = MakePrototype(Category.WEAPON,
235 Group.LINK_GUN, new String[] { "XWeapons.LinkGunPickup" });
236
237 public static final ItemType LINK_GUN_AMMO = MakePrototype(Category.AMMO,
238 Group.LINK_GUN, new String[] { "XWeapons.LinkAmmoPickup", "XWeapons.LinkAmmo" });
239
240
241 public static final ItemType MINIGUN = MakePrototype(Category.WEAPON,
242 Group.MINIGUN, new String[] { "XWeapons.MinigunPickup",
243 "UTClassic.ClassicMinigunPickup" });
244
245 public static final ItemType MINIGUN_AMMO = MakePrototype(Category.AMMO,
246 Group.MINIGUN, new String[] { "XWeapons.MinigunAmmoPickup", "XWeapons.MinigunAmmo" });
247
248
249 public static final ItemType FLAK_CANNON = MakePrototype(Category.WEAPON,
250 Group.FLAK_CANNON, new String[] { "XWeapons.FlakCannonPickup",
251 "UTClassic.ClassicFlakCannonPickup" });
252
253 public static final ItemType FLAK_CANNON_AMMO = MakePrototype(
254 Category.AMMO, Group.FLAK_CANNON,
255 new String[] { "XWeapons.FlakAmmoPickup", "XWeapons.FlakAmmo" });
256
257
258 public static final ItemType ROCKET_LAUNCHER = MakePrototype(
259 Category.WEAPON, Group.ROCKET_LAUNCHER, new String[] {
260 "XWeapons.RocketLauncherPickup",
261 "UTClassic.ClassicRocketLauncherPickup" });
262
263 public static final ItemType ROCKET_LAUNCHER_AMMO = MakePrototype(
264 Category.AMMO, Group.ROCKET_LAUNCHER,
265 new String[] { "XWeapons.RocketAmmoPickup", "XWeapons.RocketAmmo" });
266
267
268 public static final ItemType LIGHTNING_GUN = MakePrototype(Category.WEAPON,
269 Group.LIGHTNING_GUN, new String[] { "XWeapons.SniperRiflePickup" });
270
271
272 public static final ItemType LIGHTNING_GUN_AMMO = MakePrototype(
273 Category.AMMO, Group.LIGHTNING_GUN,
274 new String[] { "XWeapons.SniperAmmoPickup", "XWeapons.SniperAmmo" });
275
276
277 public static final ItemType SNIPER_RIFLE = MakePrototype(Category.WEAPON,
278 Group.SNIPER_RIFLE,
279 new String[] { "UTClassic.ClassicSniperRiflePickup" });
280
281 public static final ItemType SNIPER_RIFLE_AMMO = MakePrototype(
282 Category.AMMO, Group.SNIPER_RIFLE,
283 new String[] { "UTClassic.ClassicSniperAmmoPickup", "UTClassic.ClassicSniperAmmo" });
284
285
286 public static final ItemType REDEEMER = MakePrototype(Category.WEAPON,
287 Group.REDEEMER, new String[] { "XWeapons.RedeemerPickup" });
288
289
290 public static final ItemType SUPER_SHOCK_RIFLE = MakePrototype(
291 Category.WEAPON, Group.SUPER_SHOCK_RIFLE,
292 new String[] { "XWeapons.SuperShockRiflePickup" });
293
294
295 public static final ItemType ION_PAINTER = MakePrototype(Category.WEAPON,
296 Group.ION_PAINTER, new String[] { "XWeapons.PainterPickup" });
297
298
299 public static final ItemType ONS_MINE_LAYER = MakePrototype(
300 Category.WEAPON, Group.ONS_MINE_LAYER,
301 new String[] { "Onslaught.ONSMineLayerPickup" });
302
303 public static final ItemType ONS_MINE_LAYER_AMMO = MakePrototype(
304 Category.AMMO, Group.ONS_MINE_LAYER,
305 new String[] { "Onslaught.ONSMineAmmoPickup", "Onslaught.ONSMineAmmo" });
306
307
308 public static final ItemType ONS_GRENADE_LAUNCHER = MakePrototype(
309 Category.WEAPON, Group.ONS_GRENADE_LAUNCHER,
310 new String[] { "Onslaught.ONSGrenadePickup" });
311
312 public static final ItemType ONS_GRENADE_LAUNCHER_AMMO = MakePrototype(
313 Category.AMMO, Group.ONS_GRENADE_LAUNCHER,
314 new String[] { "Onslaught.ONSGrenadeAmmoPickup" });
315
316
317 public static final ItemType ONS_AVRIL = MakePrototype(Category.WEAPON,
318 Group.ONS_AVRIL, new String[] { "Onslaught.ONSAVRiLPickup" });
319
320 public static final ItemType ONS_AVRIL_AMMO = MakePrototype(Category.AMMO,
321 Group.ONS_AVRIL, new String[] { "Onslaught.ONSAVRiLAmmoPickup" });
322
323
324 public static final ItemType ONS_TARGET_PAINTER = MakePrototype(
325 Category.WEAPON, Group.ONS_TARGET_PAINTER,
326 new String[] { "OnslaughtFull.ONSPainterPickup" });
327
328
329 public static final ItemType HEALTH_PACK = MakePrototype(Category.HEALTH,
330 Group.HEALTH, new String[] { "XPickups.HealthPack",
331 "XPickups.TournamentHealth" });
332
333 public static final ItemType MINI_HEALTH_PACK = MakePrototype(
334 Category.HEALTH, Group.MINI_HEALTH,
335 new String[] { "XPickups.MiniHealthPack" });
336
337 public static final ItemType SUPER_HEALTH_PACK = MakePrototype(
338 Category.HEALTH, Group.SUPER_HEALTH,
339 new String[] { "XPickups.SuperHealthPack" });
340
341
342 public static final ItemType SHIELD_PACK = MakePrototype(Category.ARMOR,
343 Group.SMALL_ARMOR, new String[] { "XPickups.ShieldPack",
344 "XPickups.ShieldPickup" });
345
346 public static final ItemType SUPER_SHIELD_PACK = MakePrototype(
347 Category.ARMOR, Group.SUPER_ARMOR,
348 new String[] { "XPickups.SuperShieldPack" });
349
350
351 public static final ItemType U_DAMAGE_PACK = MakePrototype(
352 Category.OTHER, Group.UDAMAGE, new String[] {
353 "XPickups.UDamagePack", "XGame.UDamageReward" });
354
355
356 public static final ItemType ADRENALINE_PACK = MakePrototype(
357 Category.ADRENALINE, Group.ADRENALINE,
358 new String[] { "XPickups.AdrenalinePickup" });
359
360
361 public static final ItemType KEY = MakePrototype(Category.OTHER,
362 Group.KEY, new String[] { "UnrealGame.KeyPickup" });
363
364
365 public static final ItemType NONE = MakePrototype(Category.OTHER, Group.NONE,
366 new String[] { "None", "NONE", "none" });
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383 public static ItemType getWeapon(UnrealId id) {
384 if (id == null) return null;
385 String str = id.getStringId();
386 if (str.contains(".")) str = str.substring(str.lastIndexOf(".")+1);
387 str = str.toLowerCase();
388 if (str.equals("assaultrifle")) return ItemType.ASSAULT_RIFLE;
389 if (str.equals("shieldgun")) return ItemType.SHIELD_GUN;
390 if (str.equals("flakcannon")) return ItemType.FLAK_CANNON;
391 if (str.equals("biorifle")) return ItemType.BIO_RIFLE;
392 if (str.equals("shockrifle")) return ItemType.SHOCK_RIFLE;
393 if (str.equals("linkgun")) return ItemType.LINK_GUN;
394 if (str.equals("sniperrifle")) return ItemType.SNIPER_RIFLE;
395 if (str.equals("rocketlauncher")) return ItemType.ROCKET_LAUNCHER;
396 if (str.equals("minigun")) return ItemType.MINIGUN;
397 if (str.equals("lightinggun")) return ItemType.LIGHTNING_GUN;
398 if (str.equals("translocator")) return ItemType.TRANSLOCATOR;
399 if (str.equals("translauncher")) return ItemType.TRANSLOCATOR;
400 if (str.equals("redeemer")) return ItemType.REDEEMER;
401 if (str.equals("painter")) return ItemType.ION_PAINTER;
402 return null;
403 }
404
405
406
407
408
409
410
411
412
413
414
415 private String name;
416
417 @Override
418 public String toString() {
419 return "ItemType[name = " + name + ", category = " + category + ", group = " + group + "]";
420 }
421
422
423
424
425
426
427 private Category category;
428
429
430
431
432 private Group group;
433
434
435
436
437
438
439 public Category getCategory() {
440
441 return (category == null) ? (category = getProto().category) : category;
442 }
443
444
445
446
447
448
449 public Group getGroup() {
450
451 return (group == null) ? (group = getProto().group) : group;
452 }
453
454
455
456
457
458
459 private ItemType proto;
460
461
462
463
464
465
466 private ItemType getProto() {
467
468 if (proto != null) return proto;
469 synchronized(protos) {
470 return proto = protos.get(name);
471 }
472 }
473
474
475
476
477
478
479
480
481
482
483 @Override
484 public boolean equals(Object obj) {
485
486 if (this == obj)
487 return true;
488
489
490 if (obj instanceof ItemType) {
491
492 if (getProto() == ((ItemType) obj).getProto())
493 return true;
494 }
495
496 return false;
497 }
498
499
500
501
502
503
504 @Override
505 public int hashCode() {
506
507 return getProto().name.hashCode();
508 }
509
510
511
512
513
514
515
516
517
518 public ItemType(String name) {
519 this.name = name;
520 this.category = Category.OTHER;
521 this.group = Group.OTHER;
522 this.proto = this;
523 }
524
525
526
527
528 private ItemType(String name, Category category, Group group) {
529 this.name = name;
530 this.category = category;
531 this.group = group;
532 this.proto = this;
533 }
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548 public static ItemType MakePrototype(Category category,
549 Group group, String[] utNames) {
550 ItemType type;
551 synchronized(protos) {
552
553 type = new ItemType(utNames[0], category, group);
554
555 for (String utName : utNames)
556 protos.put(utName, type);
557
558 if (category != null) {
559 CATEGORIES.get(category).add(type);
560 }
561 if (group != null) {
562 GROUPS.get(group).add(type);
563 }
564 }
565 return type;
566 }
567
568
569
570
571
572
573 public static ItemType getItemType(String utName) {
574 ItemType type;
575 synchronized(protos) {
576 type = protos.get(utName);
577 if (type != null) return type;
578
579 type = new ItemType(utName);
580 protos.put(utName, type);
581 }
582 return type;
583 }
584
585 public String getName() {
586 return name;
587 }
588
589 }