From af7d856efc59bce54d24b26014ea249261b93e8a Mon Sep 17 00:00:00 2001 From: Mark Mine Date: Fri, 8 Jun 2001 00:27:09 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/interval/ActorInterval.py | 47 +++++++++++++++++----------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/direct/src/interval/ActorInterval.py b/direct/src/interval/ActorInterval.py index 99848610d8..390189f0ff 100644 --- a/direct/src/interval/ActorInterval.py +++ b/direct/src/interval/ActorInterval.py @@ -2,6 +2,7 @@ from PandaModules import * from Interval import * +import math import DirectNotifyGlobal @@ -32,6 +33,7 @@ class ActorInterval(Interval): self.actor = actor self.animName = animName self.loop = loop + self.frameRate = self.actor.getFrameRate(self.animName) self.numFrames = self.actor.getNumFrames(self.animName) # Compute start time self.startTime = startTime @@ -49,6 +51,23 @@ class ActorInterval(Interval): self.stopEvent = id + '_stopEvent' self.stopEventList = [self.stopEvent] + def calcFrame(self, t): + # Compute current frame based upon current time + floatFrame = self.frameRate * (self.startTime + t) + # Need max to avoid frame = -1 when t = 0 + frame = max(0, int(math.ceil(floatFrame)) - 1) + # Modulo in case of looping anim + return frame % self.numFrames + + def goToT(self, t): + # Calc integer frame number + frame = self.calcFrame(t) + # Pose anim + self.actor.pose(self.animName, frame) + # Print debug information + self.notify.debug('goToT() - pose to frame: %d' % frame) + return frame + def updateFunc(self, t, event = IVAL_NONE): """ updateFunc(t, event) Go to time t @@ -60,33 +79,23 @@ class ActorInterval(Interval): # Pose or stop anim if (t >= (self.startTime + self.getDuration())): self.actor.stop() - currT = (self.actor.getFrameRate(self.animName) * - (self.startTime + self.getDuration())) - frame = int(round(currT)) % self.numFrames - # Pose anim - self.notify.debug('updateFunc() - stopping at frame: %d of %d' \ - % (frame, self.numFrames)) - self.actor.pose(self.animName, frame) + frame = self.goToT(self.getDuration()) if self.loop: self.ignore(self.stopEvent) + # Print debug information + self.notify.debug( + 'updateFunc() - stoping at frame: ' + + '%d Num frames: %d' % (frame, self.numFrames)) elif self.loop == 1: if event == IVAL_INIT: - # Determine the current frame - currT = (self.actor.getFrameRate(self.animName) * - (self.startTime + t)) - frame = int(round(currT)) % self.numFrames # Pose anim - self.actor.pose(self.animName, frame) + self.goToT(t) # And start loop, restart flag says continue from current frame self.actor.loop(self.animName, restart=0) self.accept(self.stopEvent, self.actor.stop) + # Print debug information + self.notify.debug('updateFunc() - IVAL_INIT looping anim') else: - # Determine the current frame - currT = (self.actor.getFrameRate(self.animName) * - (self.startTime + t)) - frame = int(round(currT)) % self.numFrames # Pose anim - self.actor.pose(self.animName, frame) - - + self.goToT(t)