86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
from direct.distributed import DistributedObjectAI
|
|
from direct.distributed.ClockDelta import *
|
|
from direct.fsm import ClassicFSM, State
|
|
from otp.ai.AIBase import *
|
|
from toontown.toonbase.ToontownGlobals import *
|
|
|
|
|
|
class DistributedBoatAI(DistributedObjectAI.DistributedObjectAI):
|
|
|
|
def __init__(self, air):
|
|
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
|
self.fsm = ClassicFSM.ClassicFSM(
|
|
'DistributedBoatAI',
|
|
[
|
|
State.State('off', self.enterOff, self.exitOff,
|
|
['DockedEast']),
|
|
State.State('DockedEast', self.enterDockedEast, self.exitDockedEast,
|
|
['SailingWest']),
|
|
State.State('SailingWest', self.enterSailingWest, self.exitSailingWest,
|
|
['DockedWest']),
|
|
State.State('DockedWest', self.enterDockedWest, self.exitDockedWest,
|
|
['SailingEast']),
|
|
State.State('SailingEast', self.enterSailingEast, self.exitSailingEast,
|
|
['DockedEast'])
|
|
], 'off', 'off')
|
|
self.fsm.enterInitialState()
|
|
|
|
def delete(self):
|
|
self.fsm.request('off')
|
|
DistributedObjectAI.DistributedObjectAI.delete(self)
|
|
|
|
def b_setState(self, state):
|
|
self.sendUpdate('setState', [state, globalClockDelta.getRealNetworkTime()])
|
|
self.fsm.request(state)
|
|
|
|
def getState(self):
|
|
return [self.fsm.getCurrentState().getName(), globalClockDelta.getRealNetworkTime()]
|
|
|
|
def start(self):
|
|
self.b_setState('DockedEast')
|
|
|
|
def enterOff(self):
|
|
pass
|
|
|
|
def exitOff(self):
|
|
pass
|
|
|
|
def enterDockedEast(self):
|
|
taskMgr.doMethodLater(10.0, self.__departEast, 'depart-east')
|
|
|
|
def exitDockedEast(self):
|
|
taskMgr.remove('depart-east')
|
|
|
|
def __departEast(self, task):
|
|
self.b_setState('SailingWest')
|
|
return Task.done
|
|
|
|
def enterSailingWest(self):
|
|
taskMgr.doMethodLater(20.0, self.__dockWest, 'dock-west')
|
|
|
|
def exitSailingWest(self):
|
|
taskMgr.remove('dock-west')
|
|
|
|
def __dockWest(self, task):
|
|
self.b_setState('DockedWest')
|
|
return Task.done
|
|
|
|
def enterDockedWest(self):
|
|
taskMgr.doMethodLater(10.0, self.__departWest, 'depart-west')
|
|
|
|
def exitDockedWest(self):
|
|
taskMgr.remove('depart-west')
|
|
|
|
def __departWest(self, task):
|
|
self.b_setState('SailingEast')
|
|
return Task.done
|
|
|
|
def enterSailingEast(self):
|
|
taskMgr.doMethodLater(20.0, self.__dockEast, 'dock-east')
|
|
|
|
def exitSailingEast(self):
|
|
taskMgr.remove('dock-east')
|
|
|
|
def __dockEast(self, task):
|
|
self.b_setState('DockedEast')
|
|
return Task.done
|