from otp.ai.AIBaseGlobal import * from . import DistributedCCharBaseAI from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.fsm import State from direct.task import Task from . import CharStateDatasAI from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer class DistributedDonaldDockAI(DistributedCCharBaseAI.DistributedCCharBaseAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedDonaldDockAI') def __init__(self, air): DistributedCCharBaseAI.DistributedCCharBaseAI.__init__(self, air, TTLocalizer.DonaldDock) self.fsm = ClassicFSM.ClassicFSM('DistributedDonaldDockAI', [ State.State('Off', self.enterOff, self.exitOff, [ 'Lonely', 'TransitionToCostume']), State.State('Lonely', self.enterLonely, self.exitLonely, [ 'Chatty', 'TransitionToCostume']), State.State('Chatty', self.enterChatty, self.exitChatty, [ 'Lonely', 'TransitionToCostume']), State.State('TransitionToCostume', self.enterTransitionToCostume, self.exitTransitionToCostume, [ 'Off'])], 'Off', 'Off') self.fsm.enterInitialState() self.handleHolidays() def delete(self): self.fsm.requestFinalState() DistributedCCharBaseAI.DistributedCCharBaseAI.delete(self) self.lonelyDoneEvent = None self.lonely = None self.chattyDoneEvent = None self.chatty = None return def generate(self): DistributedCCharBaseAI.DistributedCCharBaseAI.generate(self) self.lonelyDoneEvent = self.taskName('DonaldDock-lonely-done') self.lonely = CharStateDatasAI.CharLonelyStateAI(self.lonelyDoneEvent, self) self.chattyDoneEvent = self.taskName('DonaldDock-chatty-done') self.chatty = CharStateDatasAI.CharChattyStateAI(self.chattyDoneEvent, self) def start(self): self.fsm.request('Lonely') def __decideNextState(self, doneStatus): if doneStatus['state'] == 'lonely' and doneStatus['status'] == 'done': if len(self.nearbyAvatars) > 0: self.fsm.request('Chatty') else: self.fsm.request('Lonely') elif doneStatus['state'] == 'chatty' and doneStatus['status'] == 'done': self.fsm.request('Lonely') def enterOff(self): pass def exitOff(self): DistributedCCharBaseAI.DistributedCCharBaseAI.exitOff(self) def enterLonely(self): self.notify.debug('Entering Lonely') self.lonely.enter() self.acceptOnce(self.lonelyDoneEvent, self.__decideNextState) def exitLonely(self): self.notify.debug('Exiting Lonely') self.ignore(self.lonelyDoneEvent) self.lonely.exit() def enterChatty(self): self.notify.debug('Entering Chatty') self.chatty.enter() self.acceptOnce(self.chattyDoneEvent, self.__decideNextState) def exitChatty(self): self.notify.debug('Exiting Chatty') self.ignore(self.chattyDoneEvent) self.chatty.exit() def avatarEnterNextState(self): if len(self.nearbyAvatars) == 1: self.fsm.request('Chatty') else: self.notify.debug('avatarEnterNextState: num avatars: ' + str(len(self.nearbyAvatars))) def avatarExitNextState(self): if len(self.nearbyAvatars) == 0: self.fsm.request('Lonely') def enterTransitionToCostume(self): pass def exitTransitionToCostume(self): pass