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