def doAttack(self, ts=0):
     self.loadAttack()
     if hasattr(self.suit, 'uniqueName'):
         name = self.suit.uniqueName('doHangupAttack')
     else:
         name = 'doHangupAttack'
     if self.suit.type == 'A':
         delay2playSound = 1.0
         delayAfterSoundToPlaceDownReceiver = 0.2
         delayAfterShootToIgnoreCollisions = 1.0
         delay2PickUpReceiver = 1.0
         receiverInHandPos = Point3(-0.5, 0.5, -1)
     else:
         if self.suit.type == 'B':
             delay2playSound = 1.5
             delayAfterSoundToPlaceDownReceiver = 0.7
             delayAfterShootToIgnoreCollisions = 1.0
             delay2PickUpReceiver = 1.5
             receiverInHandPos = Point3(-0.3, 0.5, -0.8)
         else:
             if self.suit.type == 'C':
                 delay2playSound = 1.0
                 delayAfterSoundToPlaceDownReceiver = 1.15
                 delayAfterShootToIgnoreCollisions = 1.0
                 delay2PickUpReceiver = 1.5
                 receiverInHandPos = Point3(-0.3, 0.5, -0.8)
     self.suitTrack = Parallel(name=name)
     self.suitTrack.append(ActorInterval(self.suit, 'phone'))
     self.suitTrack.append(Sequence(Wait(delay2playSound), SoundInterval(self.phoneSfx, duration=2.1), Wait(delayAfterSoundToPlaceDownReceiver), Func(self.receiver.setPos, 0, 0, 0), Func(self.receiver.setH, 0.0), Func(self.receiver.reparentTo, self.phone), Func(self.acceptOnce, 'enter' + self.collNP.node().getName(), self.handleCollision), Func(self.shootOut), Parallel(SoundInterval(self.hangupSfx), Sequence(Wait(delayAfterShootToIgnoreCollisions), Func(self.ignore, 'enter' + self.collNP.node().getName())))))
     self.suitTrack.append(Sequence(Func(self.phone.reparentTo, self.suit.find('**/joint_Lhold')), Func(self.cord.reparentTo, render), Wait(delay2PickUpReceiver), Func(self.receiver.reparentTo, self.suit.find('**/joint_Rhold')), Func(self.receiver.setPos, receiverInHandPos), Func(self.receiver.setH, 270.0)))
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.finishedAttack)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self.suit, name)
     self.suitTrack.start(ts)
 def enterTeleportOut(self, ts=0, callback=None, extraArgs=[]):
     self.notify.info(
         str(self.doId) + '-' + str(self.zoneId) + ': enterTeleportOut')
     self.playingAnim = 'tele'
     self.portal1 = Actor(
         'phase_3.5/models/props/portal-mod.bam',
         {'chan': 'phase_3.5/models/props/portal-chan.bam'})
     self.portal1.play('chan')
     self.portal1.reparentTo(
         self.getPart('legs').find('**/def_joint_right_hold'))
     self.play('tele')
     if hasattr(self, 'uniqueName'):
         name = self.uniqueName('enterTeleportOut')
     else:
         name = 'enterTeleportOut'
     self.track = Sequence(Wait(0.4),
                           Func(self.teleportOutSfx),
                           Wait(1.3),
                           Func(self.throwPortal),
                           Wait(3.4),
                           name=name)
     self.track.delayDelete = DelayDelete.DelayDelete(self, name)
     self.track.setDoneEvent(self.track.getName())
     self.acceptOnce(self.track.getName(), self.teleportOutDone,
                     [callback, extraArgs])
     self.track.start(ts)
