ToonTownRewritten/toontown/toon/Motion.py

110 lines
3.3 KiB
Python

from direct.fsm import StateData
from toontown.toonbase import ToontownGlobals
from direct.directnotify import DirectNotifyGlobal
from direct.fsm import ClassicFSM, State
from direct.fsm import State
import TTEmote
from otp.avatar import Emote
class Motion(StateData.StateData):
notify = DirectNotifyGlobal.directNotify.newCategory('Motion')
def __init__(self, toon):
self.lt = toon
self.doneEvent = 'motionDone'
StateData.StateData.__init__(self, self.doneEvent)
self.fsm = ClassicFSM.ClassicFSM('Motion', [State.State('off', self.enterOff, self.exitOff),
State.State('neutral', self.enterNeutral, self.exitNeutral),
State.State('walk', self.enterWalk, self.exitWalk),
State.State('run', self.enterRun, self.exitRun),
State.State('sad-neutral', self.enterSadNeutral, self.exitSadNeutral),
State.State('sad-walk', self.enterSadWalk, self.exitSadWalk),
State.State('catch-neutral', self.enterCatchNeutral, self.exitCatchNeutral),
State.State('catch-run', self.enterCatchRun, self.exitCatchRun),
State.State('catch-eatneutral', self.enterCatchEatNeutral, self.exitCatchEatNeutral),
State.State('catch-eatnrun', self.enterCatchEatNRun, self.exitCatchEatNRun)], 'off', 'off')
self.fsm.enterInitialState()
def delete(self):
del self.fsm
def load(self):
pass
def unload(self):
pass
def enter(self):
self.notify.debug('enter')
def exit(self):
self.fsm.requestFinalState()
def enterOff(self, rate = 0):
self.notify.debug('enterOff')
def exitOff(self):
pass
def enterNeutral(self, rate = 0):
self.notify.debug('enterNeutral')
def exitNeutral(self):
self.notify.debug('exitNeutral')
def enterWalk(self, rate = 0):
self.notify.debug('enterWalk')
Emote.globalEmote.disableBody(self.lt, 'enterWalk')
def exitWalk(self):
self.notify.debug('exitWalk')
Emote.globalEmote.releaseBody(self.lt, 'exitWalk')
def enterRun(self, rate = 0):
self.notify.debug('enterRun')
Emote.globalEmote.disableBody(self.lt, 'enterRun')
def exitRun(self):
self.notify.debug('exitRun')
Emote.globalEmote.releaseBody(self.lt, 'exitRun')
def enterSadNeutral(self, rate = 0):
self.notify.debug('enterSadNeutral')
def exitSadNeutral(self):
self.notify.debug('exitSadNeutral')
def enterSadWalk(self, rate = 0):
self.notify.debug('enterSadWalk')
def exitSadWalk(self):
pass
def enterCatchNeutral(self, rate = 0):
self.notify.debug('enterCatchNeutral')
def exitCatchNeutral(self):
self.notify.debug('exitCatchNeutral')
def enterCatchRun(self, rate = 0):
self.notify.debug('enterCatchRun')
def exitCatchRun(self):
self.notify.debug('exitCatchRun')
def enterCatchEatNeutral(self, rate = 0):
self.notify.debug('enterCatchEatNeutral')
def exitCatchEatNeutral(self):
self.notify.debug('exitCatchEatNeutral')
def enterCatchEatNRun(self, rate = 0):
self.notify.debug('enterCatchEatNRun')
def exitCatchEatNRun(self):
self.notify.debug('exitCatchEatNRun')
def setState(self, anim, rate):
toon = self.lt
if toon.playingAnim != anim:
self.fsm.request(anim, [rate])