(SubgameEntity self, GameExportsImpl gameExports)
| 429 | } |
| 430 | |
| 431 | public static void FoundTarget(SubgameEntity self, GameExportsImpl gameExports) { |
| 432 | // let other monsters see this monster for a while |
| 433 | if (self.enemy.getClient() != null) { |
| 434 | gameExports.level.sight_entity = self; |
| 435 | gameExports.level.sight_entity_framenum = gameExports.level.framenum; |
| 436 | gameExports.level.sight_entity.light_level = 128; |
| 437 | } |
| 438 | |
| 439 | self.show_hostile = (int) gameExports.level.time + 1; // wake up other |
| 440 | // monsters |
| 441 | |
| 442 | Math3D.VectorCopy(self.enemy.s.origin, self.monsterinfo.last_sighting); |
| 443 | self.monsterinfo.trail_time = gameExports.level.time; |
| 444 | |
| 445 | if (self.combattarget == null) { |
| 446 | GameAI.HuntTarget(self, gameExports); |
| 447 | return; |
| 448 | } |
| 449 | |
| 450 | self.goalentity = self.movetarget = GameBase |
| 451 | .G_PickTarget(self.combattarget, gameExports); |
| 452 | if (self.movetarget == null) { |
| 453 | self.goalentity = self.movetarget = self.enemy; |
| 454 | GameAI.HuntTarget(self, gameExports); |
| 455 | gameExports.gameImports.dprintf("" + self.classname + "at " |
| 456 | + Lib.vtos(self.s.origin) + ", combattarget " |
| 457 | + self.combattarget + " not found\n"); |
| 458 | return; |
| 459 | } |
| 460 | |
| 461 | // clear out our combattarget, these are a one shot deal |
| 462 | self.combattarget = null; |
| 463 | self.monsterinfo.aiflags |= GameDefines.AI_COMBAT_POINT; |
| 464 | |
| 465 | // clear the targetname, that point is ours! |
| 466 | self.movetarget.targetname = null; |
| 467 | self.monsterinfo.pausetime = 0; |
| 468 | |
| 469 | // run for it |
| 470 | self.monsterinfo.run.think(self, gameExports); |
| 471 | } |
| 472 | |
| 473 | private static EntThinkAdapter Think_Delay = new EntThinkAdapter() { |
| 474 | public String getID() { return "Think_Delay"; } |
no test coverage detected