enable intra-frame animation interpolation

This commit is contained in:
David Rose 2006-10-15 00:24:34 +00:00
parent 731ab7b576
commit ce4568d89e
1 changed files with 10 additions and 7 deletions

View File

@ -71,19 +71,19 @@ class ActorInterval(Interval.Interval):
if startFrame != None:
self.startFrame = startFrame
elif startTime != None:
self.startFrame = int(math.floor(startTime * self.frameRate + 0.0001))
self.startFrame = startTime * self.frameRate
else:
self.startFrame = 0
if endFrame != None:
self.endFrame = endFrame
elif endTime != None:
self.endFrame = int(math.floor(endTime * self.frameRate + 0.0001))
self.endFrame = endTime * self.frameRate
elif duration != None:
if startTime == None:
startTime = float(self.startFrame) / float(self.frameRate)
endTime = startTime + duration
self.endFrame = int(math.floor(duration * self.frameRate + 0.0001))
self.endFrame = duration * self.frameRate
else:
# No end frame specified. Choose the maximum of all
# of the controls' numbers of frames.
@ -129,7 +129,7 @@ class ActorInterval(Interval.Interval):
absFrame = self.startFrame + frameCount
# Calc integer frame number
absFrame = int(math.floor(absFrame + 0.0001))
intFrame = int(math.floor(absFrame + 0.0001))
# Pose anim
@ -140,7 +140,7 @@ class ActorInterval(Interval.Interval):
# Each animControl might have a different number of frames.
numFrames = control.getNumFrames()
if self.loopAnim:
frame = absFrame % numFrames
frame = (intFrame % numFrames) + (absFrame - intFrame)
else:
frame = max(min(absFrame, numFrames - 1), 0)
@ -152,12 +152,15 @@ class ActorInterval(Interval.Interval):
self.currT = t
def privFinalize(self):
if self.implicitDuration:
if self.implicitDuration and not self.loopAnim:
# As a special case, we ensure we end up posed to the last
# frame of the animation if the original duration was
# implicit. This is necessary only to guard against
# possible roundoff error in computing the final frame
# from the duration.
# from the duration. We don't do this in the case of a
# looping animation, however, because this would introduce
# a hitch in the animation when it plays back-to-back with
# the next cycle.
if self.reverse:
for control in self.controls:
control.pose(self.startFrame)