示例#3
0
    def getVictoryRunTrack(self):
        origPosTrack = Sequence()
        delayDeletes = []
        i = 0
        for victor in self.victorList:
            if victor != 0 and victor in self.cr.doId2do:
                toon = self.cr.doId2do[victor]
                delayDeletes.append(DelayDelete.DelayDelete(toon, 'getVictoryRunTrack'))
                toon.stopSmooth()
                toon.setParent(CIGlobals.SPHidden)
                origPosTrack.append(Func(toon.setPosHpr, self.elevatorNodePath, apply(Point3, ElevatorPoints[i]), Point3(180, 0, 0)))
                origPosTrack.append(Func(toon.setParent, CIGlobals.SPRender))
            i += 1

        openDoors = getOpenInterval(self, self.leftDoor, self.rightDoor, self.openSfx, None)
        toonDoorPosHpr = self.cr.playGame.dnaStore.getDoorPosHprFromBlockNumber(self.block)
        useFarExitPoints = toonDoorPosHpr.getPos(render).getZ() > 1.0
        runOutAll = Parallel()
        i = 0
        for victor in self.victorList:
            if victor != 0 and victor in self.cr.doId2do:
                toon = self.cr.doId2do[victor]
                p0 = Point3(0, 0, 0)
                p1 = Point3(ElevatorPoints[i][0], ElevatorPoints[i][1] - 5.0, ElevatorPoints[i][2])
                if useFarExitPoints:
                    p2 = Point3(ElevatorOutPointsFar[i][0], ElevatorOutPointsFar[i][1], ElevatorOutPointsFar[i][2])
                else:
                    p2 = Point3(ElevatorOutPoints[i][0], ElevatorOutPoints[i][1], ElevatorOutPoints[i][2])
                runOutSingle = Sequence(Func(toon.animFSM.request, 'run'), LerpPosInterval(toon, TOON_VICTORY_EXIT_TIME * 0.25, p1, other=self.elevatorNodePath), Func(toon.headsUp, self.elevatorNodePath, p2), LerpPosInterval(toon, TOON_VICTORY_EXIT_TIME * 0.5, p2, other=self.elevatorNodePath), LerpHprInterval(toon, TOON_VICTORY_EXIT_TIME * 0.25, Point3(0, 0, 0), other=self.elevatorNodePath), Func(toon.animFSM.request, 'neutral'), Func(toon.startSmooth))
                runOutAll.append(runOutSingle)
            i += 1

        victoryRunTrack = Sequence(origPosTrack, openDoors, runOutAll)
        return (
         victoryRunTrack, delayDeletes)
 def enterFlyDown(self, ts=0):
     self.disableRay()
     if not self.propeller:
         self.generatePropeller()
     sfx = self.propellerSounds['in']
     base.playSfx(sfx, node=self)
     groundF = 28
     dur = self.getDuration('land')
     fr = self.getFrameRate('land')
     if fr:
         animTimeInAir = groundF / fr
     else:
         animTimeInAir = groundF
     impactLength = dur - animTimeInAir
     timeTillLanding = 6.5 - impactLength
     waitTime = timeTillLanding - animTimeInAir
     lastSpinFrame = 8
     propDur = self.propeller.getDuration('chan')
     fr = self.propeller.getFrameRate('chan')
     spinTime = lastSpinFrame / fr
     openTime = (lastSpinFrame + 1) / fr
     if hasattr(self, 'uniqueName'):
         name = self.uniqueName('enterFlyDown')
     else:
         name = 'enterFlyDown'
     animTrack = Sequence(Func(self.pose, 'land', 0), Wait(waitTime),
                          ActorInterval(self, 'land', duration=dur))
     propTrack = Parallel(
         SoundInterval(sfx, duration=waitTime + dur, node=self),
         Sequence(
             ActorInterval(self.propeller,
                           'chan',
                           constrainedLoop=1,
                           duration=waitTime + spinTime,
                           startTime=0.0,
                           endTime=spinTime),
             ActorInterval(self.propeller,
                           'chan',
                           duration=propDur - openTime,
                           startTime=openTime)))
     self.suitTrack = Parallel(animTrack,
                               propTrack,
                               name=self.taskName('flyDown'))
     if not self.hasSpawned:
         self.show()
         fadeInTrack = Sequence(
             Func(self.setTransparency, 1),
             self.colorScaleInterval(1,
                                     colorScale=VBase4(1, 1, 1, 1),
                                     startColorScale=VBase4(1, 1, 1, 0)),
             Func(self.clearColorScale), Func(self.clearTransparency))
         self.hasSpawned = True
         self.suitTrack.append(fadeInTrack)
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.exitFlyDown)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self, name)
     self.suitTrack.start(ts)
 def enterDie(self, ts=0):
     self.show()
     self.generateCog(isLose=1)
     self.nametag.clearChatText()
     self.deleteNameTag()
     deathSound = base.audio3d.loadSfx(
         'phase_3.5/audio/sfx/Cog_Death_Full.ogg')
     base.audio3d.attachSoundToObject(deathSound, self)
     trackName = self.uniqueName('enterDie')
     smallGears = ParticleLoader.loadParticleEffect(
         'phase_3.5/etc/gearExplosionSmall.ptf')
     smallGears.getParticlesNamed('particles-1').setPoolSize(30)
     singleGear = ParticleLoader.loadParticleEffect(
         'phase_3.5/etc/gearExplosion.ptf')
     singleGear.getParticlesNamed('particles-1').setPoolSize(1)
     smallGearExplosion = ParticleLoader.loadParticleEffect(
         'phase_3.5/etc/gearExplosion.ptf')
     smallGearExplosion.getParticlesNamed('particles-1').setPoolSize(10)
     bigGearExplosion = ParticleLoader.loadParticleEffect(
         'phase_3.5/etc/gearExplosionBig.ptf')
     bigGearExplosion.getParticlesNamed('particles-1').setPoolSize(30)
     smallGears.setDepthWrite(False)
     singleGear.setDepthWrite(False)
     smallGearExplosion.setDepthWrite(False)
     bigGearExplosion.setDepthWrite(False)
     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(deathSound,
                       node=self,
                       duration=deathSound.length() / 2)),
                               Sequence(Wait(0.7), Func(self.doSingleGear),
                                        Wait(4.3), Func(self.suitExplode),
                                        Wait(1.0),
                                        Func(self.disableBodyCollisions),
                                        Func(self.__cleanupExplosion)),
                               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)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self, trackName)
     self.suitTrack.start(ts)
     del deathSound
 def doAttack(self, ts=0):
     self.loadAttack()
     if hasattr(self.suit, 'uniqueName'):
         name = self.suit.uniqueName('doFountainPenAttack')
     else:
         name = 'doFountainPenAttack'
     self.suitTrack = Parallel(name=name)
     self.suitTrack.append(ActorInterval(self.suit, 'fountainpen'))
     self.suitTrack.append(Sequence(Wait(1.2), Func(self.acceptOnce, 'enter' + self.wsnp.node().getName(), self.handleSprayCollision), Func(self.playWeaponSound), Func(self.attachSpray), Func(self.sprayParticle.start, self.pen.find('**/joint_toSpray'), self.pen.find('**/joint_toSpray')), self.sprayScaleIval, Wait(0.5), Func(self.sprayParticle.cleanup), Func(self.spray.setScale, 1), Func(self.spray.reparentTo, hidden), Func(self.ignore, 'enter' + self.wsnp.node().getName())))
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.finishedAttack)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self.suit, name)
     self.suitTrack.start(ts)
 def doAttack(self, ts=0):
     self.dollar = loader.loadModel('phase_5/models/props/1dollar-bill-mod.bam')
     self.dollar.setY(0.22)
     self.dollar.setHpr(289.18, 252.75, 0.0)
     if hasattr(self.suit, 'uniqueName'):
         name = self.suit.uniqueName('doPickPocketAttack')
     else:
         name = 'doPickPocketAttack'
     self.suitTrack = Parallel(ActorInterval(self.suit, 'pickpocket'), Sequence(Wait(0.4), Func(self.attemptDamage)), name=name)
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.finishedAttack)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self.suit, name)
     self.suitTrack.start(ts)
 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()
 def enterTeleportIn(self, ts=0, callback=None, extraArgs=[]):
     self.playingAnim = 'happy'
     self.portal2 = Actor(
         'phase_3.5/models/props/portal-mod.bam',
         {'chan': 'phase_3.5/models/props/portal-chan.bam'})
     self.show()
     self.getGeomNode().hide()
     self.nametag3d.hide()
     self.track = self.getTeleportInTrack(self.portal2)
     self.track.setDoneEvent(self.track.getName())
     self.acceptOnce(self.track.getName(), self.teleportInDone,
                     [callback, extraArgs])
     self.track.delayDelete = DelayDelete.DelayDelete(
         self, self.track.getName())
     self.track.start(ts)
 def enterDied(self, ts=0, callback=None, extraArgs=[]):
     self.playingAnim = 'lose'
     self.isdying = True
     self.play('lose')
     self.track = Sequence(Wait(2.2),
                           Func(self.dieSfx),
                           Wait(2.8),
                           self.getGeomNode().scaleInterval(
                               2,
                               Point3(0.01),
                               startScale=self.getGeomNode().getScale()),
                           Func(self.delToon),
                           name=self.uniqueName('enterDied'))
     self.track.setDoneEvent(self.track.getName())
     self.acceptOnce(self.track.getDoneEvent(), self.diedDone,
                     [callback, extraArgs])
     self.track.delayDelete = DelayDelete.DelayDelete(
         self, 'enterTeleportOut')
     self.track.start(ts)
 def doAttack(self, weapon_path, weapon_scale, track_name, animation_name, collsphere_radius, weapon_coll_id, weapon_h=0, weapon_p=0, weapon_r=0, weapon_x=0, weapon_y=0, weapon_z=0, ts=0):
     self.weapon_state = 'start'
     if hasattr(self.suit, 'uniqueName'):
         track_name = self.suit.uniqueName(track_name)
         weapon_coll_id = self.suit.uniqueName(weapon_coll_id)
     self.weapon = loader.loadModel(weapon_path)
     self.weapon.setScale(weapon_scale)
     self.weapon.setHpr(weapon_h, weapon_p, weapon_r)
     self.weapon.setPos(weapon_x, weapon_y, weapon_z)
     self.wss = CollisionSphere(0, 0, 0, collsphere_radius)
     self.wss.setTangible(0)
     self.targetX = self.attacksClass.target.getX(render)
     self.targetY = self.attacksClass.target.getY(render)
     self.targetZ = self.attacksClass.target.getZ(render)
     self.suitTrack = Sequence(name=track_name)
     if self.attack not in ('glowerpower', ):
         self.weapon.reparentTo(self.suit.find('**/joint_Rhold'))
         self.suitTrack.append(Wait(1.2))
         self.suitTrack.append(Func(self.suit.setPlayRate, 1.0, animation_name))
         if self.suit.type == 'C':
             self.suitTrack.append(Wait(0))
         else:
             self.suitTrack.append(Wait(0.7))
         self.suit.setPlayRate(2.0, animation_name)
         self.suitTrack.append(Func(self.throwObject))
         self.suitTrack.append(Wait(1.0))
         self.suitTrack.append(Func(self.delWeapon))
     else:
         self.suitTrack.append(Wait(1))
         self.suitTrack.append(Func(self.throwObject))
         self.suitTrack.append(Wait(0.5))
         self.suitTrack.append(Func(self.delWeapon))
     self.suit.play(animation_name)
     wsnode = CollisionNode(weapon_coll_id)
     wsnode.addSolid(self.wss)
     wsnode.setCollideMask(CIGlobals.WallBitmask)
     self.wsnp = self.weapon.attachNewNode(wsnode)
     self.suitTrack.setDoneEvent(self.suitTrack.getName())
     self.acceptOnce(self.suitTrack.getDoneEvent(), self.finishedAttack)
     self.suitTrack.delayDelete = DelayDelete.DelayDelete(self.suit, track_name)
     self.suitTrack.start(ts)
 def enterSquish(self, ts=0, callback=None, extraArgs=[]):
     self.playingAnim = 'squish'
     sound = loader.loadSfx('phase_9/audio/sfx/toon_decompress.ogg')
     lerpTime = 0.1
     node = self.getGeomNode().getChild(0)
     origScale = node.getScale()
     if hasattr(self, 'uniqueName'):
         name = self.uniqueName('getSquished')
     else:
         name = 'getSquished'
     self.track = Sequence(LerpScaleInterval(node,
                                             lerpTime,
                                             VBase3(2, 2, 0.025),
                                             blendType='easeInOut'),
                           Wait(1.0),
                           Parallel(
                               Sequence(
                                   Wait(0.4),
                                   LerpScaleInterval(node,
                                                     lerpTime,
                                                     VBase3(1.4, 1.4, 1.4),
                                                     blendType='easeInOut'),
                                   LerpScaleInterval(node,
                                                     lerpTime / 2.0,
                                                     VBase3(0.8, 0.8, 0.8),
                                                     blendType='easeInOut'),
                                   LerpScaleInterval(
                                       node,
                                       lerpTime / 3.0,
                                       origScale,
                                       blendType='easeInOut')),
                               ActorInterval(self, 'happy', startTime=0.2),
                               SoundInterval(sound)),
                           name=name)
     self.track.setDoneEvent(self.track.getName())
     self.acceptOnce(self.track.getDoneEvent(), self.squishDone,
                     [callback, extraArgs])
     self.track.delayDelete = DelayDelete.DelayDelete(self, name)
     self.track.start(ts)