diff --git a/direct/src/showbase/Transitions.py b/direct/src/showbase/Transitions.py index 1c7c2381ec..4fd4910aa1 100644 --- a/direct/src/showbase/Transitions.py +++ b/direct/src/showbase/Transitions.py @@ -11,39 +11,71 @@ class Transitions: IrisModelName = "models/misc/iris" FadeModelName = "models/misc/fade" - def __init__(self, loader): + def __init__(self, loader, + model=None, + scale=3.0, + pos=Vec3(0,0,0)): self.transitionIval = None self.letterboxIval = None self.iris = None self.fade = None self.letterbox = None - self.alphaOff = Vec4(0,0,0,0) - self.alphaOn = Vec4(0,0,0,1) - + self.fadeModel = model + self.imageScale = scale + self.imagePos = pos + if model: + self.alphaOff = Vec4(1,1,1,0) + self.alphaOn = Vec4(1,1,1,1) + model.setTransparency(1) + self.lerpFunc = LerpColorScaleInterval + else: + self.alphaOff = Vec4(0,0,0,0) + self.alphaOn = Vec4(0,0,0,1) + self.lerpFunc = LerpColorInterval + self.irisTaskName = "irisTask" self.fadeTaskName = "fadeTask" self.letterboxTaskName = "letterboxTask" + def __del__(self): + if self.fadeModel: + self.fadeModel.removeNode() + self.fadeModel = None + ################################################## # Fade ################################################## + + # We can set a custom model for the fade before using it for the first time + def setFadeModel(self, model, scale=1.0): + self.fadeModel = model + # We have to change some default parameters for a custom fadeModel + self.imageScale = scale + self.alphaOn = Vec4(1,1,1,1) + + # Reload fade if its already been created + if self.fade: + del self.fade + self.fade = None + self.loadFade() def loadFade(self): + if not self.fadeModel: + self.fadeModel = loader.loadModel(self.FadeModelName) + if self.fade == None: # We create a DirectFrame for the fade polygon, instead of # simply loading the polygon model and using it directly, # so that it will also obscure mouse events for objects # positioned behind it. - fadeModel = loader.loadModel(self.FadeModelName) self.fade = DirectFrame( parent = hidden, guiId = 'fade', relief = None, - image = fadeModel, - image_scale = 3.0, + image = self.fadeModel, + image_scale = self.imageScale, state = NORMAL, ) - fadeModel.removeNode() def fadeIn(self, t=0.5, finishIval=None): """ @@ -61,9 +93,9 @@ class Transitions: # Create a sequence that lerps the color out, then # parents the fade to hidden self.fade.reparentTo(aspect2d, FADE_SORT_INDEX) - self.transitionIval = Sequence(LerpColorInterval(self.fade, t, - color = self.alphaOff, - startColor = self.alphaOn), + self.transitionIval = Sequence(self.lerpFunc(self.fade, t, + self.alphaOff, + self.alphaOn), Func(self.fade.detachNode), name = self.fadeTaskName, ) @@ -89,9 +121,9 @@ class Transitions: else: # Create a sequence that lerps the color out, then # parents the fade to hidden - self.transitionIval = Sequence(LerpColorInterval(self.fade, t, - color = self.alphaOn, - startColor = self.alphaOff), + self.transitionIval = Sequence(self.lerpFunc(self.fade, t, + self.alphaOn, + self.alphaOff), name = self.fadeTaskName, ) if finishIval: