Exemple #1
0
    def startConclusion(self):
        DistributedPartyCatchActivity.notify.debug('startConclusion')
        for avId in self.toonIds:
            if avId in self.toonSDs:
                toonSD = self.toonSDs[avId]
                toonSD.fsm.request('notPlaying')

        self.destroyCatchCollisions()
        if base.localAvatar.doId not in self.toonIds:
            return
        else:
            self.localToonExiting()
        if self.fruitsCaught >= self.numFruits:
            finishText = TTLocalizer.PartyCatchActivityFinishPerfect
        else:
            finishText = TTLocalizer.PartyCatchActivityFinish
        perfectTextSubnode = hidden.attachNewNode(self.__genText(finishText))
        perfectText = hidden.attachNewNode('perfectText')
        perfectTextSubnode.reparentTo(perfectText)
        frame = self.__textGen.getCardActual()
        offsetY = -abs(frame[2] + frame[3]) / 2.0
        perfectTextSubnode.setPos(0, 0, offsetY)
        perfectText.setColor(1, 0.1, 0.1, 1)

        def fadeFunc(t, text=perfectText):
            text.setColorScale(1, 1, 1, t)

        def destroyText(text=perfectText):
            text.removeNode()

        textTrack = Sequence(
            Func(perfectText.reparentTo, aspect2d),
            Parallel(
                LerpScaleInterval(perfectText,
                                  duration=0.5,
                                  scale=0.3,
                                  startScale=0.0),
                LerpFunctionInterval(fadeFunc,
                                     fromData=0.0,
                                     toData=1.0,
                                     duration=0.5)), Wait(2.0),
            Parallel(
                LerpScaleInterval(perfectText, duration=0.5, scale=1.0),
                LerpFunctionInterval(fadeFunc,
                                     fromData=1.0,
                                     toData=0.0,
                                     duration=0.5,
                                     blendType='easeIn')), Func(destroyText),
            WaitInterval(0.5))
        soundTrack = SoundInterval(self.sndPerfect)
        self.finishIval = Parallel(textTrack, soundTrack)
        self.finishIval.start()
Exemple #2
0
 def turnDown(self, doInterval=DoIntervalDefault):
     self.faceUp = 0
     if doInterval:
         self.clearFlipIval()
         self.flipIval = Parallel(
             LerpHprInterval(self, self.FlipTime, Vec3(0, 0, 180)),
             SoundInterval(self.turnDownSound,
                           node=self,
                           listenerNode=base.localAvatar,
                           cutOff=240))
         self.flipIval.start()
     else:
         self.setR(180)
Exemple #3
0
    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')
Exemple #4
0
 def buildTracks(self, mode=0):
     if not self.avatar:
         return
     self.cleanupTracks()
     if mode == 0:
         self.actorTrack = Sequence(
             self.getAnimationTrack(self.buttonAnim,
                                    startFrame=self.hitStartFrame,
                                    endFrame=self.completeFrame,
                                    playRate=self.playRate))
         self.soundTrack = Sequence(
             Wait(self.buttonHold),
             SoundInterval(self.buttonSfx, node=self.avatar))
