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 import cz.cuni.amis.pogamut.base.agent.navigation.IPathPlanner; 8 import cz.cuni.amis.pogamut.base.communication.command.IAct; 9 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.AnnotationListenerRegistrator; 10 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.EventListener; 11 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectClassEventListener; 12 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectClassListener; 13 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectEventListener; 14 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.ObjectListener; 15 import cz.cuni.amis.pogamut.base.utils.math.DistanceUtils; 16 import cz.cuni.amis.pogamut.base3d.worldview.IVisionWorldView; 17 import cz.cuni.amis.pogamut.base3d.worldview.object.ILocated; 18 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Animations; 19 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.EmohawkNavigation; 20 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Emoticons; 21 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Inventory; 22 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Places; 23 import cz.cuni.amis.pogamut.emohawk.agent.module.sensomotoric.Steering; 24 import cz.cuni.amis.pogamut.unreal.agent.navigation.IUnrealPathExecutor; 25 import cz.cuni.amis.pogamut.ut2004.agent.module.sensomotoric.AgentConfig; 26 import cz.cuni.amis.pogamut.ut2004.agent.module.sensomotoric.Raycasting; 27 import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.AgentInfo; 28 import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.UT2004AgentInfo; 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, info,move, 367 new LoqueNavigator<ILocated>(bot, info,move, 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 UT2004AgentInfo(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 }