def __init__(self, air, dispatch): DistributedAvatarAI.__init__(self, air) BaseNPCAI.__init__(self, dispatch) self.setDispatch(dispatch) self.patrolTime = 0.0 self.patrolDur = 10.0 self.activities = { ACT_WAKE_ANGRY: 2.0, ACT_DIE: -1, ACT_GOON_SCAN: 6.0 } self.schedules.update({ "SCAN_AREA": Schedule([ Task_StopMoving(self), Task_GetRandomPath(self), Task_RunPath(self), Task_AwaitMovement(self), Task_SetActivity(self, ACT_GOON_SCAN), Task_AwaitActivity(self) ], interruptMask=COND_NEW_TARGET | COND_LIGHT_DAMAGE | COND_HEAVY_DAMAGE) }) self.brain = None self.spawnflags = 0 self.health = 25 self.maxHealth = 25
def getIdealState(self): BaseNPCAI.getIdealState(self) if self.npcState == STATE_ALERT: if globalClock.getFrameTime() - self.patrolTime > self.patrolDur: self.idealState = STATE_IDLE return self.idealState
def getSchedule(self): if self.npcState in [STATE_DEAD, STATE_NONE]: return BaseNPCAI.getSchedule(self) if self.npcState == STATE_ALERT: # Walk around and scan the area for trespassers return self.getScheduleByName("SCAN_AREA") return BaseNPCAI.getSchedule(self)
def setNPCState(self, state): if state != self.npcState: if state == STATE_ALERT: self.patrolTime = globalClock.getFrameTime() self.patrolDur = random.uniform(10, 60) if state == STATE_COMBAT: self.d_doDetectStuff() elif self.npcState == STATE_COMBAT: self.d_doUndetectGlow() BaseNPCAI.setNPCState(self, state)