Exemple #5
0
 def setEntityState(self, state):
     DistributedEntity.setEntityState(self, state)
     self.clearSequence()
     if state == self.StateEmpty:
         self.setColorScale(0.5, 0.5, 0.5, 1.0)
         self.playSound('empty')
         self.stopSound('start')
         self.stopSound('giveLaff')
     elif state == self.StateAvailable:
         self.setColorScale(1, 1, 1, 1)
     elif state == self.StateGiving:
         self.setSequence(
             Sequence(
                 SoundInterval(self.getSound('start'),
                               duration=self.getSound('start').length() /
                               2.0),
                 Func(
                     self.setSequence,
                     SoundInterval(
                         self.getSound('giveLaff'),
                         duration=self.getSound('giveLaff').length() / 4.0),
                     True)))
 def getFlyBallSplatInterval(self, x, y, z, flyBallCode, throwerId):
     from toontown.toonbase import ToontownBattleGlobals
     from toontown.battle import BattleProps
     splatName = 'dust'
     splat = BattleProps.globalPropPool.getProp(splatName)
     splat.setBillboardPointWorld(2)
     color = ToontownGlobals.PieCodeColors.get(flyBallCode)
     if color:
         splat.setColor(*color)
     if flyBallCode == ToontownGlobals.PieCodeBossCog:
         self.notify.debug('changing color to %s' % self.ballColor)
         splat.setColor(self.ballColor)
     sound = loader.loadSfx('phase_11/audio/sfx/LB_evidence_miss.ogg')
     vol = 1.0
     if flyBallCode == ToontownGlobals.PieCodeBossCog:
         sound = loader.loadSfx('phase_4/audio/sfx/Golf_Hit_Barrier_1.ogg')
     soundIval = SoundInterval(sound, node=splat, volume=vol)
     if flyBallCode == ToontownGlobals.PieCodeBossCog and localAvatar.doId == throwerId:
         vol = 1.0
         soundIval = SoundInterval(sound, node=localAvatar, volume=vol)
     ival = Parallel(Func(splat.reparentTo, render), Func(splat.setPos, x, y, z), soundIval, Sequence(ActorInterval(splat, splatName), Func(splat.detachNode)))
     return ival
 def enterFlyAway(self, ts=0, doFadeOut=0):
     self.show()
     if not self.propeller:
         self.generatePropeller()
     sfx = self.propellerSounds['out']
     if hasattr(self, 'uniqueName'):
         name = self.uniqueName('enterFlyAway')
     else:
         name = 'enterFlyAway'
     dur = self.getDuration('land')
     actInt = ActorInterval(self,
                            'land',
                            loop=0,
                            startTime=dur,
                            endTime=0.0)
     lastSpinFrame = 8
     propDur = self.propeller.getDuration('chan')
     fr = self.propeller.getFrameRate('chan')
     spinTime = lastSpinFrame / fr
     openTime = (lastSpinFrame + 1) / fr
     propTrack = Parallel(
         SoundInterval(sfx, node=self),
         Sequence(
             Func(self.propeller.show),
             ActorInterval(self.propeller,
                           'chan',
                           endTime=openTime,
                           startTime=propDur),
             ActorInterval(self.propeller,
                           'chan',
                           constrainedLoop=1,
                           duration=propDur - openTime,
                           startTime=spinTime,
                           endTime=0.0)))
     self.suitTrack = Parallel(actInt,
                               propTrack,
                               name=self.taskName('trackName'))
     if doFadeOut:
         fadeOut = Sequence(
             Wait(4.0), Func(self.setTransparency, 1),
             self.colorScaleInterval(1,
                                     colorScale=VBase4(1, 1, 1, 0),
                                     startColorScale=VBase4(1, 1, 1, 1)),
             Func(self.clearColorScale), Func(self.clearTransparency),
             Func(self.reparentTo, hidden))
         self.suitTrack.append(fadeOut)
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.exitFlyAway)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self, name)
     self.suitTrack.start(ts)
     self.disableRay()
Exemple #8
0
    def createDinerMoveIval(self, suit, destPos, chairInfo):
        dur = suit.getDuration('landing')
        fr = suit.getFrameRate('landing')
        landingDur = dur
        totalDur = 7.2999999999999998
        animTimeInAir = totalDur - dur
        flyingDur = animTimeInAir
        impactLength = dur - animTimeInAir
        tableIndex = chairInfo[0]
        chairIndex = chairInfo[1]
        table = self.bossCog.tables[tableIndex]
        chairLocator = table.chairLocators[chairIndex]
        chairPos = chairLocator.getPos(self)
        chairHpr = chairLocator.getHpr(self)
        suit.setPos(chairPos)
        table.setDinerStatus(chairIndex, table.HIDDEN)
        suit.setHpr(chairHpr)
        wayPoint = (chairPos + destPos) / 2.0
        wayPoint.setZ(wayPoint.getZ() + 20)
        moveIval = Sequence(
            Func(suit.headsUp, self), Func(suit.pose, 'landing', 0),
            ProjectileInterval(suit,
                               duration=flyingDur,
                               startPos=chairPos,
                               endPos=destPos,
                               gravityMult=0.25),
            ActorInterval(suit, 'landing'))
        if suit.prop == None:
            suit.prop = BattleProps.globalPropPool.getProp('propeller')

        propDur = suit.prop.getDuration('propeller')
        lastSpinFrame = 8
        fr = suit.prop.getFrameRate('propeller')
        spinTime = lastSpinFrame / fr
        openTime = (lastSpinFrame + 1) / fr
        suit.attachPropeller()
        propTrack = Parallel(
            SoundInterval(suit.propInSound, duration=flyingDur, node=suit),
            Sequence(
                ActorInterval(suit.prop,
                              'propeller',
                              constrainedLoop=1,
                              duration=flyingDur + 1,
                              startTime=0.0,
                              endTime=spinTime),
                ActorInterval(suit.prop,
                              'propeller',
                              duration=landingDur,
                              startTime=openTime), Func(suit.detachPropeller)))
        result = Parallel(moveIval, propTrack)
        return result
    def showResults(self):
        if not self.gameIsEnding:
            self.gameIsEnding = True
            for barrel in self.barrels:
                barrel.wrtReparentTo(render)

            for key in self.cogInfo:
                thief = self.cogInfo[key]['suit']
                thief.suit.setPos(100, 0, 0)
                thief.suit.hide()

            self.__killRewardCountdown()
            self.stopGameWalk()
            numBarrelsSaved = len(self.barrels) - len(self.stolenBarrels)
            resultStr = ''
            if numBarrelsSaved == len(self.barrels):
                resultStr = TTLocalizer.CogThiefPerfect
            elif numBarrelsSaved > 1:
                resultStr = TTLocalizer.CogThiefBarrelsSaved % {'num': numBarrelsSaved}
            elif numBarrelsSaved == 1:
                resultStr = TTLocalizer.CogThiefBarrelSaved % {'num': numBarrelsSaved}
            else:
                resultStr = TTLocalizer.CogThiefNoBarrelsSaved
            perfectTextSubnode = hidden.attachNewNode(self.__genText(resultStr))
            perfectText = hidden.attachNewNode('perfectText')
            perfectTextSubnode.reparentTo(perfectText)
            frame = self.__textGen.getCardActual()
            offsetY = -abs(frame[2] + frame[3]) / 2.0
            perfectTextSubnode.setPos(0, 0, offsetY)
            perfectText.setColor(1, 0.1, 0.1, 1)

            def fadeFunc(t, text = perfectText):
                text.setColorScale(1, 1, 1, t)

            def destroyText(text = perfectText):
                text.removeNode()

            def safeGameOver(self = self):
                if not self.frameworkFSM.isInternalStateInFlux():
                    self.gameOver()

            textTrack = Sequence(Func(perfectText.reparentTo, aspect2d), Parallel(LerpScaleInterval(perfectText, duration=0.5, scale=0.3, startScale=0.0), LerpFunctionInterval(fadeFunc, fromData=0.0, toData=1.0, duration=0.5)), Wait(2.0), Parallel(LerpScaleInterval(perfectText, duration=0.5, scale=1.0), LerpFunctionInterval(fadeFunc, fromData=1.0, toData=0.0, duration=0.5, blendType='easeIn')), Func(destroyText), WaitInterval(0.5), Func(safeGameOver))
            if numBarrelsSaved == len(self.barrels):
                soundTrack = SoundInterval(self.sndPerfect)
            else:
                soundTrack = Sequence()
            self.resultIval = Parallel(textTrack, soundTrack)
            self.resultIval.start()
            #For the Alpha Blueprint ARG
            if config.GetBool('want-blueprint4-ARG', False):
                MinigameGlobals.generateDebugARGPhrase()
