View Javadoc

1   package nl.tudelft.goal.ut2004.agent;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   import java.util.logging.Level;
6   
7   import nl.tudelft.goal.unreal.messages.BotParameters;
8   import nl.tudelft.goal.unreal.messages.Configuration;
9   import nl.tudelft.goal.unreal.translators.LocationTranslator;
10  import nl.tudelft.goal.unreal.translators.NoneTranslator;
11  import nl.tudelft.goal.unreal.translators.PerceptTranslator;
12  import nl.tudelft.goal.unreal.translators.RotationTranslator;
13  import nl.tudelft.goal.unreal.translators.TeamTranslator;
14  import nl.tudelft.goal.unreal.translators.UnrealIdTranslator;
15  import nl.tudelft.goal.unreal.translators.VelocityTranslator;
16  import nl.tudelft.goal.ut3.agent.UT3BotBehavior;
17  import nl.tudelft.goal.unreal.messages.UnrealIdOrLocation;
18  import nl.tudelft.goal.ut3.translators.CategoryTranslator;
19  import nl.tudelft.goal.ut3.translators.FireModeTranslator;
20  import nl.tudelft.goal.ut3.translators.FlagStateTranslator;
21  import nl.tudelft.goal.ut3.translators.GameTypeTranslator;
22  import nl.tudelft.goal.ut3.translators.ItemTypeTranslator;
23  import nl.tudelft.goal.ut3.translators.NavigationStateTranslator;
24  import nl.tudelft.goal.ut3.translators.SelectorListTranslator;
25  import nl.tudelft.goal.ut3.translators.SelectorTranslator;
26  import nl.tudelft.goal.ut3.translators.UT3ItemTypeTranslator;
27  import nl.tudelft.goal.unreal.translators.UnrealIdOrLocationTranslator;
28  import nl.tudelft.goal.ut3.translators.WeaponPrefListTranslator;
29  import nl.tudelft.goal.ut3.translators.WeaponPrefTranslator;
30  import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
31  import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004Bot;
32  import cz.cuni.amis.pogamut.ut2004.bot.params.UT2004BotParameters;
33  import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
34  import cz.cuni.amis.pogamut.ut3.communication.messages.UT3ItemType;
35  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPoint;
36  import cz.cuni.amis.pogamut.ut2004.utils.UT2004BotRunner;
37  import cz.cuniz.amis.pogamut.ut3.utils.UT3BotRunner;
38  import eis.eis2java.handlers.ActionHandler;
39  import eis.eis2java.handlers.AllPerceptPerceptHandler;
40  import eis.eis2java.handlers.DefaultActionHandler;
41  import eis.eis2java.handlers.PerceptHandler;
42  import eis.eis2java.translation.Translator;
43  import eis.eis2java.util.AllPerceptsProvider;
44  import eis.exceptions.EntityException;
45  import eis.exceptions.PerceiveException;
46  import eis.iilang.Percept;
47  import java.util.LinkedList;
48  import nl.tudelft.goal.ut3.messages.SelectorList;
49  import nl.tudelft.goal.ut3.selector.ContextSelector;
50  import nl.tudelft.goal.ut3.selector.NearestFriendlyWithLinkGun;
51  
52  /**
53   * Test class to make the agent do custom stuff.
54   *
55   * @author mpkorstanje
56   *
57   */
58  @SuppressWarnings("rawtypes")
59  public class RunAgent {
60  
61      public static void main(String[] args) throws EntityException, InterruptedException, PerceiveException {
62  
63          Translator translator = Translator.getInstance();
64  
65          /*
66           * Translators provided by the BaseUnrealEnvironment.
67           * 
68           * Please list these in lexical order.
69           */
70  
71          LocationTranslator locationTranslator = new LocationTranslator();
72          translator.registerJava2ParameterTranslator(locationTranslator);
73          translator.registerParameter2JavaTranslator(locationTranslator);
74  
75          /*
76           * To translate from Parameter2Java we are given an UnrealId. However we
77           * can not access the agents memory during translation. To work around
78           * this we store everything we have send to any agent. Hence the same
79           * object has to be used for both directions.
80           */
81  
82          RotationTranslator rotationTranslator = new RotationTranslator();
83          translator.registerJava2ParameterTranslator(rotationTranslator);
84          translator.registerParameter2JavaTranslator(rotationTranslator);
85  
86          TeamTranslator teamTranslator = new TeamTranslator();
87          translator.registerJava2ParameterTranslator(teamTranslator);
88          translator.registerParameter2JavaTranslator(teamTranslator);
89  
90          UnrealIdTranslator unrealIdTranslator = new UnrealIdTranslator();
91          translator.registerJava2ParameterTranslator(unrealIdTranslator);
92          translator.registerParameter2JavaTranslator(unrealIdTranslator);
93  
94          VelocityTranslator velocityTranslator = new VelocityTranslator();
95          translator.registerJava2ParameterTranslator(velocityTranslator);
96          translator.registerParameter2JavaTranslator(velocityTranslator);
97          /*
98           * Translators provided by the UT2004 environment.
99           * 
100          * Please list these in lexical order.
101          */
102 
103         // UT3 TRANSLATORS
104 
105         UT3ItemTypeTranslator ut3CategoryTranslator = new UT3ItemTypeTranslator();
106         translator.registerJava2ParameterTranslator(ut3CategoryTranslator);
107         translator.registerParameter2JavaTranslator(ut3CategoryTranslator);
108 
109         CategoryTranslator categoryTranslator = new CategoryTranslator();
110         translator.registerJava2ParameterTranslator(categoryTranslator);
111         translator.registerParameter2JavaTranslator(categoryTranslator);
112 
113         ItemTypeTranslator itemTypeTranslator = new ItemTypeTranslator();
114         translator.registerJava2ParameterTranslator(itemTypeTranslator);
115 
116         FireModeTranslator fireModeTranslator = new FireModeTranslator();
117         translator.registerJava2ParameterTranslator(fireModeTranslator);
118         translator.registerParameter2JavaTranslator(fireModeTranslator);
119 
120         FlagStateTranslator flagStateTranslator = new FlagStateTranslator();
121         translator.registerJava2ParameterTranslator(flagStateTranslator);
122 
123         GameTypeTranslator gameTypeTranslator = new GameTypeTranslator();
124         translator.registerJava2ParameterTranslator(gameTypeTranslator);
125 
126         NavigationStateTranslator navigationStateTranslator = new NavigationStateTranslator();
127         translator.registerJava2ParameterTranslator(navigationStateTranslator);
128 
129         NoneTranslator noneTranslator = new NoneTranslator();
130         translator.registerJava2ParameterTranslator(noneTranslator);
131 
132         PerceptTranslator perceptTranslator = new PerceptTranslator();
133         translator.registerJava2ParameterTranslator(perceptTranslator);
134 
135         SelectorListTranslator selectorListTranslator = new SelectorListTranslator();
136         translator.registerParameter2JavaTranslator(selectorListTranslator);
137 
138         SelectorTranslator selectorTranslator = new SelectorTranslator();
139         translator.registerParameter2JavaTranslator(selectorTranslator);
140 
141         UnrealIdOrLocationTranslator unrealIdOrLocationTranslator = new UnrealIdOrLocationTranslator();
142         translator.registerParameter2JavaTranslator(unrealIdOrLocationTranslator);
143 
144         WeaponPrefListTranslator weaponPrefListTranslator = new WeaponPrefListTranslator();
145         translator.registerParameter2JavaTranslator(weaponPrefListTranslator);
146 
147         WeaponPrefTranslator weaponPrefTranslator = new WeaponPrefTranslator();
148         translator.registerParameter2JavaTranslator(weaponPrefTranslator);
149 
150         UT3BotRunner<UT2004Bot, UT2004BotParameters> runner = new UT3BotRunner<UT2004Bot, UT2004BotParameters>(
151                 UT3BotBehavior.class, Configuration.DEFAULT_BOT_NAME, "127.0.0.1", 3000);
152         runner.setConsoleLogging(true);
153 
154         //AgentLogger log = new AgentLogger(new AgentId("Test"));
155         BotParameters parameters = new BotParameters();
156         parameters.setAgentId("SimpleRed 1");
157         parameters.setSkill(7);
158         parameters.setLogLevel(Level.INFO);
159 //		// parameters.setSkin(Skin.BotA);
160 //		// parameters.setTeam(Team.RED);
161 //		parameters.assignDefaults(BotParameters.getDefaults(log));
162 //		BotParameters parameters1 = new BotParameters(log);
163 //		parameters1.setAgentId("SimpleRed 2");
164 //		// parameters.setSkin(Skin.BotA);
165 //		// parameters.setTeam(Team.RED);
166 //		parameters.assignDefaults(BotParameters.getDefaults(log));
167 //		BotParameters parameters2 = new BotParameters(log);
168 //		parameters2.setAgentId("SimpleRed 3");
169 //		// parameters.setSkin(Skin.BotA);
170 //		// parameters.setTeam(Team.RED);
171 //		parameters2.assignDefaults(BotParameters.getDefaults(log));
172 
173         //List<UT2004Bot> agents = runner.startAgents(parameters, parameters1, parameters2);
174         List<UT2004Bot> agents = runner.startAgents(parameters);
175 
176         List<PerceptHandler> handlers = new ArrayList<PerceptHandler>(agents.size());
177         List<ActionHandler> actionHandlers = new ArrayList<ActionHandler>(agents.size());
178         SelectorList targets = new SelectorList();
179         
180         for (UT2004Bot agent : agents) {
181             PerceptHandler handler = new AllPerceptPerceptHandler((AllPerceptsProvider) agent.getController());
182             handlers.add(handler);
183         }
184 
185 		for (UT2004Bot agent : agents) {
186 			ActionHandler handler = new DefaultActionHandler(agent.getController());
187 			actionHandlers.add(handler);
188 		}
189                
190                 UT3BotBehavior behavior = ((UT3BotBehavior) agents.get(0).getController());
191              //   targets.add(new NearestFriendlyWithLinkGun());
192            //    behavior.shoot(targets);
193              //    behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTWeaponLocker_Content_0")));
194              //   behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTWeaponPickupFactory_4")));
195             //    behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTWeaponPickupFactory_0")));
196                behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTDeployablePickupFactory_0")));
197             //   behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTAmmo_BioRifle_Content_0")));
198                // behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTPickupFactory_UDamage_0")));
199              //   behavior.navigate(new UnrealIdOrLocation(UnrealId.get("PathNode_21")));
200                 boolean finalDesination = false, droppedDeployable = false;
201 		while (true) {
202 			Thread.sleep(500);
203                         
204                         // Display the weapon percepts
205                         // TODO: Build tests to check if the type of the weapon is OK
206 		/*	for (PerceptHandler handler : handlers) {
207 				LinkedList<Percept> list = handler.getAllPercepts();
208                                 for(Percept p : list)
209                                 {
210                                         if(p.getName().equals("item"))
211                                                 System.out.println(p);
212                                 }
213 			}*/
214 
215                   /*       for(NavPoint n : behavior.getWorldView().getAll(NavPoint.class).values())
216                          {
217                                  
218                                  if(ItemType.getItemType(n.getVolume()) == UT3ItemType.SLOW_VOLUME)
219                                         System.out.println(n);
220                          }*/
221                        // System.out.println("Ammo enforcer: " + behavior.getWeaponry().getAmmo(UT3ItemType.ENFORCER));
222                         
223                        if(!behavior.getNavigation().isNavigating()) {
224                                
225                                if(finalDesination && !droppedDeployable) {
226                                         behavior.deploy();
227                                         droppedDeployable = true;
228                                 }
229                                 else
230                                 {
231                                        // behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTCTFBlueFlagBase_0")));
232                                        // behavior.navigate(new UnrealIdOrLocation(UnrealId.get("UTPickupFactory_Berserk_0")));
233                                         finalDesination = true;
234                                 }
235 
236                         }
237                         
238                       /*  for (UT3Weapon weap : behavior.getWeaponry().getWeapons().values()) {        
239                            System.out.println(weap.getType() + " ammo " + behavior.getWeaponry().getAmmo(weap.getType()) + " (max: " + behavior.getWeaponry().getMaxAmmo(weap.getType()) + ")");
240                         }*/
241 
242                   /*      if(behavior.getInfo().hasPowerUp())
243                         {
244                                 System.out.println("Has POWERUP: " + behavior.getInfo().getPowerUp());
245                                 System.out.println("Time: " + behavior.getInfo().getPowerUpTime());
246                         }*/
247                        
248                  /*      for (PerceptHandler handler : handlers) {
249 				LinkedList<Percept> list = handler.getAllPercepts();
250                                 for(Percept p : list)
251                                 {
252                                         if(p.getName().equals("status"))
253                                                 System.out.println(p);
254                                 }
255 			}*/
256                        
257                         // Display the weapon percepts
258                         // TODO: Build tests to check if the type of the weapon is OK
259                       for (PerceptHandler handler : handlers) {
260 				LinkedList<Percept> list = handler.getAllPercepts();
261                                 for(Percept p : list)
262                                 {
263                                         if(p.getName().equals("navigation"))
264                                                 System.out.println(p);
265                                 }
266 			}
267                       
268                       ArrayList<UnrealId> list = behavior.getVisibility().getVisibleVolumeNavPoints(UT3ItemType.SLOW_VOLUME_CONTENT);
269                       System.out.println("==== START ====");
270                       for(int i = 0; i < list.size(); i++)
271                       {
272                               System.out.println("Id: " + list.get(i));
273                       }
274                       System.out.println("==== END ====");
275                       
276                         
277                   /*     Map<Integer, FlagInfo> map = behavior.getGame().getAllCTFFlags();
278                         for(Map.Entry<Integer, FlagInfo> entry : map.entrySet()) {
279                                 System.out.println(entry.getValue());
280                         }*/
281                                 
282                  //       System.out.println(behavior.getWeaponry().getCurrentWeapon());
283 			
284 		//	behavior.shoot(new SelectorList(new NearestEnemy()));
285                         
286 
287             /*     Map<Integer, FlagInfo> map = behavior.getGame().getAllCTFFlags();
288              for(Map.Entry<Integer, FlagInfo> entry : map.entrySet()) {
289              System.out.println(entry.getValue());
290              }*/
291 
292             //       System.out.println(behavior.getWeaponry().getCurrentWeapon());
293 
294             //	behavior.shoot(new SelectorList(new NearestEnemy()));
295 
296 
297             //behavior.navigate(new UnrealIdOrLocation(behavior.getInfo().getId()));
298 
299             //List<NavPoint> navs = new ArrayList<NavPoint>(behavior.getWorld().getAll(NavPoint.class).values());
300 //			
301             //int first = new Random().nextInt(navs.size());
302 //			int second = new Random().nextInt(navs.size());
303 //			
304 //			
305 //			System.out.println(behavior.getInfo().getSelf());
306 
307             //behavior.respawn();
308 
309             //System.out.println(behavior.path(new UnrealIdOrLocation(navs.get(first).getId()), new UnrealIdOrLocation( navs.get(second).getId())));
310 
311             //behavior.look(new SelectorList(new PlayerOrNavpoint(navs.get(first).getId())));
312 //			Player p =  behavior.getPlayers().getNearestVisiblePlayer();
313 //			if(p != null)
314 //				behavior.look(new SelectorList(new PlayerOrNavpoint(p.getId())));
315 
316 //			Map<UnrealId, Item> items = behavior.getItems().getAllItems(ItemType.SUPER_SHIELD_PACK);
317 //			Item nearest = DistanceUtils.getNearest(items.values(), behavior.getInfo().getLocation());
318 //			
319 //			if(!behavior.getInfo().hasHighArmor()){
320 //				behavior.navigate(new UnrealIdOrLocation(nearest.getId()));
321 //			} else {
322 //				behavior.navigate(new UnrealIdOrLocation(navs.get(1).getId()));
323 //			}
324 
325             /*	UnrealIdOrLocation id = new UnrealIdOrLocation(UnrealId.get("CTF-UG-Chrome.xRedFlagBase1"));
326              UnrealIdOrLocation id2 = new UnrealIdOrLocation(UnrealId.get("CTF-UG-Chrome.PathNode236"));
327 			
328              if(!behavior.getNavigation().isNavigating()){
329              if(!behavior.getInfo().isAtLocation(behavior.getGame().getFlagBase(0))){
330              behavior.navigate(id);
331              } else {
332              behavior.navigate(id2);
333              }
334              }*/
335         }
336 
337     }
338 }