1 package cz.cuni.amis.pogamut.udk.agent.module.sensor;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import cz.cuni.amis.pogamut.base.agent.module.SensorModule;
7 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
8 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
9 import cz.cuni.amis.pogamut.base.utils.logging.LogCategory;
10 import cz.cuni.amis.pogamut.udk.bot.IUDKBotController;
11 import cz.cuni.amis.pogamut.udk.bot.impl.UDKBot;
12 import cz.cuni.amis.pogamut.udk.communication.messages.ItemType;
13 import cz.cuni.amis.pogamut.udk.communication.translator.itemdescriptor.ItemDescriptor;
14 import cz.cuni.amis.pogamut.udk.communication.translator.itemdescriptor.WeaponDescriptor;
15 import cz.cuni.amis.pogamut.udk.communication.translator.shared.events.ItemDescriptorObtained;
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public class ItemDescriptors extends SensorModule<UDKBot> {
30
31 private Map<String, ItemDescriptor> inventoryTypeDescs = new HashMap<String, ItemDescriptor>();
32
33 private Map<ItemType, ItemDescriptor> descs = new HashMap<ItemType, ItemDescriptor>();
34
35 private HashMap<ItemType, ItemType> ammoToWeapon = new HashMap<ItemType, ItemType>();
36
37
38
39
40
41
42 public ItemType getWeaponForAmmo(ItemType ammoType) {
43 return ammoToWeapon.get(ammoType);
44 }
45
46
47
48
49
50
51 public boolean hasDescriptor(ItemType itemType) {
52 return descs.containsKey(itemType);
53 }
54
55
56
57
58
59
60 public ItemDescriptor getDescriptor(ItemType itemType) {
61 return descs.get(itemType);
62 }
63
64
65
66
67
68
69 public boolean hasDescriptor(String inventoryType) {
70 return inventoryTypeDescs.containsKey(inventoryType);
71 }
72
73
74
75
76
77
78 public ItemDescriptor getDescriptor(String inventoryType) {
79 return inventoryTypeDescs.get(inventoryType);
80 }
81
82
83
84
85
86
87 private class ItemDescriptorObtainedListener implements IWorldEventListener<ItemDescriptorObtained> {
88 private IWorldView worldView;
89
90
91
92
93
94 public ItemDescriptorObtainedListener(IWorldView worldView)
95 {
96 worldView.addEventListener(ItemDescriptorObtained.class, this);
97 this.worldView = worldView;
98 }
99
100 @Override
101 public void notify(ItemDescriptorObtained event) {
102 inventoryTypeDescs.put(event.getItemDescriptor().getInventoryType(), event.getItemDescriptor());
103 descs.put(event.getItemDescriptor().getPickupType(), event.getItemDescriptor());
104 if (event.getItemDescriptor() instanceof WeaponDescriptor) {
105 WeaponDescriptor desc = (WeaponDescriptor)event.getItemDescriptor();
106 if (desc.getPriAmmoItemType() != null) {
107 ammoToWeapon.put(desc.getPriAmmoItemType(), desc.getPickupType());
108 }
109 if (desc.getSecAmmoItemType() != null) {
110 ammoToWeapon.put(desc.getSecAmmoItemType(), desc.getPickupType());
111 }
112 }
113 }
114 }
115
116
117 private ItemDescriptorObtainedListener itemDescObtainedListener;
118
119
120
121
122
123 @Override
124 protected void start(boolean startPaused) {
125 super.start(startPaused);
126 inventoryTypeDescs.clear();
127 descs.clear();
128 }
129
130
131
132
133
134 public ItemDescriptors(UDKBot bot) {
135 this(bot, null);
136
137 }
138
139 public ItemDescriptors(UDKBot bot, LogCategory moduleLog) {
140 super(bot, moduleLog);
141 itemDescObtainedListener = new ItemDescriptorObtainedListener(bot.getWorldView());
142 }
143
144 }