Exemple #10
0
 def loadAssets(self):
     self.beltModel = NodePath('beltModel')
     self.beltModel.reparentTo(self.boss.geom)
     self.startLocator = self.boss.geom.find('**/conveyer_belt_start_%d' %
                                             (self.index + 1))
     self.endLocator = self.boss.geom.find('**/conveyer_belt_end_%d' %
                                           (self.index + 1))
     center = (self.startLocator.getPos() + self.endLocator.getPos()) / 2.0
     self.beltHeight = center.getZ()
     self.beltHeight += 0.1
     center.setZ(0)
     self.beltLength = (self.endLocator.getPos() -
                        self.startLocator.getPos()).length()
     self.distBetweenFoodNodes = self.beltLength / self.NumFoodNodes
     self.notify.debug('setting beltModelPos to %s' % center)
     self.beltModel.setPos(center)
     self.setupFoodNodes()
     self.setupFoodIvals()
     self.setupToonupIvals()
     if self.index == 0:
         self.beltActorModel = loader.loadModel(
             'phase_12/models/bossbotHQ/food_belt1_model')
     else:
         self.beltActorModel = loader.loadModel(
             'phase_12/models/bossbotHQ/food_belt2_model')
     if self.beltActorModel:
         self.beltActor = Actor.Actor(self.beltActorModel)
         if self.index == 0:
             self.beltActor.loadAnims(
                 {'idle': 'phase_12/models/bossbotHQ/food_belt1'})
         else:
             self.beltActor.loadAnims(
                 {'idle': 'phase_12/models/bossbotHQ/food_belt2'})
         self.beltActor.setBlend(
             frameBlend=config.GetBool('interpolate-animations', True))
         self.beltActor.reparentTo(render)
         self.beltActor.setPlayRate(self.BeltActorPlayRate, 'idle')
         mesh = self.beltActor.find('**/mesh_tide1')
         joint = self.beltActor.find('**/uvj_WakeWhiteTide1')
         mesh.setTexProjector(mesh.findTextureStage('default'), joint,
                              self.beltActor)
         self.beltActor.setPos(self.startLocator.getPos())
     self.beltSound = base.loader.loadSfx(
         'phase_12/audio/sfx/CHQ_FACT_conveyor_belt.ogg')
     self.beltSound.setLoop(1)
     self.beltSoundInterval = SoundInterval(self.beltSound,
                                            node=self.beltModel,
                                            listenerNode=base.localAvatar,
                                            seamlessLoop=True,
                                            volume=0.25,
                                            cutOff=100)
