1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package nl.tudelft.goal.ut2004.environment;
22
23 import java.net.URI;
24 import java.rmi.RemoteException;
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004BotController;
29 import cz.cuni.amis.utils.flag.FlagListener;
30
31 import nl.tudelft.goal.EIS2Java.handlers.ActionHandler;
32 import nl.tudelft.goal.EIS2Java.handlers.AllPerceptPerceptHandler;
33 import nl.tudelft.goal.EIS2Java.handlers.DefaultActionHandler;
34 import nl.tudelft.goal.EIS2Java.handlers.PerceptHandler;
35 import nl.tudelft.goal.EIS2Java.translation.Translator;
36 import nl.tudelft.goal.unreal.environment.AbstractUnrealEnvironment;
37 import nl.tudelft.goal.unreal.messages.BotParameters;
38 import nl.tudelft.goal.unreal.translators.LocationTranslator;
39 import nl.tudelft.goal.unreal.translators.RotationTranslator;
40 import nl.tudelft.goal.unreal.translators.TeamTranslator;
41 import nl.tudelft.goal.unreal.translators.UnrealIdTranslator;
42 import nl.tudelft.goal.unreal.translators.VelocityTranslator;
43 import nl.tudelft.goal.ut2004.agent.UT2004BotBehavior;
44 import nl.tudelft.goal.ut2004.translators.ItemTypeTranslator;
45 import nl.tudelft.goal.ut2004.translators.ComboTranslator;
46 import nl.tudelft.goal.ut2004.translators.FireModeTranslator;
47 import nl.tudelft.goal.ut2004.translators.FlagStateTranslator;
48 import nl.tudelft.goal.ut2004.translators.GameTypeTranslator;
49 import nl.tudelft.goal.ut2004.translators.CategoryTranslator;
50 import nl.tudelft.goal.ut2004.translators.NavigationStateTranslator;
51 import nl.tudelft.goal.ut2004.translators.NoneTranslator;
52 import nl.tudelft.goal.ut2004.translators.PerceptTranslator;
53 import nl.tudelft.goal.ut2004.translators.SelectorListTranslator;
54 import nl.tudelft.goal.ut2004.translators.SelectorTranslator;
55 import nl.tudelft.goal.ut2004.translators.UnrealIdOrLocationTranslator;
56 import nl.tudelft.goal.ut2004.translators.WeaponPrefListTranslator;
57 import nl.tudelft.goal.ut2004.translators.WeaponPrefTranslator;
58 import nl.tudelft.goal.ut2004.visualizer.connection.AddBotCommand;
59 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceListener;
60 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceMediator;
61 import nl.tudelft.goal.ut2004.visualizer.connection.client.RemoteVisualizer;
62 import nl.tudelft.goal.ut2004.visualizer.connection.client.VisualizerServiceDefinition;
63 import nl.tudelft.pogamut.base.server.ReconnectingServerDefinition;
64 import eis.exceptions.EntityException;
65 import eis.exceptions.ManagementException;
66 import eis.iilang.Identifier;
67 import eis.iilang.Parameter;
68 import eis.iilang.ParameterList;
69
70 public class UT2004Environment extends AbstractUnrealEnvironment {
71
72
73
74
75 private static final long serialVersionUID = 8240549393243585632L;
76
77
78 private ReconnectingServerDefinition<RemoteVisualizer> visualizerConnection;
79
80 @Override
81 protected void registerTranslators() {
82
83 Translator translator = Translator.getInstance();
84
85
86
87
88
89
90
91 LocationTranslator locationTranslator = new LocationTranslator();
92 translator.registerJava2ParameterTranslator(locationTranslator);
93 translator.registerParameter2JavaTranslator(locationTranslator);
94
95
96
97
98
99
100
101 RotationTranslator rotationTranslator = new RotationTranslator();
102 translator.registerJava2ParameterTranslator(rotationTranslator);
103 translator.registerParameter2JavaTranslator(rotationTranslator);
104
105 TeamTranslator teamTranslator = new TeamTranslator();
106 translator.registerJava2ParameterTranslator(teamTranslator);
107 translator.registerParameter2JavaTranslator(teamTranslator);
108
109 UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
110 translator.registerJava2ParameterTranslator(unrealIdTranslator);
111 translator.registerParameter2JavaTranslator(unrealIdTranslator);
112
113 VelocityTranslator velocityTranslator = new VelocityTranslator();
114 translator.registerJava2ParameterTranslator(velocityTranslator);
115 translator.registerParameter2JavaTranslator(velocityTranslator);
116
117
118
119
120
121
122 CategoryTranslator itemTypeTranslator = new CategoryTranslator();
123 translator.registerJava2ParameterTranslator(itemTypeTranslator);
124
125 ComboTranslator comboTranslator = new ComboTranslator();
126 translator.registerParameter2JavaTranslator(comboTranslator);
127
128 FireModeTranslator fireModeTranslator = new FireModeTranslator();
129 translator.registerJava2ParameterTranslator(fireModeTranslator);
130 translator.registerParameter2JavaTranslator(fireModeTranslator);
131
132 FlagStateTranslator flagStateTranslator = new FlagStateTranslator();
133 translator.registerJava2ParameterTranslator(flagStateTranslator);
134
135 GameTypeTranslator gameTypeTranslator = new GameTypeTranslator();
136 translator.registerJava2ParameterTranslator(gameTypeTranslator);
137
138 ItemTypeTranslator categoryTranslator = new ItemTypeTranslator();
139 translator.registerJava2ParameterTranslator(categoryTranslator);
140 translator.registerParameter2JavaTranslator(categoryTranslator);
141
142 NavigationStateTranslator navigationStateTranslator = new NavigationStateTranslator();
143 translator.registerJava2ParameterTranslator(navigationStateTranslator);
144
145 NoneTranslator noneTranslator = new NoneTranslator();
146 translator.registerJava2ParameterTranslator(noneTranslator);
147
148 PerceptTranslator perceptTranslator = new PerceptTranslator();
149 translator.registerJava2ParameterTranslator(perceptTranslator);
150
151 SelectorListTranslator selectorListTranslator = new SelectorListTranslator();
152 translator.registerParameter2JavaTranslator(selectorListTranslator);
153
154 SelectorTranslator selectorTranslator = new SelectorTranslator();
155 translator.registerParameter2JavaTranslator(selectorTranslator);
156
157 UnrealIdOrLocationTranslator unrealIdOrLocationTranslator = new UnrealIdOrLocationTranslator();
158 translator.registerParameter2JavaTranslator(unrealIdOrLocationTranslator);
159
160 WeaponPrefListTranslator weaponPrefListTranslator = new WeaponPrefListTranslator();
161 translator.registerParameter2JavaTranslator(weaponPrefListTranslator);
162
163 WeaponPrefTranslator weaponPrefTranslator = new WeaponPrefTranslator();
164 translator.registerParameter2JavaTranslator(weaponPrefTranslator);
165 }
166
167 public static void main(String[] args) throws ManagementException {
168 HashMap<String, Parameter> map = new HashMap<String, Parameter>();
169 map.put("botNames", new ParameterList(new Identifier("Test")));
170 new UT2004Environment().init(map);
171
172 }
173
174 @Override
175 protected Class<UT2004BotBehavior> getControlerClass() {
176 return UT2004BotBehavior.class;
177 }
178
179 @Override
180 protected PerceptHandler createPerceptHandler(UT2004BotController controller) throws EntityException {
181 return new AllPerceptPerceptHandler(controller);
182 }
183
184 @Override
185 protected ActionHandler createActionHandler(UT2004BotController controller) throws EntityException {
186 return new DefaultActionHandler(controller);
187 }
188
189 @Override
190 protected synchronized void initializeEnvironment(Map<String, Parameter> parameters) throws ManagementException {
191 super.initializeEnvironment(parameters);
192
193
194 try {
195 visualizerConnection = new ReconnectingServerDefinition<RemoteVisualizer>(new VisualizerServiceDefinition());
196 visualizerConnection.getServerFlag().addListener(new VisualizerServiceListener());
197 } catch (RemoteException e) {
198 log.severe("Could not start connection to Visualizer: " + e);
199 }
200
201 }
202
203
204
205
206
207
208
209
210 private class VisualizerServiceListener implements EnvironmentServiceListener, FlagListener<RemoteVisualizer> {
211
212 private final EnvironmentServiceMediator mediator;
213
214 public VisualizerServiceListener() throws RemoteException {
215 mediator = new EnvironmentServiceMediator(getComponentId());
216 mediator.setListener(this);
217 }
218
219 @Override
220 public void flagChanged(RemoteVisualizer visualizer) {
221 if (visualizer != null) {
222 visualizer.setEnvironment(mediator);
223 }
224 }
225
226
227
228
229
230
231
232
233
234 @Override
235 public void addBot(AddBotCommand command) throws ManagementException {
236
237 BotParameters parameters = new BotParameters(environmentLogger);
238
239
240
241 if (command.getBotName() != null) {
242 parameters.setAgentId(command.getBotName());
243 }
244 if (command.getLogLevel() != null) {
245 parameters.setLogLevel(command.getLogLevel());
246 }
247 if (command.getShouldLeadTarget() != null) {
248 parameters.setShouldLeadTarget(command.getShouldLeadTarget());
249 }
250 if (command.getShowFocalPoint() != null) {
251 parameters.setShouldLeadTarget(command.getShowFocalPoint());
252 }
253 if (command.getSkill() != null) {
254 parameters.setSkill(command.getSkill());
255 }
256 if (command.getSkin() != null) {
257
258 }
259 if (command.getTeam() != null) {
260 parameters.setTeam(command.getTeam());
261 }
262
263
264 parameters.assignDefaults(botParameters);
265
266 startAgents(parameters);
267
268 }
269
270 }
271
272 @Override
273 protected synchronized void connectEnvironment() throws ManagementException {
274 super.connectEnvironment();
275
276
277 URI visualizerUri = environmentParameters.getVisualizerServer();
278 if (visualizerUri != null) {
279 log.info("Connecting to visualizer server at " + visualizerUri + " .");
280
281 visualizerConnection.setUri(visualizerUri);
282 } else {
283 log.info("No address for the visualizer server was provided. The environment will not try to connect to the visualizer.");
284 }
285 }
286
287 @Override
288 protected synchronized void killEnvironment() {
289 super.killEnvironment();
290
291 visualizerConnection.stopServer();
292
293 }
294
295 }