mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-27 05:32:41 -06:00
40 lines
1.4 KiB
Python
40 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)
|