Exemple #11
0
    def enterDie(self, ts = 0):
        self.show()
        self.clearStunnedIval()
        self.generateCog(isLose = 1)
        self.nametag.clearChatText()
        self.deleteNameTag()
        self.deathSound = base.audio3d.loadSfx("phase_3.5/audio/sfx/Cog_Death_Full.ogg")
        base.audio3d.attachSoundToObject(self.deathSound, self)
        trackName = self.uniqueName('enterDie')

        smallGears = ParticleLoader.loadParticleEffect('phase_3.5/etc/gearExplosionSmall.ptf')
        smallGears.getParticlesNamed('particles-1').setPoolSize(30)
        smallGears.setShaderOff(1)

        singleGear = ParticleLoader.loadParticleEffect('phase_3.5/etc/gearExplosion.ptf')
        singleGear.getParticlesNamed('particles-1').setPoolSize(1)
        singleGear.setShaderOff(1)

        smallGearExplosion = ParticleLoader.loadParticleEffect('phase_3.5/etc/gearExplosion.ptf')
        smallGearExplosion.getParticlesNamed('particles-1').setPoolSize(10)
        smallGearExplosion.setShaderOff(1)

        bigGearExplosion = ParticleLoader.loadParticleEffect('phase_3.5/etc/gearExplosionBig.ptf')
        bigGearExplosion.getParticlesNamed('particles-1').setPoolSize(30)
        bigGearExplosion.setShaderOff(1)

        smallGears.setDepthWrite(False)
        smallGears.hide(CIGlobals.ShadowCameraBitmask)
        singleGear.setDepthWrite(False)
        singleGear.hide(CIGlobals.ShadowCameraBitmask)
        smallGearExplosion.setDepthWrite(False)
        smallGearExplosion.hide(CIGlobals.ShadowCameraBitmask)
        bigGearExplosion.setDepthWrite(False)
        bigGearExplosion.hide(CIGlobals.ShadowCameraBitmask)

        self.smallGears = smallGears
        self.smallGears.setPos(self.find('**/joint_head').getPos() + (0,0, 2))
        self.singleGear = singleGear
        self.smallGearExp = smallGearExplosion
        self.bigGearExp = bigGearExplosion

        gearTrack = Sequence(Wait(0.7), Func(self.doSingleGear), Wait(1.5), Func(self.doSmallGears), Wait(3.0), Func(self.doBigExp))
        self.suitTrack = Parallel(Sequence(Wait(0.8), SoundInterval(self.deathSound, duration = 4.28)),
                Sequence(Wait(0.7), Func(self.doSingleGear), Wait(4.5),
                Func(self.suitExplode), Wait(1.0), Func(self.disableBodyCollisions)), gearTrack,
                Sequence(ActorInterval(self, 'lose', duration = 6), Func(self.getGeomNode().hide)), name = trackName)
        self.suitTrack.setDoneEvent(self.suitTrack.getName())
        self.acceptOnce(self.suitTrack.getName(), self.exitDie)
        if self.isDistributed():
            self.suitTrack.delayDelete = DelayDelete.DelayDelete(self, trackName)
        self.suitTrack.start(ts)
    def start(self):
        SoundGag.start(self)
        tracks = Parallel()
        INSTRUMENT_SCALE_MODIFIER = 0.5
        instrMin = Vec3(0.001, 0.001, 0.001)
        instrMax1 = Vec3(0.3, 0.4, 0.2)
        instrMax1 *= INSTRUMENT_SCALE_MODIFIER
        instrMax2 = Vec3(0.3, 0.3, 0.3)
        instrMax2 *= INSTRUMENT_SCALE_MODIFIER
        instrStretch1 = Vec3(0.3, 0.5, 0.25)
        instrStretch1 *= INSTRUMENT_SCALE_MODIFIER
        instrStretch2 = Vec3(0.3, 0.7, 0.3)
        instrStretch2 *= INSTRUMENT_SCALE_MODIFIER

        def setInstrumentStats():
            self.gag.setPos(-0.6, -0.9, 0.15)
            self.gag.setHpr(145, 0, 85)
            self.gag.setScale(instrMin)

        megaphoneShow = Sequence(Func(self.placeProp, self.handJoint, self.megaphone), Func(self.placeProp, self.handJoint, self.gag), Func(setInstrumentStats))
        grow1 = self.getScaleIntervals(self.gag, duration=0.3, startScale=instrMin, endScale=instrMax1)
        grow2 = self.getScaleIntervals(self.gag, duration=0.3, startScale=instrMax1, endScale=instrMax2)
        instrumentAppear = Parallel(Sequence(grow1, grow2))
        stretchInstr1 = self.getScaleBlendIntervals(self.gag, duration=0.1, startScale=instrMax2, endScale=instrStretch1, blendType='easeOut')
        stretchInstr2 = self.getScaleBlendIntervals(self.gag, duration=0.1, startScale=instrStretch1, endScale=instrStretch2, blendType='easeOut')
        stretchInstr = Sequence(stretchInstr1, stretchInstr2)
        backInstr = self.getScaleBlendIntervals(self.gag, duration=0.1, startScale=instrStretch2, endScale=instrMax2, blendType='easeOut')
        attackTrack = Sequence(stretchInstr, Wait(1), backInstr)
        delayTime = 2.45
        delayUntilAppearSound = 1.0
        megaphoneTrack = Sequence(megaphoneShow, Wait(delayUntilAppearSound), SoundInterval(self.appearSfx, node=self.avatar), Wait(delayTime + 1.0), instrumentAppear)
        tracks.append(megaphoneTrack)
        tracks.append(ActorInterval(self.avatar, 'sound'))
        instrumentshrink = self.getScaleIntervals(self.gag, duration=0.1, startScale=instrMax2, endScale=instrMin)
        soundTrack = Sequence(Wait(delayTime), Parallel(attackTrack, SoundInterval(self.soundSfx, node=self.avatar), Sequence(Wait(1.5), instrumentshrink), Func(self.damageCogsNearby), Wait(0.4), Func(self.finish)))
        tracks.append(soundTrack)
        tracks.start()
        self.tracks = tracks
