oldschool-toontown/toontown/classicchars/DistributedDonaldDockAI.py
2019-12-30 21:46:25 -05:00

96 lines
3.5 KiB
Python

from otp.ai.AIBaseGlobal import *
from toontown.classicchars import DistributedCCharBaseAI
from direct.directnotify import DirectNotifyGlobal
from direct.fsm import ClassicFSM, State
from direct.fsm import State
from direct.task import Task
from toontown.classicchars 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