Poodletooth-iLand/toontown/minigame/RingTrack.py

39 lines
1.4 KiB
Python

from direct.directnotify import DirectNotifyGlobal
import RingAction
class RingTrack:
notify = DirectNotifyGlobal.directNotify.newCategory('RingTrack')
def __init__(self, actions, actionDurations = None, reverseFlag = 0):
if actionDurations == None:
actionDurations = [1.0 / float(len(actions))] * len(actions)
sum = 0.0
for duration in actionDurations:
sum += duration
if sum != 1.0:
self.notify.warning('action lengths do not sum to 1.; sum=' + str(sum))
self.actions = actions
self.actionDurations = actionDurations
self.reverseFlag = reverseFlag
return
def eval(self, t):
t = float(t)
if self.reverseFlag:
t = 1.0 - t
actionStart = 0.0
for action, duration in zip(self.actions, self.actionDurations):
actionEnd = actionStart + duration
if t < actionEnd:
actionT = (t - actionStart) / duration
return action.eval(actionT)
else:
actionStart = actionEnd
if t == actionStart:
self.notify.debug('time value is at end of ring track: ' + str(t) + ' == ' + str(actionStart))
else:
self.notify.debug('time value is beyond end of ring track: ' + str(t) + ' > ' + str(actionStart))
lastAction = self.actions[len(self.actions) - 1]
return lastAction.eval(1.0)