Exemple #13
0
 def __getShovelAppearInterval(self, shovel, avatar):
     # Must pass the shovel and the avatar using the shovel.
     return Parallel(
         Sequence(
             Func(shovel.reparentTo,
                  avatar.find('**/def_joint_right_hold')),
             ShowInterval(shovel),
             SoundInterval(self.shovelAppearSfx, node=avatar,
                           duration=1.0)),
         LerpScaleInterval(shovel,
                           duration=SHOVEL_APPEAR_TIME,
                           scale=(1.0, 1.0, 1.0),
                           startScale=0.01,
                           blendType='easeOut'))
 def fireWater(self, origin, target):
     color = VBase4(0.75, 0.75, 1, 0.8)
     dScaleUp = 0.1
     dHold = 0.3
     dScaleDown = 0.1
     horizScale = 0.1
     vertScale = 0.1
     sprayTrack = self.getSprayTrack(color, origin, target, dScaleUp, dHold, dScaleDown, horizScale, vertScale)
     duration = self.squirtSfx.length()
     if sprayTrack.getDuration() < duration:
         duration = sprayTrack.getDuration()
     soundTrack = SoundInterval(self.squirtSfx, node=self.waterPitcherModel, duration=duration)
     self.fireTrack = Parallel(sprayTrack, soundTrack)
     self.fireTrack.start()
Exemple #15
0
    def onSetAction(self, action):
        self.model.show()
        self.model.setPos(self.ModelOrigin)
        self.model.setHpr(self.ModelAngles)
        self.model.setLightOff()

        self.avatar.doingActivity = False

        if action == self.StateAttack:
            self.avatar.doingActivity = True

            joint = self.model.find('**/joint_toSpray')

            def positionAndOrientSpray():
                self.sprayMdl.setPos(joint.getPos(render))
                self.sprayMdl.setHpr(joint.getHpr(render))

            self.setAnimTrack(Parallel(
                self.getAnimationTrack('watercooler', fullBody=False),
                Sequence(
                    Wait(1.01), Func(self.model.show),
                    LerpScaleInterval(self.model, 0.5,
                                      Point3(1.15, 1.15, 1.15)), Wait(1.6),
                    Func(self.sprayMdl.show),
                    Func(self.sprayMdl.reparentTo, render),
                    Func(positionAndOrientSpray),
                    LerpScaleInterval(self.sprayMdl,
                                      duration=0.3,
                                      scale=(1.0, 15.0, 1.0),
                                      startScale=(1.0, 1.0, 1.0)),
                    Func(self.sprayMdl.hide),
                    Func(self.sprayMdl.reparentTo, hidden)),
                Sequence(Wait(1.1),
                         SoundInterval(self.coolerAppearSfx, duration=1.4722),
                         Wait(0.4),
                         SoundInterval(self.sprayOnlySfx, duration=2.313))),
                              startNow=True)
Exemple #16
0
 def enterShoot(self, target=None):
     if not target:
         target = base.localAvatar
     self.pose("collapse", 1)
     self.shootTrack = Sequence(
         Parallel(
             Sequence(
                 LerpFunc(self.blendAnimFromBase,
                          fromData=0,
                          toData=1,
                          duration=0.25,
                          extraArgs=['collapse']),
                 ActorInterval(self,
                               "collapse",
                               startFrame=1,
                               endFrame=5,
                               playRate=0.8),
                 ActorInterval(self,
                               "collapse",
                               startFrame=5,
                               endFrame=22,
                               playRate=0.7),
                 ActorInterval(self,
                               "collapse",
                               startFrame=22,
                               endFrame=5,
                               playRate=0.7),
                 LerpFunc(self.blendAnimFromBase,
                          fromData=1,
                          toData=0,
                          duration=0.25,
                          extraArgs=['collapse'])),
             Sequence(Wait(0.1), SoundInterval(self.whipSound, node=self)),
             Sequence(Wait(0.55), SoundInterval(self.shootSound,
                                                node=self)),
             Sequence(Wait(0.635), Func(self.fireLaser, target))))
     self.shootTrack.start()
