Poodletooth-iLand/toontown/minigame/OrthoWalk.py

76 lines
2.5 KiB
Python

from toontown.toonbase.ToonBaseGlobal import *
from direct.task.Task import Task
from direct.interval.IntervalGlobal import *
from OrthoDrive import *
from direct.directnotify import DirectNotifyGlobal
class OrthoWalk:
notify = DirectNotifyGlobal.directNotify.newCategory('OrthoWalk')
BROADCAST_POS_TASK = 'OrthoWalkBroadcastPos'
def __init__(self, orthoDrive, collisions = 1, broadcast = 1, broadcastPeriod = 0.2):
self.orthoDrive = orthoDrive
self.collisions = collisions
self.broadcast = broadcast
self.broadcastPeriod = broadcastPeriod
self.priority = self.orthoDrive.priority + 1
self.lt = base.localAvatar
def destroy(self):
self.orthoDrive.destroy()
del self.orthoDrive
def start(self):
self.notify.debug('OrthoWalk start')
if self.collisions:
self.initCollisions()
if self.broadcast:
self.initBroadcast()
self.orthoDrive.start()
def stop(self):
self.notify.debug('OrthoWalk stop')
self.shutdownCollisions()
self.shutdownBroadcast()
self.orthoDrive.stop()
def initCollisions(self):
self.notify.debug('OrthoWalk initCollisions')
lt = base.localAvatar
lt.collisionsOn()
self.__collisionsOn = 1
def shutdownCollisions(self):
if not hasattr(self, '_OrthoWalk__collisionsOn'):
return
del self.__collisionsOn
self.notify.debug('OrthoWalk shutdownCollisions')
lt = base.localAvatar
lt.collisionsOff()
def initBroadcast(self):
self.notify.debug('OrthoWalk initBroadcast')
self.timeSinceLastPosBroadcast = 0.0
self.lastPosBroadcast = self.lt.getPos()
self.lastHprBroadcast = self.lt.getHpr()
self.storeStop = 0
lt = self.lt
lt.d_clearSmoothing()
lt.sendCurrentPosition()
taskMgr.remove(self.BROADCAST_POS_TASK)
taskMgr.add(self.doBroadcast, self.BROADCAST_POS_TASK, priority=self.priority)
def shutdownBroadcast(self):
self.notify.debug('OrthoWalk shutdownBroadcast')
taskMgr.remove(self.BROADCAST_POS_TASK)
def doBroadcast(self, task):
dt = globalClock.getDt()
self.timeSinceLastPosBroadcast += dt
if self.timeSinceLastPosBroadcast >= self.broadcastPeriod:
self.sendCurrentPosition()
return Task.cont
def sendCurrentPosition(self):
self.timeSinceLastPosBroadcast -= self.broadcastPeriod
self.lt.cnode.broadcastPosHprXyh()