def enterCoolDown(self, fromFrozen = 0): if fromFrozen: self.loadIceCube() self.iceCube.setColorScale(0.76, 0.76, 1.0, 1.0) self.iccdIval = LerpColorScaleInterval(self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 0.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccdIval.start() length = 1.0 base.playSfx(choice(self.coolSfxArray)) self.cdcsIval = Sequence(LerpColorScaleInterval(base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(1.0, 1.0, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'off')) self.cdcsIval.start()
def enterFrozen(self): self.loadIceCube() base.cr.playGame.getPlace().fsm.request('stop', [0]) base.localAvatar.stop() base.playSfx(choice(self.frozenSfxArray)) self.iccsIval = LerpColorScaleInterval(self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 1.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccsIval.start() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) self.frame = DirectFrame(pos=(0, 0, 0.7)) self.powerBar = DirectWaitBar(frameColor=(1, 1, 1, 1), range=100, value=0, scale=(0.4, 0.5, 0.25), parent=self.frame, barColor=(0.55, 0.7, 1.0, 1.0)) self.label = OnscreenText(text='SHAKE MOUSE', shadow=(0, 0, 0, 1), fg=(0.55, 0.7, 1.0, 1.0), pos=(0, -0.1, 0), parent=self.frame) taskMgr.add(self.__watchMouseMovement, 'BRWater-watchMouseMovement') taskMgr.add(self.__lowerPowerBar, 'BRWater-lowerPowerBar') mw = base.mouseWatcherNode if mw.hasMouse(): self.lastMouseX = mw.getMouseX()
def enterEatFruit(self, fruitModel, handNode): self.notify.debug('enterEatFruit') if self.isLocal: self.activity.orthoWalk.start() self.setAnimState('Catching', 1.0) self.fruitModel = fruitModel renderScale = fruitModel.getScale(render) fruitModel.reparentTo(handNode) fruitModel.setScale(render, renderScale) fruitModel.setTransparency(1) duration = self.toon.getDuration('catch-eatneutral') self.eatIval = Sequence(Parallel( WaitInterval(duration), Sequence( LerpColorScaleInterval(fruitModel, duration / 2.0, Vec4(1.0, 1.0, 1.0, 0.0)))), Func(self.fsm.request, 'normal'), name=self.toon.uniqueName('eatingIval')) self.eatIval.start()
def enterShoot(self, suitId): if self.cannon: smoke = loader.loadModel("phase_4/models/props/test_clouds.bam") smoke.setBillboardPointEye() smoke.reparentTo(self.cannon.find('**/cannon')) smoke.setPos(0, 6, -3) smoke.setScale(0.5) smoke.wrtReparentTo(render) self.suit = self.cr.doId2do.get(suitId) self.cannon.find('**/cannon').lookAt( self.suit.find('**/joint_head')) self.cannon.find('**/square_drop_shadow').headsUp( self.suit.find('**/joint_head')) self.track = Sequence( Parallel(LerpScaleInterval(smoke, 0.5, 3), LerpColorScaleInterval(smoke, 0.5, Vec4(2, 2, 2, 0))), Func(smoke.removeNode)) self.track.start() self.createAndShootGag()
def playGame(self): self.ignore('doQuitGame') self.ignore('doCancelQuitGame') if self.fadeOut is not None: self.fadeOut.finish() self.fadeOut = None self.fadeOut = base.transitions.getFadeOutIval(t=1) # base.camera.posHprInterval(1, Point3(TOON_HALL_POS), VBase3(TOON_HALL_HPR), blendType = 'easeInOut').start() Sequence( Func(self.doPlayButton), LerpColorScaleInterval(self.background2d, .5, Vec4(1, 1, 1, 0), startColorScale=Vec4(1, 1, 1, .6)), # Func(self.murder), Func(self.enterGame), base.camera.posHprInterval(1, Point3(-36, -2, 12), VBase3(-90, -2, 0), blendType='easeInOut')).start()
def __tickNearbyCogs(self): self.__selectNearbyCogs() tickTrack = Parallel() tickDuration = 0.4 for cog in self.selectedCogs: if not cog.isDead(): base.audio3d.attachSoundToObject(self.tickSfx, cog) tickTrack.append( Parallel( Sequence( LerpColorScaleInterval(cog, tickDuration, VBase4(1, 0, 0, 1)), Func(cog.clearColorScale), Func(cog.d_disableMovement)), SoundInterval(self.tickSfx, duration=tickDuration, node=cog))) else: self.selectedCogs.remove(cog) return tickTrack
def openOptions(self): self.optionsMgr.showOptions(False) if not hasattr(self, 'closeOptionsButton'): self.closeOptionsButton = DirectButton( relief=None, image=(btnUp, btnDn, btnRlvr), text='Back', text_fg=(0, 0, 0, 1), text_scale=TTLocalizer.AClogoutButton, text_pos=(0, -0.035), image_scale=1, image1_scale=1.05, image2_scale=1.05, scale=0.7, command=self.hideOptions) self.closeOptionsButton.reparent_to(self.optionsMgr.optionsNode) self.closeOptionsButton.setPos(0, 1, -.75) self.closeOptionsButton.show() for button in self.allButtons: LerpColorScaleInterval(button, .15, Vec4(1, 1, 1, 0), Vec4(1, 1, 1, 1)).start()
def handleMatch(self, cardA, cardB, withBonus): self.notify.debug('we got a match %d %d' % (cardA, cardB)) self.matches += 1 if cardA in self.faceUpList: self.faceUpList.remove(cardA) if cardB in self.faceUpList: self.faceUpList.remove(cardB) self.inactiveList.append(cardA) self.inactiveList.append(cardB) matchIval = Parallel() for card in [cardA, cardB]: self.cards[card].setTransparency(1) cardSeq = Sequence( LerpColorScaleInterval(self.cards[card], duration=1, colorScale=Vec4(1.0, 1.0, 1.0, 0.0)), Func(self.cards[card].hide)) matchIval.append(cardSeq) if withBonus: matchIval.append( SoundInterval(self.matchWithBonusSfx, node=self.cards[card], listenerNode=base.localAvatar, cutOff=240)) else: matchIval.append( SoundInterval(self.matchSfx, node=self.cards[card], listenerNode=base.localAvatar, cutOff=240)) matchIval.start() # report we're done if all cards are matched if len(self.inactiveList) == len(self.cards): self.sendUpdate('reportDone')
def __init__(self, doneCallback): self.cioimg = OnscreenImage( image='materials/engine/coginvasiononline.png') self.cioimg.hide() self.cioimg.setColorScale(0, 0, 0, 1) self.pandaimg = OnscreenImage( image='materials/engine/powered_by_panda3d.png') self.pandaimg.hide() self.pandaimg.setColorScale(0, 0, 0, 1) self.discimg = OnscreenImage(image='materials/engine/disclaimer.png') self.discimg.hide() self.discimg.setColorScale(0, 0, 0, 1) self.doneCallback = doneCallback self.splashIval = Sequence( Func(self.cioimg.show), Wait(1.0), Func(base.playMusic, "encntr_suit_HQ_nbrhood"), LerpColorScaleInterval(self.cioimg, 1.0, (1, 1, 1, 1), (0, 0, 0, 1)), Wait(3), LerpColorScaleInterval(self.cioimg, 1.0, (0, 0, 0, 1), (1, 1, 1, 1)), Func(self.cioimg.hide), Func(self.pandaimg.show), LerpColorScaleInterval(self.pandaimg, 1.0, (1, 1, 1, 1), (0, 0, 0, 1)), Wait(1.0), LerpColorScaleInterval(self.pandaimg, 1.0, (0, 0, 0, 1), (1, 1, 1, 1)), Func(self.pandaimg.hide), Func(self.discimg.show), LerpColorScaleInterval(self.discimg, 1.0, (1, 1, 1, 1), (0, 0, 0, 1)), Wait(3.5), LerpColorScaleInterval(self.discimg, 1.0, (0, 0, 0, 1), (1, 1, 1, 1)), Func(self.discimg.hide), Func(self.cleanup), Func(self.doneCallback)) self.splashIval.start() base.accept('space', self.splashIval.finish)
def destroyAnimation(self): self.ignoreAll() LerpColorScaleInterval(self.contents, .15, VBase4(1, 1, 1, 0), VBase4(1, 1, 1, 1)).start() Sequence(self.contents.scaleInterval(.15, 0, blendType='easeInOut'), Func(self.destroy)).start()
def getDropIval(self): shadow = self.shadow drop = self.drop id = self.id hangTime = Globals.ShadowTime dropTime = Globals.DropTime dropHeight = Globals.DropHeight targetShadowScale = 0.5 targetShadowAlpha = 0.4 shadowScaleIval = LerpScaleInterval(shadow, dropTime, targetShadowScale, startScale=0) shadowAlphaIval = LerpColorScaleInterval( shadow, hangTime, Point4(1, 1, 1, targetShadowAlpha), startColorScale=Point4(1, 1, 1, 0)) shadowIval = Parallel(shadowScaleIval, shadowAlphaIval) startPos = Point3(0, 0, dropHeight) drop.setPos(startPos) dropIval = LerpPosInterval(drop, dropTime, Point3(0, 0, 0), startPos=startPos, blendType='easeIn') dropSoundIval = self._dropSfx dropSoundIval.node = self self.drop.setTransparency(1) def _setRandScale(t): self.drop.setScale(self, 1 - random.random() / 16, 1 - random.random() / 16, 1 - random.random() / 4) scaleChange = 0.4 + random.random() / 4 dropShakeSeq = Sequence( LerpScaleInterval(self.drop, 0.25, Vec3(1.0 + scaleChange, 1.0 + scaleChange / 2, 1.0 - scaleChange), blendType='easeInOut'), LerpScaleInterval(self.drop, 0.25, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'), Func(self.disableCollisionDamage), LerpScaleInterval(self.drop, 0.2, Vec3(1.0 + scaleChange / 8, 1.0 + scaleChange / 8, 1.0 - scaleChange / 8), blendType='easeInOut'), LerpScaleInterval(self.drop, 0.2, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'), LerpScaleInterval(self.drop, 0.15, Vec3(1.0 + scaleChange / 16, 1.0 + scaleChange / 16, 1.0 - scaleChange / 16), blendType='easeInOut'), LerpScaleInterval(self.drop, 0.15, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'), LerpScaleInterval(self.drop, 0.1, Vec3(1.0 + scaleChange / 16, 1.0 + scaleChange / 8, 1.0 - scaleChange / 16), blendType='easeInOut'), LerpColorScaleInterval(self.drop, Globals.DropFadeTime, Vec4(1.0, 1.0, 1.0, 0.0))) ival = Sequence(Func(self.reparentTo, render), Parallel(Sequence(WaitInterval(hangTime), dropIval), shadowIval), Parallel(Func(self.game.dropHit, self, id), dropSoundIval, dropShakeSeq), Func(self.game.cleanupDrop, id), name='drop%s' % id) self.ival = ival return ival
def addLine(self, text, color): # Whilst in a battle, we don't want to display update text. if base.localAvatarReachable(): place = base.cr.playGame.getPlace() if base.localAvatar.getBattleZone() or ( place and place.fsm.getCurrentState().getName() != 'walk'): self.queuedLines[text] = color return if len(self.lines) == self.MAX_LINES: oldestLine = self.lines[len(self.lines) - 1] ival = self.ivalDict.get(oldestLine, None) ival.finish() newLine = OnscreenText(parent=self, text=text, fg=color, shadow=(color[0] * self.SHADOW_MODIFIER, color[1] * self.SHADOW_MODIFIER, color[2] * self.SHADOW_MODIFIER, 1.0), mayChange=1, font=CIGlobals.getMinnieFont()) newLine.setPos(*self.LINE_MINIMUM_POS) initScale = (1.0, 1.0, 1.0) growScale = (1.15, 1.15, 1.15) """ LerpScaleInterval(newLine, 0.5, scale = initScale, blendType = 'easeIn', bakeInStart = 0), """ lineIval = Sequence( Func(self.alertSfx.play), LerpScaleInterval(newLine, 0.5, scale=initScale, startScale=(0.01, 0.01, 0.01), blendType='easeOut', bakeInStart=0), Wait(0.5), Wait(self.SHOW_DURATION), Parallel( LerpPosInterval(newLine, self.FADE_DURATION, pos=(0.0, 0.0, (self.LINE_Y_OFFSET * (self.MAX_LINES + 1.8))), blendType='easeIn', bakeInStart=0, other=self), LerpColorScaleInterval(newLine, self.FADE_DURATION - 0.5, (1.0, 1.0, 1.0, 0.01), blendType='easeIn')), Func(self.deleteLine, newLine)) self.lines.insert(0, newLine) self.ivalDict.update({newLine: lineIval}) for i in range(1, len(self.lines)): line = self.lines[i] if not line.isEmpty(): # Let's reposition this element. line.setPos( line.getX(), self.LINE_MINIMUM_POS[1] + (self.LINE_Y_OFFSET * i)) lineIval.start()
def doBossFlash(): if not self.isEmpty(): LerpColorScaleInterval(self, 0.2, flashColor).start()
class BRWater: notify = directNotify.newCategory("BRWater") def __init__(self, playground): self.playground = playground self.fsm = ClassicFSM('BRWater', [ State('off', self.enterOff, self.exitOff), State('freezeUp', self.enterFreezeUp, self.exitFreezeUp), State('coolDown', self.enterCoolDown, self.exitCoolDown), State('frozen', self.enterFrozen, self.exitFrozen) ], 'off', 'off') self.fsm.enterInitialState() #base.localAvatar.audio3d self.freezeUpSfx = base.loadSfx('phase_8/audio/sfx/freeze_up.ogg') self.frozenSfxArray = [ base.loadSfx('phase_8/audio/sfx/frozen_1.ogg'), base.loadSfx('phase_8/audio/sfx/frozen_2.ogg'), base.loadSfx('phase_8/audio/sfx/frozen_3.ogg') ] self.coolSfxArray = [ base.loadSfx('phase_8/audio/sfx/cool_down_1.ogg'), base.loadSfx('phase_8/audio/sfx/cool_down_2.ogg') ] self.iceFormSfx = base.loadSfx("phase_4/audio/sfx/ice_cube_form.ogg") self.iceBreakSfx = base.loadSfx("phase_4/audio/sfx/ice_cube_break.ogg") self.freezeUpSfx.setVolume(12) for sfx in self.frozenSfxArray: sfx.setVolume(12) for sfx in self.coolSfxArray: sfx.setVolume(12) #for sfx in self.frozenSfxArray: # self.attachSound(sfx) #for sfx in self.coolSfxArray: # self.attachSound(sfx) #self.attachSound(self.freezeUpSfx) def attachSound(self, sound): base.localAvatar.audio3d.attachSoundToObject(sound, base.localAvatar) def enterOff(self): self.playground.startWaterWatch() def exitOff(self): self.playground.stopWaterWatch() def loadIceCube(self): self.iceCube = loader.loadModel('phase_8/models/props/icecube.bam') for node in self.iceCube.findAllMatches('**/billboard*'): node.removeNode() for node in self.iceCube.findAllMatches('**/drop_shadow*'): node.removeNode() for node in self.iceCube.findAllMatches('**/prop_mailboxcollisions*'): node.removeNode() self.iceCube.reparentTo(base.localAvatar) self.iceCube.setScale(1.2, 1.0, base.localAvatar.getHeight() / 1.7) self.iceCube.setTransparency(1) self.iceCube.setColorScale(0.76, 0.76, 1.0, 0.0) def unloadIceCube(self): self.iceCube.removeNode() del self.iceCube def enterFreezeUp(self): length = 1.0 base.playSfx(self.freezeUpSfx) self.fucsIval = Sequence( LerpColorScaleInterval( base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(0.5, 0.5, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'frozen')) self.fucsIval.start() self.playground.startWaterWatch(0) def exitFreezeUp(self): self.fucsIval.pause() del self.fucsIval self.playground.stopWaterWatch() def enterFrozen(self): self.loadIceCube() base.playSfx(self.iceFormSfx) base.cr.playGame.getPlace().fsm.request('stop', [0]) base.localAvatar.stop() base.playSfx(choice(self.frozenSfxArray)) self.iccsIval = LerpColorScaleInterval( self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 1.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccsIval.start() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) self.frame = DirectFrame(pos=(0, 0, 0.7)) self.powerBar = DirectWaitBar(frameColor=(1, 1, 1, 1), range=100, value=0, scale=(0.4, 0.5, 0.25), parent=self.frame, barColor=(0.55, 0.7, 1.0, 1.0)) self.label = OnscreenText(text="SHAKE MOUSE", shadow=(0, 0, 0, 1), fg=(0.55, 0.7, 1.0, 1.0), pos=(0, -0.1, 0), parent=self.frame) taskMgr.add(self.__watchMouseMovement, 'BRWater-watchMouseMovement') taskMgr.add(self.__lowerPowerBar, 'BRWater-lowerPowerBar') mw = base.mouseWatcherNode if mw.hasMouse(): self.lastMouseX = mw.getMouseX() def __lowerPowerBar(self, task): if self.powerBar['value'] <= 0: self.powerBar.update(0) decrement = 1 self.powerBar.update(self.powerBar['value'] - decrement) task.delayTime = 0.1 return task.again def __watchMouseMovement(self, task): if self.powerBar['value'] >= self.powerBar['range']: self.fsm.request('coolDown', [1]) return task.done mw = base.mouseWatcherNode if mw.hasMouse(): if not self.lastMouseX or self.lastMouseX != mw.getMouseX(): value = (abs(self.lastMouseX - mw.getMouseX()) * globalClock.getDt()) / 0.001 self.lastMouseX = mw.getMouseX() self.powerBar.update(self.powerBar['value'] + abs(value)) return task.cont def exitFrozen(self): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.iccsIval.pause() del self.iccsIval self.unloadIceCube() taskMgr.remove('BRWater-lowerPowerBar') taskMgr.remove('BRWater-watchMouseMovement') self.label.destroy() del self.label self.powerBar.destroy() del self.powerBar self.frame.destroy() del self.frame del self.lastMouseX base.cr.playGame.getPlace().fsm.request('walk') base.localAvatar.b_setAnimState('neutral') def enterCoolDown(self, fromFrozen=0): if fromFrozen: self.loadIceCube() base.playSfx(self.iceBreakSfx) self.iceCube.setColorScale(0.76, 0.76, 1.0, 1.0) self.iccdIval = LerpColorScaleInterval( self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 0.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccdIval.start() length = 1.0 base.playSfx(choice(self.coolSfxArray)) self.cdcsIval = Sequence( LerpColorScaleInterval( base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(1.0, 1.0, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'off')) self.cdcsIval.start() def exitCoolDown(self): if hasattr(self, 'iccdIval'): self.iccdIval.pause() del self.iccdIval self.unloadIceCube() self.cdcsIval.pause() del self.cdcsIval def cleanup(self): self.fsm.requestFinalState() self.playground.stopWaterWatch() del self.fsm del self.freezeUpSfx del self.frozenSfxArray del self.coolSfxArray del self.playground
def doHide(self): Sequence(LerpColorScaleInterval(self, 1.0, (1, 1, 1, 0), (1, 1, 1, 0.75), override = 1), Func(self.hide)).start()
def showQuitConfirmation(self): LerpColorScaleInterval(self.background2d, .5, Vec4(.6, .1, .1, 1), startColorScale=Vec4(1, 1, 1, 1)).start() self.quitConfirmation.showConf()
def __getPileFadeAwayInterval(self, mound): return LerpColorScaleInterval(mound, duration=FADE_SHOVEL_TIME / 2.0, colorScale=NO_COLOR, blendType='easeOut')
def enterFreezeUp(self): length = 1.0 base.playSfx(self.freezeUpSfx) self.fucsIval = Sequence(LerpColorScaleInterval(base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(0.5, 0.5, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'frozen')) self.fucsIval.start() self.playground.startWaterWatch(0)
def start(self): base.transitions.fadeOut(t=0) self.setColorScale(Vec4(1, 1, 1, 1)) if self.fadeTrack is not None: self.fadeTrack.finish() self.fadeTrack = None self.fadeTrack = base.transitions.getFadeInIval(t=2) self.fadeTrack.start() if self.logoScaleTrack is not None: self.logoScaleTrack.finish() self.logoScaleTrack = None self.logoScaleTrack = Sequence( LerpScaleInterval(self.logo, 2, Vec3(1.1, 1, 0.55), Vec3(1, 1, 0.5), blendType='easeInOut'), LerpScaleInterval(self.logo, 2, Vec3(1, 1, 0.5), Vec3(1.1, 1, 0.55), blendType='easeInOut')) if self.logoPosTrack is not None: self.logoPosTrack.finish() self.logoPosTrack = None self.logoPosTrack = Sequence( LerpPosInterval(self.logo, 2, Point3(0, 0, -0.85), Point3(0, 0, -0.7), blendType='easeOut'), Func(self.logoScaleTrack.loop)) self.logoPosTrack.start() if self.labelColorScaleTrack is not None: self.labelColorScaleTrack.finish() self.labelColorScaleTrack = None self.labelColorScaleTrack = Sequence( LerpColorScaleInterval(self.label, 1, Vec4(1, 1, 1, 0.6), Vec4(1, 1, 1, 1)), LerpColorScaleInterval(self.label, 1, Vec4(1, 1, 1, 1), Vec4(1, 1, 1, 0.6))) if self.labelPosTrack is not None: self.labelPosTrack.finish() self.labelPosTrack = None self.labelPosTrack = Sequence( LerpPosInterval(self.label, 2, Point3(0, 0, 0.35), Point3(0, 0, 0.15), blendType='easeOut'), Func(self.labelColorScaleTrack.loop)) self.labelPosTrack.start() self.acceptOnce('mouse1', self.begin)
def doShow(self): Sequence(Func(self.show), LerpColorScaleInterval(self, 1.0, (1, 1, 1, 0.75), (1, 1, 1, 0), override = 1)).start()
def getDropIval(self, x, y, dropObjName, generation, num): objType = PartyGlobals.Name2DropObjectType[dropObjName] id = (generation, num) dropNode = hidden.attachNewNode('catchDropNode%s' % (id,)) dropNode.setPos(x, y, 0) shadow = self.dropShadow.copyTo(dropNode) shadow.setZ(PartyGlobals.CatchDropShadowHeight) shadow.setColor(1, 1, 1, 1) object = self.getObjModel(dropObjName) object.reparentTo(hidden) if dropObjName in ['watermelon', 'anvil']: objH = object.getH() absDelta = {'watermelon': 12, 'anvil': 15}[dropObjName] delta = (self.randomNumGen.random() * 2.0 - 1.0) * absDelta newH = objH + delta else: newH = self.randomNumGen.random() * 360.0 object.setH(newH) sphereName = 'FallObj%s' % (id,) radius = self.ObjRadius if objType.good: radius *= lerp(1.0, 1.3, 0.5) collSphere = CollisionSphere(0, 0, 0, radius) collSphere.setTangible(0) collNode = CollisionNode(sphereName) collNode.setCollideMask(PartyGlobals.CatchActivityBitmask) collNode.addSolid(collSphere) collNodePath = object.attachNewNode(collNode) collNodePath.hide() if self.ShowObjSpheres: collNodePath.show() catchEventName = 'ltCatch' + sphereName def eatCollEntry(forward, collEntry): forward() self.accept(catchEventName, Functor(eatCollEntry, Functor(self.__handleCatch, id[0], id[1]))) def cleanup(self = self, dropNode = dropNode, id = id, event = catchEventName): self.ignore(event) dropNode.removeNode() duration = objType.fallDuration onscreenDuration = objType.onscreenDuration targetShadowScale = 0.3 if self.trickShadows: intermedScale = targetShadowScale * (self.OffscreenTime / self.BaselineDropDuration) shadowScaleIval = Sequence(LerpScaleInterval(shadow, self.OffscreenTime, intermedScale, startScale=0)) shadowScaleIval.append(LerpScaleInterval(shadow, duration - self.OffscreenTime, targetShadowScale, startScale=intermedScale)) else: shadowScaleIval = LerpScaleInterval(shadow, duration, targetShadowScale, startScale=0) targetShadowAlpha = 0.4 shadowAlphaIval = LerpColorScaleInterval(shadow, self.OffscreenTime, Point4(1, 1, 1, targetShadowAlpha), startColorScale=Point4(1, 1, 1, 0)) shadowIval = Parallel(shadowScaleIval, shadowAlphaIval) if self.useGravity: def setObjPos(t, objType = objType, object = object): z = objType.trajectory.calcZ(t) object.setZ(z) setObjPos(0) dropIval = LerpFunctionInterval(setObjPos, fromData=0, toData=onscreenDuration, duration=onscreenDuration) else: startPos = Point3(0, 0, self.MinOffscreenHeight) object.setPos(startPos) dropIval = LerpPosInterval(object, onscreenDuration, Point3(0, 0, 0), startPos=startPos, blendType='easeIn') ival = Sequence(Func(Functor(dropNode.reparentTo, self.root)), Parallel(Sequence(WaitInterval(self.OffscreenTime), Func(Functor(object.reparentTo, dropNode)), dropIval), shadowIval), Func(cleanup), name='drop%s' % (id,)) if objType == PartyGlobals.Name2DropObjectType['anvil']: ival.append(Func(self.playAnvil)) return ival
def enterScoring(self): sortedByDistance = [] for avId in self.avIdList: np = self.getTireNp(avId) pos = np.getPos() pos.setZ(0) sortedByDistance.append((avId, pos.length())) def compareDistance(x, y): if x[1] - y[1] > 0: return 1 elif x[1] - y[1] < 0: return -1 else: return 0 sortedByDistance.sort(cmp=compareDistance) self.scoreMovie = Sequence() curScale = 0.01 curTime = 0 self.scoreCircle.setScale(0.01) self.scoreCircle.show() self.notify.debug('newScores = %s' % self.newScores) circleStartTime = 0 for index in xrange(len(sortedByDistance)): distance = sortedByDistance[index][1] avId = sortedByDistance[index][0] scorePanelIndex = self.avIdList.index(avId) time = (distance - curScale) / IceGameGlobals.ExpandFeetPerSec if time < 0: time = 0.01 scaleXY = distance + IceGameGlobals.TireRadius self.notify.debug('circleStartTime = %s' % circleStartTime) self.scoreMovie.append( Parallel( LerpScaleInterval(self.scoreCircle, time, Point3(scaleXY, scaleXY, 1.0)), SoundInterval(self.scoreCircleSound, duration=time, startTime=circleStartTime))) circleStartTime += time startScore = self.scorePanels[scorePanelIndex].getScore() destScore = self.newScores[scorePanelIndex] self.notify.debug('for avId %d, startScore=%d, newScores=%d' % (avId, startScore, destScore)) def increaseScores(t, scorePanelIndex=scorePanelIndex, startScore=startScore, destScore=destScore): oldScore = self.scorePanels[scorePanelIndex].getScore() diff = destScore - startScore newScore = int(startScore + diff * t) if newScore > oldScore: base.playSfx(self.countSound) self.scorePanels[scorePanelIndex].setScore(newScore) self.scores[scorePanelIndex] = newScore duration = (destScore - startScore) * IceGameGlobals.ScoreCountUpRate tireNp = self.tireDict[avId]['tireNodePath'] self.scoreMovie.append( Parallel( LerpFunctionInterval(increaseScores, duration), Sequence( LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 0, 0, 1)), LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 1, 1, 1)), LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 0, 0, 1)), LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 1, 1, 1)), LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 0, 0, 1)), LerpColorScaleInterval(tireNp, duration / 6.0, VBase4(1, 1, 1, 1))))) curScale += distance self.scoreMovie.append( Func(self.sendUpdate, 'reportScoringMovieDone', [])) self.scoreMovie.start()
class BRWater: notify = directNotify.newCategory('BRWater') def __init__(self, playground): self.playground = playground self.fsm = ClassicFSM('BRWater', [State('off', self.enterOff, self.exitOff), State('freezeUp', self.enterFreezeUp, self.exitFreezeUp), State('coolDown', self.enterCoolDown, self.exitCoolDown), State('frozen', self.enterFrozen, self.exitFrozen)], 'off', 'off') self.fsm.enterInitialState() self.freezeUpSfx = base.loadSfx('phase_8/audio/sfx/freeze_up.mp3') self.frozenSfxArray = [base.loadSfx('phase_8/audio/sfx/frozen_1.mp3'), base.loadSfx('phase_8/audio/sfx/frozen_2.mp3'), base.loadSfx('phase_8/audio/sfx/frozen_3.mp3')] self.coolSfxArray = [base.loadSfx('phase_8/audio/sfx/cool_down_1.mp3'), base.loadSfx('phase_8/audio/sfx/cool_down_2.mp3')] self.freezeUpSfx.setVolume(12) for sfx in self.frozenSfxArray: sfx.setVolume(12) for sfx in self.coolSfxArray: sfx.setVolume(12) def attachSound(self, sound): base.localAvatar.audio3d.attachSoundToObject(sound, base.localAvatar) def enterOff(self): self.playground.startWaterWatch() def exitOff(self): self.playground.stopWaterWatch() def loadIceCube(self): self.iceCube = loader.loadModel('phase_8/models/props/icecube.bam') for node in self.iceCube.findAllMatches('**/billboard*'): node.removeNode() for node in self.iceCube.findAllMatches('**/drop_shadow*'): node.removeNode() for node in self.iceCube.findAllMatches('**/prop_mailboxcollisions*'): node.removeNode() self.iceCube.reparentTo(base.localAvatar) self.iceCube.setScale(1.2, 1.0, base.localAvatar.getHeight() / 1.7) self.iceCube.setTransparency(1) self.iceCube.setColorScale(0.76, 0.76, 1.0, 0.0) def unloadIceCube(self): self.iceCube.removeNode() del self.iceCube def enterFreezeUp(self): length = 1.0 base.playSfx(self.freezeUpSfx) self.fucsIval = Sequence(LerpColorScaleInterval(base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(0.5, 0.5, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'frozen')) self.fucsIval.start() self.playground.startWaterWatch(0) def exitFreezeUp(self): self.fucsIval.pause() del self.fucsIval self.playground.stopWaterWatch() def enterFrozen(self): self.loadIceCube() base.cr.playGame.getPlace().fsm.request('stop', [0]) base.localAvatar.stop() base.playSfx(choice(self.frozenSfxArray)) self.iccsIval = LerpColorScaleInterval(self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 1.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccsIval.start() props = WindowProperties() props.setCursorHidden(True) base.win.requestProperties(props) self.frame = DirectFrame(pos=(0, 0, 0.7)) self.powerBar = DirectWaitBar(frameColor=(1, 1, 1, 1), range=100, value=0, scale=(0.4, 0.5, 0.25), parent=self.frame, barColor=(0.55, 0.7, 1.0, 1.0)) self.label = OnscreenText(text='SHAKE MOUSE', shadow=(0, 0, 0, 1), fg=(0.55, 0.7, 1.0, 1.0), pos=(0, -0.1, 0), parent=self.frame) taskMgr.add(self.__watchMouseMovement, 'BRWater-watchMouseMovement') taskMgr.add(self.__lowerPowerBar, 'BRWater-lowerPowerBar') mw = base.mouseWatcherNode if mw.hasMouse(): self.lastMouseX = mw.getMouseX() def __lowerPowerBar(self, task): if self.powerBar['value'] <= 0: self.powerBar.update(0) decrement = 1 self.powerBar.update(self.powerBar['value'] - decrement) task.delayTime = 0.1 return task.again def __watchMouseMovement(self, task): if self.powerBar['value'] >= self.powerBar['range']: self.fsm.request('coolDown', [1]) return task.done mw = base.mouseWatcherNode if mw.hasMouse(): if not self.lastMouseX or self.lastMouseX != mw.getMouseX(): value = 3 * self.lastMouseX - mw.getMouseX() self.lastMouseX = mw.getMouseX() self.powerBar.update(self.powerBar['value'] + abs(value)) return task.cont def exitFrozen(self): props = WindowProperties() props.setCursorHidden(False) base.win.requestProperties(props) self.iccsIval.pause() del self.iccsIval self.unloadIceCube() taskMgr.remove('BRWater-lowerPowerBar') taskMgr.remove('BRWater-watchMouseMovement') self.label.destroy() del self.label self.powerBar.destroy() del self.powerBar self.frame.destroy() del self.frame del self.lastMouseX base.cr.playGame.getPlace().fsm.request('walk') base.localAvatar.b_setAnimState('neutral') def enterCoolDown(self, fromFrozen = 0): if fromFrozen: self.loadIceCube() self.iceCube.setColorScale(0.76, 0.76, 1.0, 1.0) self.iccdIval = LerpColorScaleInterval(self.iceCube, duration=0.5, colorScale=VBase4(0.76, 0.76, 1.0, 0.0), startColorScale=self.iceCube.getColorScale(), blendType='easeInOut') self.iccdIval.start() length = 1.0 base.playSfx(choice(self.coolSfxArray)) self.cdcsIval = Sequence(LerpColorScaleInterval(base.localAvatar.getGeomNode(), duration=length, colorScale=VBase4(1.0, 1.0, 1.0, 1.0), startColorScale=base.localAvatar.getGeomNode().getColorScale(), blendType='easeOut'), Func(self.fsm.request, 'off')) self.cdcsIval.start() def exitCoolDown(self): if hasattr(self, 'iccdIval'): self.iccdIval.pause() del self.iccdIval self.unloadIceCube() self.cdcsIval.pause() del self.cdcsIval def cleanup(self): self.fsm.requestFinalState() self.playground.stopWaterWatch() del self.fsm del self.freezeUpSfx del self.frozenSfxArray del self.coolSfxArray del self.playground
def doCancelQuitFunc(self): LerpColorScaleInterval(self.background2d, 0.5, Vec4(1, 1, 1, 1), startColorScale=Vec4(0.6, 0.1, 0.1, 1)).start() self.buttonInAnimation() self.quitConfirmation.hideConf()
def getFadeInTrack(): fadeInTrack = LerpColorScaleInterval(self.nodePath, 0.5, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(0, 0, 0, 0), blendType='easeOut') return fadeInTrack
def hideOptions(self): self.optionsMgr.hideOptions(False) self.closeOptionsButton.hide() for button in self.allButtons: LerpColorScaleInterval(button, .15, Vec4(1, 1, 1, 1), Vec4(1, 1, 1, 0)).start()
def makeDictionaries(self, dnaStore): self.nodeDict = {} self.zoneDict = {} self.zoneVisDict = {} self.nodeList = [] self.fadeInDict = {} self.fadeOutDict = {} a1 = Vec4(1, 1, 1, 1) a0 = Vec4(1, 1, 1, 0) numVisGroups = dnaStore.getNumDNAVisGroupsAI() for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) visGroup = dnaStore.getDNAVisGroupAI(i) groupName = base.cr.hoodMgr.extractGroupName(groupFullName) zoneId = int(groupName) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) groupNode = self.geom.find('**/' + groupFullName) if groupNode.isEmpty(): continue else: if ':' in groupName: groupName = '%s%s' % (zoneId, groupName[groupName.index(':'):]) else: groupName = '%s' % zoneId groupNode.setName(groupName) CIGlobals.replaceDecalEffectsWithDepthOffsetAttrib(groupNode) #group all the flat walls block2flatwall = {} flatwalls = groupNode.findAllMatches("**/tb*:*_DNARoot;+s") for flatwall in flatwalls: if "toon_landmark" in flatwall.getName(): print "Skipping", flatwall.getName() continue if flatwall.hasTag("DNACode") and flatwall.hasMat(): continue block = int(flatwall.getName().split(":")[0][2:]) if not block2flatwall.has_key(block): block2flatwall[block] = groupNode.attachNewNode( ModelNode('toonBuildingsBlock' + str(block))) flatwall.wrtReparentTo(block2flatwall[block]) for node in block2flatwall.values(): for child in node.findAllMatches("**"): child.clearEffect(DecalEffect.getClassType()) child.clearTag("DNACode") child.clearTag("cam") CIGlobals.clearModelNodesBelow(node) node.flattenStrong() flattenGroup = groupNode.attachNewNode('optim') flattens = ['street*_DNARoot'] removes = ['interactive_prop*_DNARoot'] for remove in removes: for np in groupNode.findAllMatches("**/" + remove): np.removeNode() for flatten in flattens: for np in groupNode.findAllMatches("**/" + flatten): if np.hasTag("DNACode") and np.hasMat(): continue for child in np.findAllMatches("**"): child.clearEffect(DecalEffect.getClassType()) child.clearTag("DNACode") child.clearTag("cam") np.wrtReparentTo(flattenGroup) flattenGroup.clearModelNodes() flattenGroup.flattenStrong() CIGlobals.flattenModelNodes(groupNode) groupNode.flattenStrong() #groupNode.ls() self.nodeDict[zoneId] = [] self.nodeList.append(groupNode) self.zoneDict[zoneId] = groupNode visibles = [] for i in xrange(visGroup.getNumVisibles()): visibles.append(int(visGroup.get_visible(i))) visibles.append(ZoneUtil.getBranchZone(zoneId)) self.zoneVisDict[zoneId] = visibles fadeDuration = 0.5 self.fadeOutDict[groupNode] = Sequence( Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a0, startColorScale=a1), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), Func(groupNode.stash), Func(base.disablePhysicsNodes, groupNode), name='fadeZone-' + str(zoneId), autoPause=1) self.fadeInDict[groupNode] = Sequence( Func(base.enablePhysicsNodes, groupNode), Func(groupNode.unstash), Func(groupNode.setTransparency, 1), LerpColorScaleInterval(groupNode, fadeDuration, a1, startColorScale=a0), Func(groupNode.clearColorScale), Func(groupNode.clearTransparency), name='fadeZone-' + str(zoneId), autoPause=1) for i in xrange(numVisGroups): groupFullName = dnaStore.getDNAVisGroupName(i) zoneId = int(base.cr.hoodMgr.extractGroupName(groupFullName)) zoneId = ZoneUtil.getTrueZoneId(zoneId, self.zoneId) for j in xrange(dnaStore.getNumVisiblesInDNAVisGroup(i)): visName = dnaStore.getVisibleName(i, j) groupName = base.cr.hoodMgr.extractGroupName(visName) nextZoneId = int(groupName) nextZoneId = ZoneUtil.getTrueZoneId(nextZoneId, self.zoneId) visNode = self.zoneDict[nextZoneId] self.nodeDict[zoneId].append(visNode) self.hood.dnaStore.resetPlaceNodes() self.hood.dnaStore.resetDNAGroups() self.hood.dnaStore.resetDNAVisGroups() self.hood.dnaStore.resetDNAVisGroupsAI()
def __init__(self): DirectObject.__init__(self) base.cr.DMENU_SCREEN = self self.seq = None base.cr.avChoice = None self.allButtons = [] base.transitions.fadeOut(0) base.camera.setPosHpr(Point3(MAIN_POS), VBase3(MAIN_HPR)) base.transitions.getFadeInIval(1).start() if base.showDisclaimer: FeatureComingSoonDialog.FeatureComingSoonDialog( text=TTLocalizer.PopupAlphaDisclaimer) self.background2d = OnscreenImage( image='phase_3.5/maps/loading/toon.jpg', parent=render2d) self.background2d.setScale(render2d, Vec3(1)) self.background2d.setBin('background', 1) self.background2d.setTransparency(1) self.background2d.setColorScale(1, 1, 1, 1) self.background = loader.loadModel( 'phase_3.5/models/modules/tt_m_ara_int_toonhall') self.background.reparentTo(render) self.background.setPosHpr(-25, 0, 8.1, -95, 0, 0) self.surlee = Toon.Toon() self.surlee.setName('Doctor Surlee') self.surlee.setPickable(0) self.surlee.setPlayerType(CCNonPlayer) dna = ToonDNA.ToonDNA() dna.newToonFromProperties('pls', 'ls', 'l', 'm', 9, 0, 9, 9, 98, 27, 86, 27, 38, 27) self.surlee.setDNA(dna) self.surlee.loop('scientistGame') self.surlee.reparentTo(self.background) self.surlee.setPosHpr(13, 24, 0.025, -180, 0, 0) self.dimm = Toon.Toon() self.dimm.setName('Doctor Dimm') self.dimm.setPickable(0) self.dimm.setPlayerType(CCNonPlayer) dna = ToonDNA.ToonDNA() dna.newToonFromProperties('fll', 'ss', 's', 'm', 15, 0, 15, 15, 99, 27, 86, 27, 39, 27) self.dimm.setDNA(dna) self.dimm.loop('scientistGame') self.dimm.reparentTo(self.background) self.dimm.setPosHpr(16, 24, 0.025, -180, 0, 0) surleeHand = self.surlee.find('**/def_joint_right_hold') clipBoard = loader.loadModel( 'phase_4/models/props/tt_m_prp_acs_clipboard') surleeHandNode = surleeHand.attachNewNode('ClipBoard') clipBoard.instanceTo(surleeHandNode) surleeHandNode.setH(180) surleeHandNode.setScale(render, 1.0) surleeHandNode.setPos(0, 0, 0.1) dimmHand = self.dimm.find('**/def_joint_right_hold') sillyReader = loader.loadModel( 'phase_4/models/props/tt_m_prp_acs_sillyReader') dimHandNode = dimmHand.attachNewNode('SillyReader') sillyReader.instanceTo(dimHandNode) dimHandNode.setH(180) dimHandNode.setScale(render, 1.0) dimHandNode.setPos(0, 0, 0.1) self.sky = loader.loadModel('phase_3.5/models/props/TT_sky') SkyUtil.startCloudSky(self) base.camera.setPosHpr(MAIN_POS, MAIN_HPR) self.logo = OnscreenImage(image=GameLogo, scale=(.5, .5, .25)) self.logo.reparentTo(aspect2d) self.logo.setTransparency(TransparencyAttrib.MAlpha) scale = self.logo.getScale() self.logo.setPos(0, 0, .6) self.logo.setColorScale(Vec4(0, 0, 0, 0)) fadeInLogo = (LerpColorScaleInterval(self.logo, 1, Vec4(1, 1, 1, 1), Vec4(1, 1, 1, 0))).start() self.releaseNotesBox = None self.releaseNotesText = None self.createButtons() self.fadeOut = None self.optionsMgr = PickAToonOptions.NewPickAToonOptions() self.quitConfirmation = DMenuQuit.DMenuQuit() self.newsMgr = DMenuNewsManager.DMenuNewsManager() self.accept('doQuitGame', self.doQuitFunc) self.accept('doCancelQuitGame', self.doCancelQuitFunc) self.patNode = None # TT: We need these to run the Pick A Toon screen self.patAvList = base.cr.PAT_AVLIST self.patFSM = base.cr.PAT_LOGINFSM self.patDoneEvent = base.cr.PAT_DONEEVENT
def __makeAshEffect(suit): return Sequence( Func(suit.setColorScale, 0.3, 0.3, 0.3, 1.0), Wait(1.0), LerpColorScaleInterval(suit, 1.0, (1, 1, 1, 1), (0.3, 0.3, 0.3, 1.0), blendType='easeInOut'))
def __blink(self, task): blink = Sequence(LerpColorScaleInterval(self.suit, Globals.BlinkSpeed, VBase4(1.0, 1.0, 1.0, 1.0)), LerpColorScaleInterval(self.suit, Globals.BlinkSpeed, Globals.BlinkColor)) blink.start() return Task.again
def __init__(self): DirectObject.__init__(self) base.cr.DMENU_SCREEN = self self.seq = None self.isSeqPlaying = False # .isPlaying() doesnt want to work base.cr.avChoice = None fadeSequence = Sequence( Func(base.transitions.fadeOut, .001), Wait(.5), Func(base.transitions.fadeIn, .5), base.camera.posHprInterval(1, Point3(MAIN_POS), VBase3(MAIN_HPR), blendType = 'easeInOut')).start() if base.showDisclaimer: FeatureComingSoonDialog.FeatureComingSoonDialog(text = '\1textShadow\1Disclaimer:\2\nThis is an ALPHA build of Project Altis! Expect the server to restart a lot, and expect crashes and other bugs. Please report bugs to the team. Thanks, and enjoy Project Altis!') self.background2d = OnscreenImage(image = 'phase_3.5/maps/loading/toon.jpg', parent = aspect2d) self.background2d.setScale(2, 1, 1) self.background2d.setBin('background', 1) self.background2d.setTransparency(1) self.background2d.setColorScale(1, 1, 1, .2) self.background = loader.loadModel('phase_3.5/models/modules/tt_m_ara_int_toonhall') self.background.reparentTo(render) self.background.setPosHpr(-25, 0, 8.1, -95, 0, 0) ropes = loader.loadModel('phase_4/models/modules/tt_m_ara_int_ropes') ropes.reparentTo(self.background) self.sillyMeter = Actor.Actor('phase_4/models/props/tt_a_ara_ttc_sillyMeter_default', {'arrowTube': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_arrowFluid', 'phaseOne': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseOne', 'phaseTwo': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseTwo', 'phaseThree': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseThree', 'phaseFour': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFour', 'phaseFourToFive': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFourToFive', 'phaseFive': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFive'}) self.sillyMeter.reparentTo(self.background) self.sillyMeter.makeSubpart('arrow', ['uvj_progressBar*', 'def_springA']) self.sillyMeter.makeSubpart('meter', ['def_pivot'], ['uvj_progressBar*', 'def_springA']) self.audio3d = Audio3DManager.Audio3DManager(base.sfxManagerList[0], camera) self.phase3Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseThree.ogg') self.phase3Sfx.setLoop(True) self.arrowSfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterArrow.ogg') self.arrowSfx.setLoop(False) self.phase3Sfx.setVolume(0.2) self.arrowSfx.setVolume(0.2) self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName = 'arrow', constrainedLoop = 0, startFrame = 236, endFrame = 247), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName = 'arrow', duration = 604800, constrainedLoop = 1, startFrame = 247, endFrame = 276), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase1 = self.sillyMeter.find('**/stage1') self.smPhase1.show() self.smPhase2 = self.sillyMeter.find('**/stage2') self.smPhase2.hide() self.smPhase3 = self.sillyMeter.find('**/stage3') self.smPhase3.hide() self.smPhase4 = self.sillyMeter.find('**/stage4') self.smPhase4.hide() thermometerLocator = self.sillyMeter.findAllMatches('**/uvj_progressBar')[1] thermometerMesh = self.sillyMeter.find('**/tube') thermometerMesh.setTexProjector(thermometerMesh.findTextureStage('default'), thermometerLocator, self.sillyMeter) self.sillyMeter.loop('phaseOne', partName = 'meter') self.sillyMeter.setBlend(frameBlend = base.wantSmoothAnims) self.surlee = Toon.Toon() self.surlee.setName('Doctor Surlee') self.surlee.setPickable(0) self.surlee.setPlayerType(CCNonPlayer) dna = ToonDNA.ToonDNA() dna.newToonFromProperties('pls', 'ls', 'l', 'm', 9, 0, 9, 9, 98, 27, 86, 27, 38, 27) self.surlee.setDNA(dna) self.surlee.loop('scientistGame') self.surlee.reparentTo(self.background) self.surlee.setPosHpr(13, 24, 0.025, -180, 0, 0) self.dimm = Toon.Toon() self.dimm.setName('Doctor Dimm') self.dimm.setPickable(0) self.dimm.setPlayerType(CCNonPlayer) dna = ToonDNA.ToonDNA() dna.newToonFromProperties('fll', 'ss', 's', 'm', 15, 0, 15, 15, 99, 27, 86, 27, 39, 27) self.dimm.setDNA(dna) self.dimm.loop('scientistGame') self.dimm.reparentTo(self.background) self.dimm.setPosHpr(16, 24, 0.025, -180, 0, 0) surleeHand = self.surlee.find('**/def_joint_right_hold') clipBoard = loader.loadModel('phase_4/models/props/tt_m_prp_acs_clipboard') surleeHandNode = surleeHand.attachNewNode('ClipBoard') clipBoard.instanceTo(surleeHandNode) surleeHandNode.setH(180) surleeHandNode.setScale(render, 1.0) surleeHandNode.setPos(0, 0, 0.1) dimmHand = self.dimm.find('**/def_joint_right_hold') sillyReader = loader.loadModel('phase_4/models/props/tt_m_prp_acs_sillyReader') dimHandNode = dimmHand.attachNewNode('SillyReader') sillyReader.instanceTo(dimHandNode) dimHandNode.setH(180) dimHandNode.setScale(render, 1.0) dimHandNode.setPos(0, 0, 0.1) self.banana = self.background.find('**/gagBanana') self.bananaClicker = CollisionTraverser() # self.bananaClicker.showCollisions(render) self.collHandlerQueue = CollisionHandlerQueue() self.bananaRayNode = CollisionNode('bananaMouseRay') self.bananaRayNP = base.camera.attachNewNode(self.bananaRayNode) self.bananaRayNode.setIntoCollideMask(BitMask32.bit(0)) self.bananaRayNode.setFromCollideMask(BitMask32.bit(1)) self.banana.setCollideMask(BitMask32.bit(1)) self.ray = CollisionRay() self.bananaRayNode.addSolid(self.ray) self.bananaClicker.addCollider(self.bananaRayNP, self.collHandlerQueue) self.accept('mouse1', self.slipAndSlideOnThisBananaPeelHaHaHa) for frame in render.findAllMatches('*/doorFrame*'): frame.removeNode() self.sky = loader.loadModel('phase_3.5/models/props/TT_sky') SkyUtil.startCloudSky(self) base.camera.setPosHpr(MAIN_POS, MAIN_HPR) self.logo = OnscreenImage(image = GameLogo, scale = (.5, .5, .25)) self.logo.reparentTo(aspect2d) self.logo.setTransparency(TransparencyAttrib.MAlpha) scale = self.logo.getScale() self.logo.setPos(0, 0, .5) self.logo.setColorScale(Vec4(0, 0, 0, 0)) fadeInLogo = (LerpColorScaleInterval(self.logo, 1, Vec4(1, 1, 1, 1), Vec4(1, 1, 1, 0))).start() self.createButtons() self.fadeOut = None self.optionsMgr = PickAToonOptions.NewPickAToonOptions() self.quitConfirmation = DMenuQuit.DMenuQuit() self.accept('doQuitGame', self.doQuitFunc) self.accept('doCancelQuitGame', self.doCancelQuitFunc) self.patNode = None if DMENU_GAME == 'Toontown': # TT: We need these to run the Pick A Toon screen self.patAvList = base.cr.PAT_AVLIST self.patFSM = base.cr.PAT_LOGINFSM self.patDoneEvent = base.cr.PAT_DONEEVENT