Exemple #17
0
    def loadAssets(self):
        """Load and setup the assets for the food belt."""
        # later on this will become a loadModel call
        self.beltModel = NodePath('beltModel')
        self.beltModel.reparentTo(self.boss.geom)
        self.startLocator = self.boss.geom.find(
            '**/conveyer_belt_start_%d' % (self.index+1))
        self.endLocator = self.boss.geom.find('**/conveyer_belt_end_%d' % (self.index+1))
        center = (self.startLocator.getPos() + self.endLocator.getPos())/2.0
        self.beltHeight = center.getZ()
        self.beltHeight += 0.1
        center.setZ(0)
        self.beltLength = (self.endLocator.getPos() - self.startLocator.getPos()).length()
        self.distBetweenFoodNodes = self.beltLength / self.NumFoodNodes
        self.notify.debug('setting beltModelPos to %s' % center)
        self.beltModel.setPos(center)
        self.setupFoodNodes()
        self.setupFoodIvals()
        self.setupToonupIvals()
        if self.index == 0:
            self.beltActorModel = loader.loadModel("phase_12/models/bossbotHQ/food_belt1_model")
        else:
            self.beltActorModel = loader.loadModel("phase_12/models/bossbotHQ/food_belt2_model")

        if (self.beltActorModel):
            self.beltActor = Actor.Actor(self.beltActorModel)
            if self.index == 0:
                self.beltActor.loadAnims({'idle': "phase_12/models/bossbotHQ/food_belt1"})
            else:
                self.beltActor.loadAnims({'idle': "phase_12/models/bossbotHQ/food_belt2"})
            self.beltActor.reparentTo(render)
            # adjust this number as necessary to match up with the food intervals
            self.beltActor.setPlayRate(self.BeltActorPlayRate, 'idle')
            #self.beltActor.loop('idle')

            # 1st uv animation

            mesh = self.beltActor.find('**/mesh_tide1')
            joint = self.beltActor.find('**/uvj_WakeWhiteTide1')
            mesh.setTexProjector(mesh.findTextureStage('default'), joint, self.beltActor)
            self.beltActor.setPos(self.startLocator.getPos())

        self.beltSound = base.loader.loadSfx("phase_12/audio/sfx/CHQ_FACT_conveyor_belt.wav")
        self.beltSound.setLoop(1)
        self.beltSoundInterval = SoundInterval(self.beltSound, node=self.beltModel,
                                           listenerNode = base.localAvatar,
                                           seamlessLoop = True,
                                           volume = 0.25,
                                           cutOff = 100)
Exemple #18
0
 def exitDoorEnterOpening(self, ts):
     bldgActor = self.getBuildingActor()
     leftDoor = bldgActor.controlJoint(None, 'modelRoot', 'def_left_door')
     if self.leftSwing:
         h = -100
     else:
         h = 100
     if not leftDoor.isEmpty():
         otherNP = self.getDoorNodePath()
         trackName = 'doorDoorExitTrack-%d' % self.doId
         self.finishDoorExitTrack()
         self.doorExitTrack = Parallel(SoundInterval(self.openSfx, node=leftDoor), Sequence(LerpHprInterval(nodePath=leftDoor, duration=0.6, hpr=VBase3(h, 0, 0), startHpr=VBase3(0, 0, 0), blendType='easeInOut')), name=trackName)
         self.doorExitTrack.start(ts)
     else:
         self.notify.warning('exitDoorEnterOpening(): did not find leftDoor')
Exemple #19
0
def emitSound(soundPath, pos, volume=1.0, other=None):
    if isinstance(soundPath, list) or isinstance(soundPath, tuple):
        if len(soundPath) == 0:
            return
        import random
        soundPath = random.choice(soundPath)
    from direct.interval.IntervalGlobal import Sequence, SoundInterval, Func
    if not other:
        other = render
    soundNode = render.attachNewNode("sound")
    soundNode.setPos(other, pos)
    sound = base.loadSfxOnNode(soundPath, soundNode)
    Sequence(SoundInterval(sound, volume=volume),
             Func(base.audio3d.detachSound, sound),
             Func(soundNode.removeNode)).start()
