Ejemplo n.º 1
0
    def __faceOff(self, ts, name, callback):
        elevatorPos = self.toons[0].getPos()
        if len(self.suits) == 1:
            leaderIndex = 0
        if self.bossBattle == 1:
            leaderIndex = 1
        maxTypeNum = -1
        for suit in self.suits:
            suitTypeNum = AvatarDNA.getSuitType(suit.dna.name)
            if maxTypeNum < suitTypeNum:
                maxTypeNum = suitTypeNum
                leaderIndex = self.suits.index(suit)

        delay = FACEOFF_TAUNT_T
        suitTracks = []
        suitLeader = None
        for suit in self.suits:
            suit.setState('Battle')
            suitIsLeader = 0
            suitIvals = []
            suitIvals.append(FunctionInterval(suit.loop,
                                              extraArgs=['neutral']))
            suitIvals.append(
                FunctionInterval(suit.headsUp, extraArgs=[elevatorPos]))
            if self.suits.index(suit) == leaderIndex:
                suitLeader = suit
                suitIsLeader = 1
                if self.bossBattle == 1:
                    taunt = Localizer.BattleBldgBossTaunt
                else:
                    taunt = SuitBattleGlobals.getFaceoffTaunt(
                        suit.getStyleName(), suit.doId)
                suitIvals.append(
                    FunctionInterval(suit.setChatAbsolute,
                                     extraArgs=[taunt, CFSpeech | CFTimeout]))
            destPos, destHpr = self.getActorPosHpr(suit, self.suits)
            suitIvals.append(WaitInterval(delay))
            if suitIsLeader == 1:
                suitIvals.append(FunctionInterval(suit.clearChat))
            suitIvals.append(self.createAdjustInterval(suit, destPos, destHpr))
            suitTracks.append(Track(suitIvals))

        suitTrack = Track([MultiTrack(suitTracks)])
        toonTracks = []
        for toon in self.toons:
            toonIvals = []
            destPos, destHpr = self.getActorPosHpr(toon, self.toons)
            toonIvals.append((delay,
                              self.createAdjustInterval(toon,
                                                        destPos,
                                                        destHpr,
                                                        toon=1,
                                                        run=1)))
            toonTracks.append(Track(toonIvals))

        toonTrack = Track([MultiTrack(toonTracks)])
        camIvals = []

        def setCamFov(fov):
            base.camLens.setFov(fov)

        camIvals.append(
            FunctionInterval(camera.wrtReparentTo, extraArgs=[suitLeader]))
        camIvals.append(FunctionInterval(setCamFov, extraArgs=[self.camFOFov]))
        suitHeight = suitLeader.getHeight()
        suitOffsetPnt = Point3(0, 0, suitHeight)
        MidTauntCamHeight = suitHeight * 0.66
        MidTauntCamHeightLim = suitHeight - 1.8
        if MidTauntCamHeight < MidTauntCamHeightLim:
            MidTauntCamHeight = MidTauntCamHeightLim
        TauntCamY = 18
        TauntCamX = 0
        TauntCamHeight = whrandom.choice((MidTauntCamHeight, 1, 11))
        camIvals.append(
            FunctionInterval(camera.setPos,
                             extraArgs=[TauntCamX, TauntCamY, TauntCamHeight]))
        camIvals.append(
            FunctionInterval(camera.lookAt,
                             extraArgs=[suitLeader, suitOffsetPnt]))
        camIvals.append(WaitInterval(delay))
        camPos = Point3(0, -6, 4)
        camHpr = Vec3(0, 0, 0)
        camIvals.append(
            FunctionInterval(camera.reparentTo,
                             extraArgs=[toonbase.localToon]))
        camIvals.append(
            FunctionInterval(setCamFov, extraArgs=[DefaultCameraFov]))
        camIvals.append(
            FunctionInterval(camera.setPosHpr, extraArgs=[camPos, camHpr]))
        camTrack = Track(camIvals)
        mtrack = MultiTrack([suitTrack, toonTrack, camTrack])
        done = FunctionInterval(callback)
        track = Track([mtrack, done], name)
        track.start(ts)
        self.activeIntervals[name] = track
        return