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 nl.tudelft.goal.unreal.environment.AbstractUnrealEnvironment;
29 import nl.tudelft.goal.unreal.messages.BotParameters;
30 import nl.tudelft.goal.unreal.translators.LocationTranslator;
31 import nl.tudelft.goal.unreal.translators.RotationTranslator;
32 import nl.tudelft.goal.unreal.translators.TeamTranslator;
33 import nl.tudelft.goal.unreal.translators.UnrealIdTranslator;
34 import nl.tudelft.goal.unreal.translators.VelocityTranslator;
35 import nl.tudelft.goal.ut2004.agent.UT2004BotBehavior;
36 import nl.tudelft.goal.ut2004.translators.CategoryTranslator;
37 import nl.tudelft.goal.ut2004.translators.ComboTranslator;
38 import nl.tudelft.goal.ut2004.translators.FireModeTranslator;
39 import nl.tudelft.goal.ut2004.translators.FlagStateTranslator;
40 import nl.tudelft.goal.ut2004.translators.GameTypeTranslator;
41 import nl.tudelft.goal.ut2004.translators.ItemTypeTranslator;
42 import nl.tudelft.goal.ut2004.translators.NavigationStateTranslator;
43 import nl.tudelft.goal.ut2004.translators.NoneTranslator;
44 import nl.tudelft.goal.ut2004.translators.PerceptTranslator;
45 import nl.tudelft.goal.ut2004.translators.SelectorListTranslator;
46 import nl.tudelft.goal.ut2004.translators.SelectorTranslator;
47 import nl.tudelft.goal.ut2004.translators.UnrealIdOrLocationTranslator;
48 import nl.tudelft.goal.ut2004.translators.WeaponPrefListTranslator;
49 import nl.tudelft.goal.ut2004.translators.WeaponPrefTranslator;
50 import nl.tudelft.goal.ut2004.visualizer.connection.AddBotCommand;
51 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceListener;
52 import nl.tudelft.goal.ut2004.visualizer.connection.EnvironmentServiceMediator;
53 import nl.tudelft.goal.ut2004.visualizer.connection.client.RemoteVisualizer;
54 import nl.tudelft.goal.ut2004.visualizer.connection.client.VisualizerServiceDefinition;
55 import nl.tudelft.pogamut.base.server.ReconnectingServerDefinition;
56 import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004BotController;
57 import cz.cuni.amis.utils.flag.FlagListener;
58 import eis.eis2java.handlers.ActionHandler;
59 import eis.eis2java.handlers.AllPerceptPerceptHandler;
60 import eis.eis2java.handlers.DefaultActionHandler;
61 import eis.eis2java.handlers.PerceptHandler;
62 import eis.eis2java.translation.Translator;
63 import eis.eis2java.util.AllPerceptsProvider;
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(@SuppressWarnings("rawtypes") UT2004BotController controller) throws EntityException {
181 if (!(controller instanceof AllPerceptsProvider))
182 throw new EntityException("Expected a class that implements " + AllPerceptsProvider.class.getSimpleName());
183 return new AllPerceptPerceptHandler((AllPerceptsProvider) controller);
184 }
185
186 @Override
187 protected ActionHandler createActionHandler(@SuppressWarnings("rawtypes") UT2004BotController controller) throws EntityException {
188 return new DefaultActionHandler(controller);
189 }
190
191 @Override
192 protected synchronized void initializeEnvironment(Map<String, Parameter> parameters) throws ManagementException {
193 super.initializeEnvironment(parameters);
194
195
196 try {
197 visualizerConnection = new ReconnectingServerDefinition<RemoteVisualizer>(new VisualizerServiceDefinition());
198 visualizerConnection.getServerFlag().addListener(new VisualizerServiceListener());
199 } catch (RemoteException e) {
200 log.severe("Could not start connection to Visualizer: " + e);
201 }
202
203 }
204
205
206
207
208
209
210
211
212 private class VisualizerServiceListener implements EnvironmentServiceListener, FlagListener<RemoteVisualizer> {
213
214 private final EnvironmentServiceMediator mediator;
215
216 public VisualizerServiceListener() throws RemoteException {
217 mediator = new EnvironmentServiceMediator(getComponentId());
218 mediator.setListener(this);
219 }
220
221 @Override
222 public void flagChanged(RemoteVisualizer visualizer) {
223 if (visualizer != null) {
224 visualizer.setEnvironment(mediator);
225 }
226 }
227
228
229
230
231
232
233
234
235 @Override
236 public void addBot(AddBotCommand command) throws ManagementException {
237
238 BotParameters parameters = new BotParameters(environmentLogger);
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.getSkill() != null) {
251 parameters.setSkill(command.getSkill());
252 }
253 if (command.getSkin() != null) {
254 parameters.setSkin(command.getSkin());
255 }
256 if (command.getTeam() != null) {
257 parameters.setTeam(command.getTeam());
258 }
259
260 if (command.getRotation() != null) {
261 parameters.setInitialRotation(command.getRotation());
262 }
263
264 if (command.getLocation() != null) {
265 parameters.setInitialLocation(command.getLocation());
266 }
267
268
269 parameters.assignDefaults(botParameters);
270
271 startAgents(parameters);
272
273 }
274
275 }
276
277 @Override
278 protected synchronized void connectEnvironment() throws ManagementException {
279 super.connectEnvironment();
280
281
282 URI visualizerUri = environmentParameters.getVisualizerServer();
283 if (visualizerUri != null) {
284 log.info("Connecting to visualizer server at " + visualizerUri + " .");
285
286 visualizerConnection.setUri(visualizerUri);
287 } else {
288 log.info("No address for the visualizer server was provided. The environment will not try to connect to the visualizer.");
289 }
290 }
291
292 @Override
293 protected synchronized void killEnvironment() {
294 super.killEnvironment();
295
296 visualizerConnection.stopServer();
297
298 }
299
300 }