From 99094b4a9d3a59800a7aafb9732df9f030df5a84 Mon Sep 17 00:00:00 2001 From: Mike Goslin Date: Tue, 26 Jun 2001 02:20:50 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/interval/ActorInterval.py | 32 ++++++++++++++++++++++------ direct/src/interval/Interval.py | 5 +++-- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/direct/src/interval/ActorInterval.py b/direct/src/interval/ActorInterval.py index 94ce816d5c..a59bec57bc 100644 --- a/direct/src/interval/ActorInterval.py +++ b/direct/src/interval/ActorInterval.py @@ -24,7 +24,7 @@ class ActorInterval(Interval): # will play once and then nothing will happen for the remainder of the # interval def __init__(self, actor, animName, loop=0, duration=0.0, - startTime = 0.0, name=None): + startTime=0.0, endTime=None, name=None): """__init__(name) """ # Generate unique id @@ -42,19 +42,37 @@ class ActorInterval(Interval): if (name == None): name = id # Compute duration if no duration specified + reverse = 0 if duration == 0.0: - duration = max(self.actor.getDuration(self.animName) - startTime, - 0.0) + if (endTime == None): + duration = max(self.actor.getDuration(self.animName) - \ + startTime, 0.0) + else: + duration = endTime - startTime + if (duration < 0.0): + duration = -duration + if (endTime == None): + self.finishTime = self.startTime + duration + else: + self.finishTime = endTime + if (self.startTime > self.finishTime): + reverse = 1 + # Initialize superclass - Interval.__init__(self, name, duration) + Interval.__init__(self, name, duration, reverse=reverse) # Update stopEvent if self.loop: self.stopEvent = id + '_stopEvent' self.stopEventList = [self.stopEvent] def calcFrame(self, t): + offset = t % abs(self.finishTime - self.startTime) # Compute current frame based upon current time - floatFrame = self.frameRate * (self.startTime + t) + if (self.reverse == 0): + floatFrame = self.frameRate * (self.startTime + offset) + else: + negOffset = (self.startTime - self.finishTime) - offset + floatFrame = self.frameRate * (self.finishTime + negOffset) # Need max to avoid frame = -1 when t = 0 frame = max(0, int(math.ceil(floatFrame)) - 1) # Modulo in case of looping anim @@ -70,7 +88,7 @@ class ActorInterval(Interval): (self.name,frame)) return frame - def updateFunc(self, t, event = IVAL_NONE): + def updateFunc(self, t, event=IVAL_NONE): """ updateFunc(t, event) Go to time t """ @@ -79,7 +97,7 @@ class ActorInterval(Interval): return # Update animation based upon current time # Pose or stop anim - if (t >= (self.startTime + self.getDuration())): + if (t >= self.getDuration()): self.actor.stop() frame = self.goToT(self.getDuration()) if self.loop: diff --git a/direct/src/interval/Interval.py b/direct/src/interval/Interval.py index d2a9d51be4..542761cbea 100644 --- a/direct/src/interval/Interval.py +++ b/direct/src/interval/Interval.py @@ -20,8 +20,8 @@ class Interval(DirectObject): clock = ClockObject.ClockObject.getGlobalClock() # Class methods - def __init__(self, name, duration, openEnded = 1): - """__init__(name, duration) + def __init__(self, name, duration, openEnded=1, reverse=0): + """__init__(name, duration, openEnded, reverse) """ self.name = name self.duration = duration @@ -31,6 +31,7 @@ class Interval(DirectObject): self.setTHooks = [] # Set true if interval responds to setT(t): t>duration self.fOpenEnded = openEnded + self.reverse = reverse def getName(self): """ getName()