Exemple #20
0
 def enterWestToEast(self, ts=0):
     moPath = Mopath.Mopath()
     moPath.loadFile(self.westEast)
     moIval = MopathInterval(moPath, self.boat)
     self.track = Parallel(
         SoundInterval(self.soundShipBell, node=self.boat),
         SoundInterval(self.soundDockCreak, node=self.westPier), moIval,
         LerpQuatInterval(self.westPier,
                          duration=5.0,
                          quat=(-90, self.pierDownP, 0),
                          startHpr=(-90, self.pierUpP, 0)),
         Sequence(
             Wait(15.0),
             Parallel(
                 LerpQuatInterval(self.eastPier,
                                  duration=5.0,
                                  quat=(90, self.pierUpP, 0),
                                  startHpr=(90, self.pierDownP, 0)),
                 Sequence(
                     Wait(2.0),
                     SoundInterval(self.soundDockCreak,
                                   node=self.eastPier))),
             SoundInterval(self.soundFogHorn, node=self.boat)))
     self.track.start(ts)
Exemple #21
0
 def enterOpening(self, ts):
     bldgActor = self.getBuildingActor()
     rightDoor = bldgActor.controlJoint(None, 'modelRoot', 'def_right_door')
     if rightDoor.isEmpty():
         self.notify.warning('enterOpening(): did not find rightDoor')
         return
     otherNP = self.getDoorNodePath()
     trackName = 'doorOpen-%d' % self.doId
     if self.rightSwing:
         h = 100
     else:
         h = -100
     self.finishDoorTrack()
     self.doorTrack = Parallel(SoundInterval(self.openSfx, node=rightDoor), Sequence(HprInterval(rightDoor, VBase3(0, 0, 0)), Wait(0.4), LerpHprInterval(nodePath=rightDoor, duration=0.6, hpr=VBase3(h, 0, 0), startHpr=VBase3(0, 0, 0), blendType='easeInOut')), name=trackName)
     self.doorTrack.start(ts)
 def buildTracks(self):
     if not self.avatar:
         return
     self.cleanupTracks()
     self.actorTrack = Sequence(
         ActorInterval(self.avatar,
                       self.buttonAnim,
                       startFrame=self.chooseLocFrame,
                       endFrame=self.completeFrame,
                       playRate=self.playRate))
     self.soundTrack = Sequence(
         Wait(self.buttonHold),
         SoundInterval(self.buttonSfx, node=self.avatar))
     self.actorTrack.start()
     self.soundTrack.start()
 def enterLeftDoorOpening(self, ts=0):
     if self.leftTrack:
         self.leftTrack.finish()
         self.leftTrack = None
     self.leftTrack = Sequence(
         Wait(0.5),
         Parallel(
             Func(self.toggleDoorHole, 'left', True),
             LerpQuatInterval(self.leftDoor,
                              duration=0.7,
                              quat=(self.getLeftDoorOpenH(), 0, 0),
                              startHpr=(self.getLeftDoorClosedH(), 0, 0),
                              blendType='easeInOut'),
             SoundInterval(self.doorOpenSound, node=self.leftDoor)))
     self.leftTrack.start()
    def onCollision(self, entry):
        if not self.gag:
            return
        intoNP = entry.getIntoNodePath()
        avNP = intoNP.getParent()
        hitCog = False
        self.fallSoundInterval.pause()
        self.fallSoundInterval = None
        shrinkTrack = Sequence()
        if self.avatar.doId == base.localAvatar.doId:
            for key in base.cr.doId2do.keys():
                obj = base.cr.doId2do[key]
                if obj.__class__.__name__ in CIGlobals.SuitClasses:
                    if obj.getKey() == avNP.getKey():
                        obj.sendUpdate('hitByGag', [self.getID()])
                        self.avatar.b_trapActivate(self.getID(),
                                                   self.avatar.doId, 0,
                                                   obj.doId)
                        hitCog = True

        gagObj = self.gag
        if hitCog:
            SoundInterval(self.hitSfx, node=self.gag).start()
            shrinkTrack.append(Wait(0.5))
        else:
            SoundInterval(self.missSfx, node=self.gag).start()
        shrinkTrack.append(Wait(0.25))
        shrinkTrack.append(
            LerpScaleInterval(self.gag,
                              0.3,
                              Point3(0.01, 0.01, 0.01),
                              startScale=self.gag.getScale()))
        shrinkTrack.append(Func(gagObj.removeNode))
        shrinkTrack.append(Func(self.cleanupGag))
        shrinkTrack.start()
        return
