View Javadoc

1   package cz.cuni.amis.pogamut.emohawk.bot.impl;
2   
3   import java.util.Random;
4   
5   import SteeringProperties.PeopleAvoidanceProperties;
6   import Steerings.PeopleAvoidanceSteer;
7   
8   import cz.cuni.amis.pogamut.base.agent.navigation.IPathPlanner;
9   import cz.cuni.amis.pogamut.base.communication.command.IAct;
10  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.AnnotationListenerRegistrator;
11  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.EventListener;
12  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectClassEventListener;
13  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectClassListener;
14  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectEventListener;
15  import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectListener;
16  import cz.cuni.amis.pogamut.base.utils.math.DistanceUtils;
17  import cz.cuni.amis.pogamut.base3d.worldview.IVisionWorldView;
18  import cz.cuni.amis.pogamut.base3d.worldview.object.ILocated;
19  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Animations;
20  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.EmohawkNavigation;
21  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Emoticons;
22  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Inventory;
23  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Places;
24  import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Steering;
25  import cz.cuni.amis.pogamut.unreal.agent.navigation.IUnrealPathExecutor;
26  import cz.cuni.amis.pogamut.ut2004.agent.module.sensomotoric.AgentConfig;
27  import cz.cuni.amis.pogamut.ut2004.agent.module.sensomotoric.Raycasting;
28  import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.AgentInfo;
29  import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.AgentStats;
30  import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.Game;
31  import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.Players;
32  import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.Senses;
33  import cz.cuni.amis.pogamut.ut2004.agent.navigation.UT2004AStarPathPlanner;
34  import cz.cuni.amis.pogamut.ut2004.agent.navigation.UT2004GetBackToNavGraph;
35  import cz.cuni.amis.pogamut.ut2004.agent.navigation.UT2004Navigation;
36  import cz.cuni.amis.pogamut.ut2004.agent.navigation.UT2004PathExecutor;
37  import cz.cuni.amis.pogamut.ut2004.agent.navigation.UT2004RunStraight;
38  import cz.cuni.amis.pogamut.ut2004.agent.navigation.floydwarshall.FloydWarshallMap;
39  import cz.cuni.amis.pogamut.ut2004.agent.navigation.loquenavigator.KefikRunner;
40  import cz.cuni.amis.pogamut.ut2004.agent.navigation.loquenavigator.LoqueNavigator;
41  import cz.cuni.amis.pogamut.ut2004.bot.IUT2004BotController;
42  import cz.cuni.amis.pogamut.ut2004.bot.command.AdvancedLocomotion;
43  import cz.cuni.amis.pogamut.ut2004.bot.command.Communication;
44  import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004Bot;
45  import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004BotLogicController;
46  import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004BotModuleController;
47  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbcommands.GetPath;
48  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.AutoTraceRay;
49  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange;
50  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage;
51  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.NavPoint;
52  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.PathList;
53  import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.Self;
54  
55  public class EmohawkBotController<BOT extends UT2004Bot> extends UT2004BotLogicController<BOT> {
56  
57  	/**
58  	 * Random number generator that is usually useful to have during decision making.
59  	 */
60  	protected Random random = new Random(System.currentTimeMillis());
61  	
62  	/**
63  	 * Memory module specialized on general info about the game - game type, time limit, frag limit, etc.
64  	 * <p><p>
65  	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
66       * is called.
67       * <p><p>
68       * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
69  	 */
70  	protected Game game;
71  	
72  	/**
73  	 * Memory module specialized on general info about the agent whereabouts - location, rotation, health, current weapon, who is enemy/friend, etc.
74  	 * <p><p>
75  	 * May be used since first {@link Self} message is received, i.e, since the first {@link IUT2004BotController#botFirstSpawn(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
76       * is called.
77       * <p><p>
78       * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
79  	 */
80  	protected AgentInfo info;
81  	
82  	/**
83  	 * Memory module specialized on whereabouts of other players - who is visible, enemy / friend, whether bot can see anybody, etc.
84  	 * <p><p>
85  	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
86       * is called.
87       * <p><p>
88       * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
89  	 */
90  	protected Players players;
91  	
92  //	/**
93  //	 * Sensory module that provides mapping between {@link ItemType} and {@link ItemDescriptor} providing
94  //     * an easy way to obtain item descriptors for various items in UT2004.
95  //     * <p><p>
96  //     * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
97  //     * is called.
98  //     * <p><p>
99  //     * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
100 //	 */
101 //	protected ItemDescriptors descriptors;
102 	
103 //	/**
104 //	 * Memory module specialized on items on the map - which are visible and which are probably spawned.
105 //	 * <p><p>
106 //	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
107 //     * is called.
108 //     * <p><p>
109 //     * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
110 //	 */
111 //	protected Items items;
112 	
113 	/**
114 	 * Memory module specialized on agent's senses - whether the bot has been recently killed, collide with level's geometry, etc.
115 	 * <p><p>
116 	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
117      * is called.
118      * <p><p>
119      * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
120 	 */
121 	protected Senses senses;
122 	
123 //	/**
124 //	 * Memory module specialized on info about the bot's weapon and ammo inventory - it can tell you which weapons are loaded, melee/ranged, etc.
125 //	 * <p><p>
126 //	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
127 //     * is called.
128 //     * <p><p>
129 //     * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
130 //	 */
131 //	protected Weaponry weaponry;
132 	
133 	/**
134 	 * Memory module specialized on the agent's configuration inside UT2004 - name, vision time, manual spawn, cheats (if enabled at GB2004).
135 	 * <p><p>
136 	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
137      * is called.
138      * <p><p>
139      * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
140 	 */
141 	protected AgentConfig config;
142 	
143 	/**
144 	 * Support for creating rays used for raycasting (see {@link AutoTraceRay} that is being utilized).
145 	 * <p><p>
146 	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ConfigChange, cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.InitedMessage)}
147      * is called.
148      * <p><p>
149      * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
150 	 */
151 	protected Raycasting raycasting;
152 	
153 //	/**
154 //	 * Wraps all available commands that can be issued to the virtual body of the bot inside UT2004.
155 //     * <p><p>
156 //     * May be used since since the first {@link IUT2004BotController#botSpawned(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
157 //     * is called.
158 //     * <p><p>
159 //     * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
160 //	 */
161 //	protected CompleteBotCommandsWrapper body;
162 
163 //	/**
164 //	 * Shortcut for <i>body.getAdvancedShooting()</i> that allows you to shoot at opponent.
165 //	 * <p><p>
166 //	 * Note: more weapon-handling methods are available through {@link UT2004BotModuleControllerNew#weaponry}.
167 //	 * <p><p>
168 //	 * May be used since since the first {@link IUT2004BotController#botSpawned(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
169 //     * is called.
170 //     * <p><p>
171 //	 * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
172 //	 */
173 //	protected ImprovedShooting shoot;
174 	
175 	/**
176 	 * This allows you to manually steer the movement through the environment.
177 	 * <p><p>
178 	 * Note: navigation is done via {@link UT2004BotModuleControllerNew#pathExecutor} that needs {@link PathHandle} from the {@link UT2004BotModuleControllerNew#pathPlanner}.
179 	 * <p><p>
180 	 * May be used since since the first {@link IUT2004BotController#botFirstSpawn(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
181      * is called.
182      * <p><p>
183 	 * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
184 	 */
185 	protected AdvancedLocomotion move;
186 	
187 	/**
188 	 * Allows you to speak!
189 	 */
190 	protected Communication comm;
191 	
192 	/**
193      * Executor is used for following a path in the environment.
194      * <p><p>
195      * May be used since since the first {@link IUT2004BotController#botFirstSpawn(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
196      * is called.
197      * <p><p>
198      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
199      */
200 	protected UT2004PathExecutor<ILocated> pathExecutor = null;
201 	
202     /**
203      * Planner used to compute the path (consisting of navigation points) inside the map.
204      * <p><p>
205      * May be used since since the first {@link IUT2004BotController#botFirstSpawn(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage, Self)} 
206      * is called.
207      * <p><p>
208      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
209      */
210     protected IPathPlanner<ILocated> pathPlanner = null;
211     
212 //    /**
213 //     * Navigation graph builder that may be used to manually extend the navigation graph of the UT2004.
214 //     * <p><p>
215 //     * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage)} 
216 //     * is called.
217 //     * <p><p>
218 //     * Initialized inside {@link UT2004BotModuleController#initializeModules(UT2004Bot)}.
219 //     */
220 //    protected NavigationGraphBuilder navBuilder = null;
221     
222     /**
223 	 * Navigation helper that is able to get your bot back to the nearest navigation graph so you can use {@link UT2004BotModuleController#navigation} 
224 	 * without fear of catastrophe.
225 	 * <p><p>
226 	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage)} 
227      * is called.
228      * <p><p>
229      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
230 	 */
231 	protected UT2004GetBackToNavGraph getBackToNavGraph;
232 	
233 	/**
234 	 * Navigation helper that can run-straight to some point with stuck detectors.
235 	 * <p><p>
236 	 * May be used since {@link IUT2004BotController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage)} 
237      * is called.
238      * <p><p>
239      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
240 	 */
241 	protected UT2004RunStraight runStraight;
242     
243     /**
244 	 * Command module that is internally using {@link UT2004PathExecutor} for path-following and {@link FloydWarshallMap}
245 	 * for path planning resulting in unified class that can solely handle navigation of the bot within the environment.
246 	 * <p><p> 
247 	 * In contrast to {@link UT2004PathExecutor} methods
248 	 * of this module may be recalled every {@link UT2004BotModuleController#logic()} iteration even with 
249 	 * the same argument (which is not true for {@link UT2004PathExecutor#followPath(cz.cuni.amis.pogamut.base.agent.navigation.IPathFuture)}.
250 	 * <p><p>
251 	 * Note that this class is actually initialized with instances of {@link UT2004BotModuleController#pathExecutor} and {@link UT2004BotModuleController#fwMap}
252 	 * so you must take care if using add/remove stuck detectors or reinitilize this property to your liking (you can do that in {@link UT2004BotModuleController#botInitialized(cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.GameInfo, ConfigChange, InitedMessage)} 
253 	 * method.
254 	 * <p><p>
255 	 * May be used since first {@link UT2004BotModuleController#logic()} is called.
256      * <p><p>
257      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
258 	 */
259 	protected UT2004Navigation navigation;
260     
261     /**
262      * Listener registrator that probes declared methods for the presence of {@link EventListener}, {@link ObjectClassEventListener},
263      * {@link ObjectClassListener}, {@link ObjectEventListener} and {@link ObjectListener} annotations and automatically registers
264      * them as listeners on a specific events.
265      * <p><p>
266      * Note that this registrator is usable for 'this' object only! It will work only for 'this' object.
267      */
268     protected AnnotationListenerRegistrator listenerRegistrator;
269     
270     /**
271      * Can be used for bot navigation within the environment. 
272      * Similar to {@link UT2004Navigation} but uses {@link Steering} with {@link PeopleAvoidanceSteer}.
273      * <p><p>
274 	 * May be used since first {@link UT2004BotModuleController#logic()} is called.
275      * <p><p>
276      * Initialized inside {@link UT2004BotModuleController#initializePathFinding(UT2004Bot)}.
277      */
278     protected EmohawkNavigation emohawkNavigation;
279     
280 //    /**
281 //     * Weapon preferences for your bot. See {@link WeaponPrefs} class javadoc. It allows you to define preferences for
282 //     * weapons to be used at given distance (together with their firing mode).
283 //     */
284 //    protected WeaponPrefs weaponPrefs;
285     
286     /**
287      * Shortcut for the {@link UT2004BotModuleController#getWorldView()}.
288      */
289     protected IVisionWorldView world;
290     
291     /**
292      * Shortcut for the {@link UT2004BotModuleController#getAct()}.
293      */
294     protected IAct act;
295     
296     /**
297      * Module that is providing various statistics about the bot. You may also used it to output these stats (in CSV format)
298      * into some file using {@link AgentStats#startOutput(String)} or {@link AgentStats#startOutput(String, boolean)}.
299      */
300     protected AgentStats stats;
301 
302     /**
303      * Path-planner ({@link IPathPlanner} using {@link NavPoint}s), you may use it to find paths inside the environment wihtout
304      * waiting for round-trip of {@link GetPath} command and {@link PathList}s response from UT2004. It is much faster than 
305      * {@link UT2004BotModuleController#pathPlanner} but you need to pass {@link NavPoint} instances to planner instead of
306      * {@link ILocated} ... to find the nearest {@link NavPoint} instance, {@link DistanceUtils} is a handy, check especially
307      * {@link DistanceUtils#getNearest(java.util.Collection, ILocated)}.
308      */
309 	protected FloydWarshallMap fwMap;
310 	
311 	/**
312 	 * Module for handling animations.
313 	 */
314 	protected Animations animations;
315 	
316 	/**
317 	 * Module for handling emoticons.
318 	 */
319 	protected Emoticons emoticons;
320 	
321 	/**
322 	 * High-level description of the map.
323 	 */
324 	protected Places places;
325 	
326 	/**
327 	 * High-level access to steering library.
328 	 */
329 	protected Steering steering;
330 
331 	/**
332 	 * High-level access to inventory and items.
333 	 */
334 	protected Inventory inventory;
335 	
336     @Override
337 	public void initializeController(BOT bot) {    	
338 		super.initializeController(bot);
339 		world = getWorldView();
340 		act = getAct();
341 		initializeModules(bot);
342 		initializePathFinding(bot);
343 		initializeListeners(bot);
344 	}
345 	
346     /**
347      * Initializes {@link UT2004BotModuleControllerNew#listenerRegistrator} and calls {@link AnnotationListenerRegistrator#addListeners()} method
348      * to probe all declared methods for event-annotation presence.
349      * @param bot
350      */
351 	protected void initializeListeners(BOT bot) {
352 		listenerRegistrator = new AnnotationListenerRegistrator(this, getWorldView(), bot.getLogger().getCategory("Listeners"));
353 		listenerRegistrator.addListeners();
354 	}
355 
356 	/**
357 	 * Initializes path-finding modules: {@link UT2004BotModuleControllerNew#pathPlanner}, {@link UT2004BotModuleController#fwMap} and {@link UT2004BotModuleControllerNew#pathExecutor}.
358 	 * If you need different path planner / path executor - override this method and initialize your own modules.
359 	 * @param bot
360 	 */
361 	protected void initializePathFinding(BOT bot) {
362 		pathPlanner  = new UT2004AStarPathPlanner(bot);
363 		fwMap        = new FloydWarshallMap(bot);
364 		pathExecutor = 
365         	new UT2004PathExecutor<ILocated>(
366         		bot, 
367         		new LoqueNavigator<ILocated>(bot, 
368         			new KefikRunner(bot, info, move, bot.getLog()), 
369         		bot.getLog())
370         	);
371 		getBackToNavGraph = new UT2004GetBackToNavGraph(bot, info, move);
372 		runStraight = new UT2004RunStraight(bot, info, move);
373 		navigation = new UT2004Navigation(bot, pathExecutor, fwMap, getBackToNavGraph, runStraight);
374 		emohawkNavigation = new EmohawkNavigation(bot, steering, fwMap);
375 	}
376 
377 	/**
378 	 * Initializes memory/command modules of the bot.
379 	 * 
380 	 * @param bot
381 	 */
382 	protected void initializeModules(BOT bot) {
383 		game        = new Game(bot);
384 		info        = new AgentInfo(bot, game);
385 		players     = new Players(bot);
386 //		descriptors = new ItemDescriptors(bot);
387 //		weaponry    = new Weaponry(bot, descriptors);
388 //		items       = new Items(bot, info, game, weaponry, null);
389 		senses      = new Senses(bot, info, players);
390 		config      = new AgentConfig(bot);
391 		raycasting  = new Raycasting(bot);
392 //		shoot       = body.getImprovedShooting();
393 		move        = new AdvancedLocomotion(getBot(), getBot().getLogger().getCategory("Move"));
394 		comm        = new Communication(getBot(), getBot().getLogger().getCategory("Communicaton"));
395 //		navBuilder  = new NavigationGraphBuilder(bot);
396 		stats       = new AgentStats(bot);
397         animations  = new Animations(bot);
398         emoticons   = new Emoticons(bot);
399         places      = new Places(bot);
400         steering    = new Steering(bot);
401         inventory   = new Inventory(bot);
402 //		weaponPrefs = new WeaponPrefs(weaponry, bot);
403 	}
404 	
405 	@Override
406 	public void finishControllerInitialization() {
407 //		if (navBuilder.isUsed()) {
408 //			log.info("Navigation graph has been altered by 'navBuilder', triggering recomputation of Floyd-Warshall path matrix...");
409 //			Level oldLevel = fwMap.getLog().getLevel();
410 //			fwMap.getLog().setLevel(Level.FINER);
411 //			fwMap.refreshPathMatrix();
412 //			fwMap.getLog().setLevel(oldLevel);
413 //		}
414 	}
415 
416 	//
417 	//
418 	// MODULE GETTERS
419 	//
420 	//
421 	
422 	public Random getRandom() {
423 		return random;
424 	}
425 
426 	public Game getGame() {
427 		return game;
428 	}
429 
430 	public AgentInfo getInfo() {
431 		return info;
432 	}
433 
434 	public Players getPlayers() {
435 		return players;
436 	}
437 
438 //	public ItemDescriptors getDescriptors() {
439 //		return descriptors;
440 //	}
441 //
442 //	public Items getItems() {
443 //		return items;
444 //	}
445 
446 	public Senses getSenses() {
447 		return senses;
448 	}
449 
450 //	public Weaponry getWeaponry() {
451 //		return weaponry;
452 //	}
453 
454 	public AgentConfig getConfig() {
455 		return config;
456 	}
457 
458 	public Raycasting getRaycasting() {
459 		return raycasting;
460 	}
461 
462 //	public CompleteBotCommandsWrapper getBody() {
463 //		return body;
464 //	}
465 
466 //	public ImprovedShooting getShoot() {
467 //		return shoot;
468 //	}
469 
470 	public AdvancedLocomotion getMove() {
471 		return move;
472 	}
473 
474 	public IUnrealPathExecutor<ILocated> getPathExecutor() {
475 		return pathExecutor;
476 	}
477 
478 	public IPathPlanner<ILocated> getPathPlanner() {
479 		return pathPlanner;
480 	}
481 
482 //	public NavigationGraphBuilder getNavBuilder() {
483 //		return navBuilder;
484 //	}
485 
486 //	public WeaponPrefs getWeaponPrefs() {
487 //		return weaponPrefs;
488 //	}
489 
490 	public IVisionWorldView getWorld() {
491 		return world;
492 	}
493 
494 	public AgentStats getStats() {
495 		return stats;
496 	}
497 
498 	public FloydWarshallMap getFwMap() {
499 		return fwMap;
500 	}
501 	
502 	public UT2004Navigation getNavigation() {
503 		return navigation;
504 	}
505 
506 }