In this scene I have 2 intervals loop, and if you press space, the new interval will be created. Before the new one created, the looping 2 ones paused first.
Without try-except, the error will be raised in IntervalManager.py :
__storeInterval(self, interval, index):
assert self.ivals[index] == None or self.ivals[index] == interval
- The index generated by addCInterval in addInterval is 1, which is the index of the last paused ival.
- Somehow the last paused ival is still in ivals[], so the expression will return false :
lastPausedIval == newIval
from pandac.PandaModules import Vec3,Vec4,CIntervalManager
import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from direct.interval.IntervalGlobal import Parallel, Sequence, LerpHprInterval, LerpColorScaleInterval
class World(DirectObject):
def __init__(self):
self.CIM=CIntervalManager.getGlobalPtr()
self.acceptOnce('space',self.createNewIval)
base.cam.setY(-5)
smiley1=loader.loadModelCopy('smiley')
smiley1.reparentTo(render)
smiley1.setScale(.6)
smiley1.setZ(-.8)
Sequence(
Parallel( LerpHprInterval( smiley1,2,Vec3(360,0,0)),
LerpColorScaleInterval( smiley1,2,Vec4(1,0,0,1))),
Parallel( LerpHprInterval( smiley1,2,Vec3(720,0,0)),
LerpColorScaleInterval( smiley1,2,smiley1.getColorScale()))
).loop()
smiley2=loader.loadModelCopy('smiley')
smiley2.reparentTo(render)
smiley2.setScale(.5)
Sequence(
Parallel( LerpHprInterval( smiley2,2,Vec3(360,0,0)),
LerpColorScaleInterval( smiley2,2,Vec4(0,0,1,1))),
Parallel( LerpHprInterval( smiley2,2,Vec3(720,0,0)),
LerpColorScaleInterval( smiley2,2,smiley2.getColorScale()))
).loop()
def createNewIval(self):
self.activeIval=[]
for i in range(self.CIM.getNumIntervals()):
self.activeIval.append(self.CIM.getCInterval(i))
self.CIM.getCInterval(i).pause()
smiley3=loader.loadModelCopy('smiley')
smiley3.reparentTo(render)
smiley3.setScale(.3)
smiley3.setZ(.6)
try:
Sequence(
Parallel( LerpHprInterval( smiley3,2,Vec3(360,0,0)),
LerpColorScaleInterval( smiley3,2,Vec4(0,1,0,1))),
Parallel( LerpHprInterval( smiley3,2,Vec3(720,0,0)),
LerpColorScaleInterval( smiley3,2,smiley3.getColorScale()))
).loop()
except:
pass
World()
run()
Thanks.