Exemple #25
0
 def showGrab(self):
     self.nodePath.hide()
     self.collNodePath.hide()
     self.collNode.setIntoCollideMask(BitMask32(0))
     if self.penalty:
         self.track = Parallel(
             SoundInterval(self.penaltyGrabSound),
             Sequence(
                 Func(self.kaboom.showThrough),
                 LerpScaleInterval(self.kaboom,
                                   duration=0.5,
                                   scale=Point3(10, 10, 10),
                                   blendType='easeOut'),
                 Func(self.kaboom.hide)))
         self.track.start()
 def loadAssets(self):
     self.tableGroup = loader.loadModel('phase_12/models/bossbotHQ/BanquetTableChairs')
     tableLocator = self.boss.geom.find('**/TableLocator_%d' % (self.index + 1))
     if tableLocator.isEmpty():
         self.tableGroup.reparentTo(render)
         self.tableGroup.setPos(0, 75, 0)
     else:
         self.tableGroup.reparentTo(tableLocator)
     self.tableGeom = self.tableGroup.find('**/Geometry')
     self.setupDiners()
     self.setupChairCols()
     self.squirtSfx = loader.loadSfx('phase_4/audio/sfx/AA_squirt_seltzer_miss.ogg')
     self.hitBossSfx = loader.loadSfx('phase_5/audio/sfx/SA_watercooler_spray_only.ogg')
     self.hitBossSoundInterval = SoundInterval(self.hitBossSfx, node=self.boss, volume=1.0)
     self.serveFoodSfx = loader.loadSfx('phase_4/audio/sfx/MG_sfx_travel_game_bell_for_trolley.ogg')
     self.pitcherMoveSfx = base.loader.loadSfx('phase_4/audio/sfx/MG_cannon_adjust.ogg')
    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 showSplat(self):
     if self.kaboomTrack and self.kaboomTrack.isPlaying():
         self.kaboomTrack.finish()
     self.splat.reparentTo(render)
     self.splat.setPos(self.suit.getPos())
     self.splat.setZ(3)
     self.kaboomTrack = Parallel(
         SoundInterval(self.pieHitSound, volume=1.0),
         Sequence(
             Func(self.splat.showThrough),
             LerpScaleInterval(self.splat,
                               duration=0.5,
                               scale=1.75,
                               startScale=Point3(0.1, 0.1, 0.1),
                               blendType='easeOut'), Func(self.splat.hide)))
     self.kaboomTrack.start()
Exemple #29
0
 def startEntity(self):
     if self.entityTrack:
         self.entityTrack.pause()
         self.entityTrack = None
     if self.getLocation():
         x, y, z = self.getLocation()
         self.gag.setPos(x, y, z - 0.45)
     if not self.gag:
         self.build()
     self.gag.setScale(GagGlobals.PNT3NEAR0)
     self.gag.reparentTo(render)
     LerpScaleInterval(self.gag, 1.2, Point3(1.7, 1.7, 1.7)).start()
     track = Sequence(Wait(0.7))
     if self.isSafeLocation(self.gag):
         self.entities.append(self.gag)
         # Let's suck the closest suit into our trap.
         suits = []
         for obj in base.cr.doId2do.values():
             if obj.__class__.__name__ == "DistributedSuit":
                 if obj.getPlace() == base.localAvatar.zoneId:
                     suits.append(obj)
         nearestCog = self.getClosestObject(self.gag, suits)
         suits = []
         if nearestCog and nearestCog.getDistance(
                 self.gag) <= self.minSafeDistance:
             self.onActivate(self.gag, nearestCog)
         else:
             track.append(
                 SoundInterval(self.hitSfx, duration=0.5, node=self.gag))
             base.taskMgr.doMethodLater(self.lifeTime,
                                        self.__clearEntity,
                                        'Clear Entity',
                                        extraArgs=[self.gag],
                                        appendTask=True)
             self.gag = None
     else:
         # We're too close to another trap, let's clear them out.
         self.cleanupGag()
         for ent in [
                 self.gag,
                 self.getClosestObject(self.gag, self.entities)
         ]:
             if ent:
                 self.__doDustClear(ent)
     track.append(Func(self.completeTrap))
     track.start()
     self.entityTrack = track
 def serveFood(self, food, chairIndex):
     self.removeFoodModel(chairIndex)
     serviceLoc = self.serviceLocs.get(chairIndex)
     if not food or food.isEmpty():
         foodModel = loader.loadModel('phase_12/models/bossbotHQ/canoffood')
         foodModel.setScale(ToontownGlobals.BossbotFoodModelScale)
         foodModel.reparentTo(serviceLoc)
     else:
         food.wrtReparentTo(serviceLoc)
         tray = food.find('**/tray')
         if not tray.isEmpty():
             tray.hide()
         ivalDuration = 1.5
         foodMoveIval = Parallel(SoundInterval(self.serveFoodSfx, node=food), ProjectileInterval(food, duration=ivalDuration, startPos=food.getPos(serviceLoc), endPos=serviceLoc.getPos(serviceLoc)), LerpHprInterval(food, ivalDuration, Point3(0, -360, 0)))
         intervalName = 'serveFood-%d-%d' % (self.index, chairIndex)
         foodMoveIval.start()
         self.activeIntervals[intervalName] = foodMoveIval