def doToonVictory(localToonActive, toons, rewardDicts, deathList, rpanel):
    tracks = []
    if localToonActive == 1:
        tracks.append(Func(rpanel.show))
        tracks.append(Func(NametagGlobals.setOnscreenChatForced, 1))
    
    camTracks = []
    endTracks = []
    danceSound = globalBattleSoundCache.getSound('ENC_Win.mp3')
    for t in toons:
        rdict = __findToonReward(rewardDicts, t)
        expTrack = rpanel.getExpTrack(t, rdict['origExp'], rdict['earnedExp'], deathList, rdict['items'], rdict['missedItems'], toons)
        if expTrack:
            tracks.append(expTrack)
            camDuration = expTrack.getDuration()
            camExpTrack = MovieCamera.chooseRewardShot(t, camDuration)
            camTracks.append(MovieCamera.chooseRewardShot(t, camDuration))
        
    
    if localToonActive == 1:
        tracks.append(Func(rpanel.hide))
        tracks.append(Func(NametagGlobals.setOnscreenChatForced, 0))
    
    tracks = tracks + endTracks
    seq = Sequence(tracks)
    seqdur = seq.getDuration()
    print 'dance duration: ', seqdur
    soundTrack = SoundInterval(danceSound, duration = seqdur, loop = 1)
    mtrack = Parallel(Sequence(tracks), soundTrack)
    camTrack = Track(camTracks)
    return (mtrack, camTrack)
def doToonVictory(localToonActive, toons, rewardDicts, deathList, rpanel):
    tracks = []
    if localToonActive == 1:
        tracks.append(Func(rpanel.show))
        tracks.append(Func(NametagGlobals.setOnscreenChatForced, 1))

    camTracks = []
    endTracks = []
    danceSound = globalBattleSoundCache.getSound('ENC_Win.mp3')
    for t in toons:
        rdict = __findToonReward(rewardDicts, t)
        expTrack = rpanel.getExpTrack(t, rdict['origExp'], rdict['earnedExp'],
                                      deathList, rdict['items'],
                                      rdict['missedItems'], toons)
        if expTrack:
            tracks.append(expTrack)
            camDuration = expTrack.getDuration()
            camExpTrack = MovieCamera.chooseRewardShot(t, camDuration)
            camTracks.append(MovieCamera.chooseRewardShot(t, camDuration))

    if localToonActive == 1:
        tracks.append(Func(rpanel.hide))
        tracks.append(Func(NametagGlobals.setOnscreenChatForced, 0))

    tracks = tracks + endTracks
    seq = Sequence(tracks)
    seqdur = seq.getDuration()
    print 'dance duration: ', seqdur
    soundTrack = SoundInterval(danceSound, duration=seqdur, loop=1)
    mtrack = Parallel(Sequence(tracks), soundTrack)
    camTrack = Track(camTracks)
    return (mtrack, camTrack)
Beispiel #3
0
def doToonVictory(localToonActive, toons, rewardToonIds, rewardDicts, deathList, rpanel, allowGroupShot = 1, uberList = [], helpfulToonsList = [], noSkip = False):
    track = Sequence()
    if localToonActive == 1:
        track.append(Func(rpanel.show))
        track.append(Func(NametagGlobals.setOnscreenChatForced, 1))
    camTrack = Sequence()
    endTrack = Sequence()
    danceSound = globalBattleSoundCache.getSound('ENC_Win.ogg')
    toonList = []
    countToons = 0
    uberListNew = []
    for t in toons:
        if isinstance(t, types.IntType):
            t = base.cr.doId2do.get(t)
        if t:
            toonList.append(t)
            uberListNew.append(uberList[countToons])
        countToons += 1

    toonId2toon = {}
    for toon in toonList:
        toonId2toon[toon.doId] = toon

    rewardToonList = []
    for id in rewardToonIds:
        rewardToonList.append(toonId2toon.get(id))

    skipper = ToonVictorySkipper(len(toonList), noSkip)
    lastListenIndex = 0
    track.append(skipper.getSetupFunc(lastListenIndex))
    for tIndex in range(len(toonList)):
        t = toonList[tIndex]
        rdict = __findToonReward(rewardDicts, t)
        if rdict != None:
            expTrack = rpanel.getExpTrack(t, rdict['origExp'], rdict['earnedExp'], deathList, rdict['origQuests'], rdict['items'], rdict['missedItems'], rdict['origMerits'], rdict['merits'], rdict['parts'], rewardToonList, uberListNew[tIndex], helpfulToonsList, noSkip=noSkip)
            if expTrack:
                skipper.setStartTime(tIndex, track.getDuration())
                track.append(skipper.getTeardownFunc(lastListenIndex))
                lastListenIndex = tIndex
                track.append(skipper.getSetupFunc(lastListenIndex))
                track.append(expTrack)
                camDuration = expTrack.getDuration()
                camExpTrack = MovieCamera.chooseRewardShot(t, camDuration)
                camTrack.append(MovieCamera.chooseRewardShot(t, camDuration, allowGroupShot=allowGroupShot))

    track.append(skipper.getTeardownFunc(lastListenIndex))
    track.append(Func(skipper.destroy))
    if localToonActive == 1:
        track.append(Func(rpanel.hide))
        track.append(Func(NametagGlobals.setOnscreenChatForced, 0))
    track.append(endTrack)
    trackdur = track.getDuration()
    soundTrack = SoundInterval(danceSound, duration=trackdur, loop=1)
    mtrack = Parallel(track, soundTrack)
    skipper.setIvals((mtrack, camTrack))
    return (mtrack, camTrack, skipper)
def doToonVictory(localToonActive, toons, rewardToonIds, rewardDicts, deathList, rpanel, allowGroupShot = 1, uberList = [], helpfulToonsList = [], noSkip = False):
    track = Sequence()
    if localToonActive == 1:
        track.append(Func(rpanel.show))
        track.append(Func(NametagGlobals.setOnscreenChatForced, 1))
    camTrack = Sequence()
    endTrack = Sequence()
    danceSound = globalBattleSoundCache.getSound('ENC_Win.ogg')
    toonList = []
    countToons = 0
    uberListNew = []
    for t in toons:
        if isinstance(t, types.IntType):
            t = base.cr.doId2do.get(t)
        if t:
            toonList.append(t)
            uberListNew.append(uberList[countToons])
        countToons += 1

    toonId2toon = {}
    for toon in toonList:
        toonId2toon[toon.doId] = toon

    rewardToonList = []
    for id in rewardToonIds:
        rewardToonList.append(toonId2toon.get(id))

    skipper = ToonVictorySkipper(len(toonList), noSkip)
    lastListenIndex = 0
    track.append(skipper.getSetupFunc(lastListenIndex))
    for tIndex in xrange(len(toonList)):
        t = toonList[tIndex]
        rdict = __findToonReward(rewardDicts, t)
        if rdict != None:
            expTrack = rpanel.getExpTrack(t, rdict['origExp'], rdict['earnedExp'], deathList, rdict['origQuests'], rdict['items'], rdict['missedItems'], rdict['origMerits'], rdict['merits'], rdict['parts'], rewardToonList, uberListNew[tIndex], helpfulToonsList, noSkip=noSkip)
            if expTrack:
                skipper.setStartTime(tIndex, track.getDuration())
                track.append(skipper.getTeardownFunc(lastListenIndex))
                lastListenIndex = tIndex
                track.append(skipper.getSetupFunc(lastListenIndex))
                track.append(expTrack)
                camDuration = expTrack.getDuration()
                camExpTrack = MovieCamera.chooseRewardShot(t, camDuration)
                camTrack.append(MovieCamera.chooseRewardShot(t, camDuration, allowGroupShot=allowGroupShot))

    track.append(skipper.getTeardownFunc(lastListenIndex))
    track.append(Func(skipper.destroy))
    if localToonActive == 1:
        track.append(Func(rpanel.hide))
        track.append(Func(NametagGlobals.setOnscreenChatForced, 0))
    track.append(endTrack)
    trackdur = track.getDuration()
    soundTrack = SoundInterval(danceSound, duration=trackdur, loop=1)
    mtrack = Parallel(track, soundTrack)
    skipper.setIvals((mtrack, camTrack))
    return (mtrack, camTrack, skipper)
Beispiel #5
0
def doSounds(sounds):
    if len(sounds) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(sounds)
    mtrack = Parallel() 
    hitCount = 0
    prevLevel = 0
    prevSounds = [[],
     [],
     [],
     [],
     [],
     [],
     []]
    for sound in sounds:
        level = sound['level']
        prevSounds[level].append(sound)
        for target in sound['target']:
            if target['hp'] > 0:
                hitCount += 1
                break

    delay = 0.0
    for soundList in prevSounds:
        if len(soundList) > 0:
            mtrack.append(__doSoundsLevel(soundList, delay, hitCount, npcs))
            delay += TOON_SOUND_DELAY

    soundTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    targets = sounds[0]['target']
    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseSoundShot(sounds, targets, camDuration, enterDuration, exitDuration)
    return (soundTrack, camTrack)
Beispiel #6
0
def doSounds(sounds):
    if len(sounds) == 0:
        return (None, None)
    tracks = []
    hitCount = 0
    prevLevel = 0
    prevSounds = [[], [], [], [], [], []]
    for sound in sounds:
        level = sound['level']
        prevSounds[level].append(sound)
        for target in sound['target']:
            if target['hp'] > 0:
                hitCount += 1
                break

    delay = 0.0
    for soundList in prevSounds:
        if len(soundList) > 0:
            tracks += __doSoundsLevel(soundList, delay, hitCount)
            delay += TOON_SOUND_DELAY

    mtrack = MultiTrack(tracks)
    targets = sounds[0]['target']
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSoundShot(sounds, targets, camDuration)
    return (mtrack, camTrack)
    return
Beispiel #7
0
def doSounds(sounds):
    if len(sounds) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(sounds)
    mtrack = Parallel()
    hitCount = 0
    prevLevel = 0
    prevSounds = [[], [], [], [], [], [], []]
    for sound in sounds:
        level = sound['level']
        prevSounds[level].append(sound)
        for target in sound['target']:
            if target['hp'] > 0:
                hitCount += 1
                break

    delay = 0.0
    for soundList in prevSounds:
        if len(soundList) > 0:
            mtrack.append(__doSoundsLevel(soundList, delay, hitCount, npcs))
            delay += TOON_SOUND_DELAY

    soundTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    targets = sounds[0]['target']
    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseSoundShot(sounds, targets, camDuration,
                                           enterDuration, exitDuration)
    return (soundTrack, camTrack)
Beispiel #8
0
def doLures(lures):
    """ doLures(lures)
        Lures occur in the following order:
        1) level 1 lures one at a time, from right to left
        2) level 2 lures one at a time, from right to left
        etc.
    """
    if (len(lures) == 0):
        return (None, None)

    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(lures)

    mtrack = Parallel()
    for l in lures:
        ival = __doLureLevel(l, npcs)
        if (ival):
            mtrack.append(ival)

    lureTrack = Sequence(npcArrivals, mtrack, npcDepartures)

    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseLureShot(lures, camDuration, enterDuration,
                                                              exitDuration)
    return (lureTrack, camTrack)
def doSOSs(calls):
    if len(calls) == 0:
        return (None, None)

    def callerFunc(toon, handle):
        toon.setChatAbsolute(TTLocalizer.MovieSOSCallHelp % handle.getName(), CFSpeech | CFTimeout)
        handle.d_battleSOS(handle.doId)

    def calleeFunc(toon, handle):
        toon.setChatAbsolute(TTLocalizer.MovieSOSCallHelp % handle.getName(), CFSpeech | CFTimeout)

    def observerFunc(toon):
        toon.setChatAbsolute(TTLocalizer.MovieSOSObserverHelp, CFSpeech | CFTimeout)

    mtrack = Sequence()
    for c in calls:
        toon = c['toon']
        targetType = c['targetType']
        handle = c['target']
        mtrack.append(Wait(0.5))
        if targetType == 'observer':
            ival = Func(observerFunc, toon)
        elif targetType == 'caller':
            ival = Func(callerFunc, toon, handle)
        elif targetType == 'callee':
            ival = Func(calleeFunc, toon, handle)
        else:
            notify.error('invalid target type: %s' % targetType)
        mtrack.append(ival)
        mtrack.append(Wait(2.0))
        notify.debug('toon: %s calls for help' % toon.getName())

    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSOSShot(toon, camDuration)
    return (mtrack, camTrack)
Beispiel #10
0
def doFires(fires):
    if len(fires) == 0:
        return (None, None)
    
    suitFiresDict = { }
    for fire in fires:
        suitId = fire['target']['suit'].doId
        if suitFiresDict.has_key(suitId):
            suitFiresDict[suitId].append(fire)
            continue
        suitFiresDict[suitId] = [
            fire]
    
    suitFires = suitFiresDict.values()
    
    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        
        return 0

    suitFires.sort(compFunc)
    totalHitDict = { }
    singleHitDict = { }
    groupHitDict = { }
    for fire in fires:
        suitId = fire['target']['suit'].doId
        if fire['target']['hp'] > 0:
            addHit(singleHitDict, suitId, 1)
            addHit(totalHitDict, suitId, 1)
        else:
            addHit(singleHitDict, suitId, 0)
            addHit(totalHitDict, suitId, 0)
        fire['target']['hp'] > 0
    
    notify.debug('singleHitDict = %s' % singleHitDict)
    notify.debug('groupHitDict = %s' % groupHitDict)
    notify.debug('totalHitDict = %s' % totalHitDict)
    delay = 0.0
    mtrack = Parallel()
    firedTargets = []
    for sf in suitFires:
        if len(sf) > 0:
            ival = __doSuitFires(sf)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            
            delay = delay + TOON_FIRE_SUIT_DELAY
            continue
    
    retTrack = Sequence()
    retTrack.append(mtrack)
    camDuration = retTrack.getDuration()
    camTrack = MovieCamera.chooseFireShot(fires, suitFiresDict, camDuration)
    return (retTrack, camTrack)
def doFires(fires):
    if len(fires) == 0:
        return (None, None)
    
    suitFiresDict = { }
    for fire in fires:
        suitId = fire['target']['suit'].doId
        if suitFiresDict.has_key(suitId):
            suitFiresDict[suitId].append(fire)
            continue
        suitFiresDict[suitId] = [
            fire]
    
    suitFires = suitFiresDict.values()
    
    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        
        return 0

    suitFires.sort(compFunc)
    totalHitDict = { }
    singleHitDict = { }
    groupHitDict = { }
    for fire in fires:
        suitId = fire['target']['suit'].doId
        if fire['target']['hp'] > 0:
            addHit(singleHitDict, suitId, 1)
            addHit(totalHitDict, suitId, 1)
        else:
            addHit(singleHitDict, suitId, 0)
            addHit(totalHitDict, suitId, 0)
        fire['target']['hp'] > 0
    
    notify.debug('singleHitDict = %s' % singleHitDict)
    notify.debug('groupHitDict = %s' % groupHitDict)
    notify.debug('totalHitDict = %s' % totalHitDict)
    delay = 0.0
    mtrack = Parallel()
    firedTargets = []
    for sf in suitFires:
        if len(sf) > 0:
            ival = __doSuitFires(sf)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            
            delay = delay + TOON_FIRE_SUIT_DELAY
            continue
    
    retTrack = Sequence()
    retTrack.append(mtrack)
    camDuration = retTrack.getDuration()
    camTrack = MovieCamera.chooseFireShot(fires, suitFiresDict, camDuration)
    return (retTrack, camTrack)
Beispiel #12
0
def doSquirts(squirts):
    if len(squirts) == 0:
        return (None, None)
    
    suitSquirtsDict = { }
    doneUber = 0
    skip = 0
    for squirt in squirts:
        skip = 0
        if skip:
            continue
        if type(squirt['target']) == type([]):
            target = squirt['target'][0]
            suitId = target['suit'].doId
            if suitSquirtsDict.has_key(suitId):
                suitSquirtsDict[suitId].append(squirt)
            else:
                suitSquirtsDict[suitId] = [
                    squirt]
        
        type(squirt['target']) == type([])
        suitId = squirt['target']['suit'].doId
        if suitSquirtsDict.has_key(suitId):
            suitSquirtsDict[suitId].append(squirt)
            continue
        suitSquirtsDict[suitId] = [
            squirt]
    
    suitSquirts = suitSquirtsDict.values()
    
    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        
        return 0

    suitSquirts.sort(compFunc)
    delay = 0.0
    mtrack = Parallel()
    for st in suitSquirts:
        if len(st) > 0:
            ival = __doSuitSquirts(st)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            
            delay = delay + TOON_SQUIRT_SUIT_DELAY
            continue
    
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSquirtShot(squirts, suitSquirtsDict, camDuration)
    return (mtrack, camTrack)
Beispiel #13
0
def doHeals(heals, hasInteractivePropHealBonus):
    if len(heals) == 0:
        return (None, None)
    track = Sequence()
    for h in heals:
        ival = __doHealLevel(h, hasInteractivePropHealBonus)
        if ival:
            track.append(ival)

    camDuration = track.getDuration()
    camTrack = MovieCamera.chooseHealShot(heals, camDuration)
    return (track, camTrack)
def doHeals(heals, hasInteractivePropHealBonus):
    if len(heals) == 0:
        return (None, None)
    track = Sequence()
    for h in heals:
        ival = __doHealLevel(h, hasInteractivePropHealBonus)
        if ival:
            track.append(ival)

    camDuration = track.getDuration()
    camTrack = MovieCamera.chooseHealShot(heals, camDuration)
    return (track, camTrack)
def doZaps(zaps):
    if len(zaps) == 0:
        return (None, None)

    suitZapsDict = {}
    doneUber = 0
    skip = 0
    for zap in zaps:
        skip = 0
        if skip:
            pass
        elif type(zap['target']) == type([]):
            if 1:
                target = zap['target'][0]
                suitId = target['suit'].doId
                if suitId in suitZapsDict:
                    suitZapsDict[suitId].append(zap)
                else:
                    suitZapsDict[suitId] = [zap]
        else:
            suitId = zap['target']['suit'].doId
            if suitId in suitZapsDict:
                suitZapsDict[suitId].append(zap)
            else:
                suitZapsDict[suitId] = [zap]

    suitZaps = suitZapsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        return 0

    suitZaps.sort(compFunc)

    delay = 0.0

    mtrack = Parallel()
    for st in suitZaps:
        if len(st) > 0:
            ival = __doSuitZaps(st)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_ZAP_SUIT_DELAY
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(zaps)
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseLureShot(zaps, camDuration, enterDuration,
                                          exitDuration)
    return (mtrack, camTrack)
Beispiel #16
0
def doSquirts(squirts):
    if len(squirts) == 0:
        return (None, None)

    suitSquirtsDict = {}
    doneUber = 0
    skip = 0
    for squirt in squirts:
        skip = 0
        if skip:
            continue
        if type(squirt['target']) == type([]):
            target = squirt['target'][0]
            suitId = target['suit'].doId
            if suitSquirtsDict.has_key(suitId):
                suitSquirtsDict[suitId].append(squirt)
            else:
                suitSquirtsDict[suitId] = [squirt]

        type(squirt['target']) == type([])
        suitId = squirt['target']['suit'].doId
        if suitSquirtsDict.has_key(suitId):
            suitSquirtsDict[suitId].append(squirt)
            continue
        suitSquirtsDict[suitId] = [squirt]

    suitSquirts = suitSquirtsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1

        return 0

    suitSquirts.sort(compFunc)
    delay = 0.0
    mtrack = Parallel()
    for st in suitSquirts:
        if len(st) > 0:
            ival = __doSuitSquirts(st)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))

            delay = delay + TOON_SQUIRT_SUIT_DELAY
            continue

    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSquirtShot(squirts, suitSquirtsDict,
                                            camDuration)
    return (mtrack, camTrack)
def doPetSOSs(PetSOSs):
    if len(PetSOSs) == 0:
        return (None, None)
    track = Sequence()
    textTrack = Sequence()
    for p in PetSOSs:
        ival = __doPetSOS(p)
        if ival:
            track.append(ival)

    camDuration = track.getDuration()
    camTrack = MovieCamera.chooseHealShot(PetSOSs, camDuration)
    return (track, camTrack)
Beispiel #18
0
def doPetSOSs(PetSOSs):
    if len(PetSOSs) == 0:
        return (None, None)
    track = Sequence()
    textTrack = Sequence()
    for p in PetSOSs:
        ival = __doPetSOS(p)
        if ival:
            track.append(ival)

    camDuration = track.getDuration()
    camTrack = MovieCamera.chooseHealShot(PetSOSs, camDuration)
    return (track, camTrack)
Beispiel #19
0
def doLures(lures):
    if len(lures) == 0:
        return (None, None)
    ivals = []
    for l in lures:
        ival = __doLureLevel(l)
        if ival:
            ivals.append(Track([ival]))

    mtrack = MultiTrack(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseLureShot(lures, camDuration)
    return (mtrack, camTrack)
    return
Beispiel #20
0
def doHeals(heals):
    if len(heals) == 0:
        return (None, None)
    ivals = []
    for h in heals:
        ival = __doHealLevel(h)
        if ival:
            ivals.append(ival)

    mtrack = Track(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseHealShot(heals, camDuration)
    return (mtrack, camTrack)
    return
Beispiel #21
0
def doHeals(heals):
    if len(heals) == 0:
        return (None, None)
    
    ivals = []
    for h in heals:
        ival = __doHealLevel(h)
        if ival:
            ivals.append(ival)
        
    
    mtrack = Track(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseHealShot(heals, camDuration)
    return (mtrack, camTrack)
def doLures(lures):
    if len(lures) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(lures)
    mtrack = Parallel()
    for l in lures:
        ival = __doLureLevel(l, npcs)
        if ival:
            mtrack.append(ival)

    lureTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseLureShot(lures, camDuration, enterDuration, exitDuration)
    return (lureTrack, camTrack)
Beispiel #23
0
def doLures(lures):
    if len(lures) == 0:
        return (None, None)
    
    ivals = []
    for l in lures:
        ival = __doLureLevel(l)
        if ival:
            ivals.append(Track([
                ival]))
        
    
    mtrack = MultiTrack(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseLureShot(lures, camDuration)
    return (mtrack, camTrack)
def doNPCSOSs(NPCSOSs):
    if len(NPCSOSs) == 0:
        return (None, None)
    track = Sequence()
    textTrack = Sequence()
    for n in NPCSOSs:
        ival, textIval = __doNPCSOS(n)
        if ival:
            track.append(ival)
            textTrack.append(textIval)

    camDuration = track.getDuration()
    if camDuration > 0.0:
        camTrack = MovieCamera.chooseHealShot(NPCSOSs, camDuration)
    else:
        camTrack = Sequence()
    return (track, Parallel(camTrack, textTrack))
Beispiel #25
0
def doNPCSOSs(NPCSOSs):
    if len(NPCSOSs) == 0:
        return (None, None)
    track = Sequence()
    textTrack = Sequence()
    for n in NPCSOSs:
        ival, textIval = __doNPCSOS(n)
        if ival:
            track.append(ival)
            textTrack.append(textIval)

    camDuration = track.getDuration()
    if camDuration > 0.0:
        camTrack = MovieCamera.chooseHealShot(NPCSOSs, camDuration)
    else:
        camTrack = Sequence()
    return (track, Parallel(camTrack, textTrack))
Beispiel #26
0
def doSOSs(calls):
    if len(calls) == 0:
        return (None, None)
    
    
    def callerFunc(toon, handle):
        toon.setChatAbsolute(Localizer.MovieSOSCallHelp % handle.getName(), CFSpeech | CFTimeout)
        handle.d_battleSOS(toonbase.localToon.doId)

    
    def calleeFunc(toon, handle):
        toon.setChatAbsolute(Localizer.MovieSOSCallHelp % handle.getName(), CFSpeech | CFTimeout)

    
    def observerFunc(toon):
        toon.setChatAbsolute(Localizer.MovieSOSObserverHelp, CFSpeech | CFTimeout)

    ivals = []
    for c in calls:
        toon = c['toon']
        targetType = c['targetType']
        handle = c['target']
        ivals.append(WaitInterval(0.5))
        if targetType == 'observer':
            ival = FunctionInterval(observerFunc, extraArgs = [
                toon])
        elif targetType == 'caller':
            ival = FunctionInterval(callerFunc, extraArgs = [
                toon,
                handle])
        elif targetType == 'callee':
            ival = FunctionInterval(calleeFunc, extraArgs = [
                toon,
                handle])
        else:
            notify.error('ivalid target type: %s' % targetType)
        ivals.append(ival)
        ivals.append(WaitInterval(2.0))
        notify.debug('toon: %s calls for help' % toon.getName())
    
    mtrack = Track(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSOSShot(toon, camDuration)
    return (mtrack, camTrack)
Beispiel #27
0
def doHeals(heals, hasInteractivePropHealBonus):
    """ doHeals(heals)
        Heals occur in the following order:
        1) level 1 heals one at a time, from right to left
        2) level 2 heals one at a time, from right to left
        etc.
    """
    #print("do Heals")
    if (len(heals) == 0):
        return (None, None)
    track = Sequence()
    for h in heals:
        ival = __doHealLevel(h, hasInteractivePropHealBonus)
        if (ival):
            track.append(ival)

    camDuration = track.getDuration()
    camTrack = MovieCamera.chooseHealShot(heals, camDuration)
    return (track, camTrack)
Beispiel #28
0
def doSOSs(calls):
    if len(calls) == 0:
        return (None, None)

    def callerFunc(toon, handle):
        toon.setChatAbsolute(Localizer.MovieSOSCallHelp % handle.getName(),
                             CFSpeech | CFTimeout)
        handle.d_battleSOS(toonbase.localToon.doId)

    def calleeFunc(toon, handle):
        toon.setChatAbsolute(Localizer.MovieSOSCallHelp % handle.getName(),
                             CFSpeech | CFTimeout)

    def observerFunc(toon):
        toon.setChatAbsolute(Localizer.MovieSOSObserverHelp,
                             CFSpeech | CFTimeout)

    ivals = []
    for c in calls:
        toon = c['toon']
        targetType = c['targetType']
        handle = c['target']
        ivals.append(WaitInterval(0.5))
        if targetType == 'observer':
            ival = FunctionInterval(observerFunc, extraArgs=[toon])
        else:
            if targetType == 'caller':
                ival = FunctionInterval(callerFunc, extraArgs=[toon, handle])
            else:
                if targetType == 'callee':
                    ival = FunctionInterval(calleeFunc,
                                            extraArgs=[toon, handle])
                else:
                    notify.error('ivalid target type: %s' % targetType)
        ivals.append(ival)
        ivals.append(WaitInterval(2.0))
        notify.debug('toon: %s calls for help' % toon.getName())

    mtrack = Track(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSOSShot(toon, camDuration)
    return (mtrack, camTrack)
    return
Beispiel #29
0
def doSOSs(calls):
    if len(calls) == 0:
        return None, None

    def callerFunc(toon, handle):
        toon.setChatAbsolute(
            TTLocalizer.MovieSOSCallHelp %
            handle.getName(), CFSpeech | CFTimeout)
        base.cr.ttrFriendsManager.sendUpdate('sendTalkWhisper', [handle.doId, 'I Need Help In A Battle!!!'])

    def calleeFunc(toon, handle):
        toon.setChatAbsolute(
            TTLocalizer.MovieSOSCallHelp %
            handle.getName(), CFSpeech | CFTimeout)

    def observerFunc(toon):
        toon.setChatAbsolute(
            TTLocalizer.MovieSOSObserverHelp,
            CFSpeech | CFTimeout)

    mtrack = Sequence()
    for c in calls:
        toon = c['toon']
        targetType = c['targetType']
        handle = c['target']
        mtrack.append(Wait(0.5))
        if targetType == 'observer':
            ival = Func(observerFunc, toon)
        elif targetType == 'caller':
            ival = Func(callerFunc, toon, handle)
        elif targetType == 'callee':
            ival = Func(calleeFunc, toon, handle)
        else:
            notify.error('invalid target type: %s' % targetType)
        mtrack.append(ival)
        mtrack.append(Wait(2.0))
        notify.debug('toon: %s calls for help' % toon.getName())

    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSOSShot(toon, camDuration)
    return mtrack, camTrack
Beispiel #30
0
def doSOSs(calls):
    """ doSOSs(calls)
        Calls for help occur in the following order:
        right to left, one at a time
    """
    if (len(calls) == 0):
        return (None, None)
    # setChatAbsolute gets around the speedchat
    def callerFunc(toon, handle):
        toon.setChatAbsolute(TTLocalizer.MovieSOSCallHelp %
                             handle.getName(), CFSpeech | CFTimeout)
        handle.d_battleSOS(base.localAvatar.doId)
    def calleeFunc(toon, handle):
        toon.setChatAbsolute(TTLocalizer.MovieSOSCallHelp %
                             handle.getName(), CFSpeech | CFTimeout)
    def observerFunc(toon):
        toon.setChatAbsolute(TTLocalizer.MovieSOSObserverHelp,
                             CFSpeech | CFTimeout)
    mtrack = Sequence()
    for c in calls:
        toon = c['toon']
        targetType = c['targetType']
        handle = c['target']
        mtrack.append(Wait(0.5))
        if (targetType == 'observer'):
            ival = Func(observerFunc, toon)
        elif (targetType == 'caller'):
            ival = Func(callerFunc, toon, handle)
        elif (targetType == 'callee'):
            ival = Func(calleeFunc, toon, handle)
        else:
            notify.error('invalid target type: %s' % targetType)
        mtrack.append(ival)
        # Hold on the word balloon for 2 seconds
        mtrack.append(Wait(2.0))
        notify.debug('toon: %s calls for help' % toon.getName())

    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSOSShot(toon, camDuration)
    return (mtrack, camTrack)
Beispiel #31
0
def doDrops(drops):
    if len(drops) == 0:
        return (None, None)
    
    suitDropsDict = { }
    for drop in drops:
        suitId = drop['target']['suit'].doId
        if suitDropsDict.has_key(suitId):
            suitDropsDict[suitId].append(drop)
        else:
            suitDropsDict[suitId] = [
                drop]
    
    suitDrops = suitDropsDict.values()
    
    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        
        return 0

    suitDrops.sort(compFunc)
    delay = 0.0
    tracks = []
    for st in suitDrops:
        if len(st) > 0:
            ival = __doSuitDrops(st)
            if ival:
                tracks.append(Track([
                    (delay, ival)]))
            
            delay = delay + TOON_DROP_SUIT_DELAY
        
    
    mtrack = MultiTrack(tracks, name = 'toplevel-drop')
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseDropShot(drops, suitDropsDict, camDuration)
    return (mtrack, camTrack)
Beispiel #32
0
def doDrops(drops):
    if len(drops) == 0:
        return (None, None)
    suitDropsDict = {}
    for drop in drops:
        suitId = drop['target']['suit'].doId
        if suitDropsDict.has_key(suitId):
            suitDropsDict[suitId].append(drop)
        else:
            suitDropsDict[suitId] = [
             drop]

    suitDrops = suitDropsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        else:
            if len(a) < len(b):
                return -1
        return 0

    suitDrops.sort(compFunc)
    delay = 0.0
    tracks = []
    for st in suitDrops:
        if len(st) > 0:
            ival = __doSuitDrops(st)
            if ival:
                tracks.append(Track([(delay, ival)]))
            delay = delay + TOON_DROP_SUIT_DELAY

    mtrack = MultiTrack(tracks, name='toplevel-drop')
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseDropShot(drops, suitDropsDict, camDuration)
    return (
     mtrack, camTrack)
    return
Beispiel #33
0
def doSquirts(squirts):
    if len(squirts) == 0:
        return (None, None)

    suitSquirtsDict = {}
    for squirt in squirts:
        suitId = squirt['target']['suit'].doId
        if suitSquirtsDict.has_key(suitId):
            suitSquirtsDict[suitId].append(squirt)
        else:
            suitSquirtsDict[suitId] = [squirt]

    suitSquirts = suitSquirtsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1

        return 0

    suitSquirts.sort(compFunc)
    delay = 0.0
    tracks = []
    for st in suitSquirts:
        if len(st) > 0:
            ival = __doSuitSquirts(st)
            if ival:
                tracks.append(Track([(delay, ival)]))

            delay = delay + TOON_SQUIRT_SUIT_DELAY

    mtrack = MultiTrack(tracks)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSquirtShot(squirts, suitSquirtsDict,
                                            camDuration)
    return (mtrack, camTrack)
Beispiel #34
0
def doThrows(throws):
    if len(throws) == 0:
        return (None, None)
    suitThrowsDict = {}
    for throw in throws:
        suitId = throw['target']['suit'].doId
        if suitThrowsDict.has_key(suitId):
            suitThrowsDict[suitId].append(throw)
        else:
            suitThrowsDict[suitId] = [
             throw]

    suitThrows = suitThrowsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        else:
            if len(a) < len(b):
                return -1
        return 0

    suitThrows.sort(compFunc)
    delay = 0.0
    tracks = []
    for st in suitThrows:
        if len(st) > 0:
            ival = __doSuitThrows(st)
            if ival:
                tracks.append(Track([(delay, ival)]))
            delay = delay + TOON_THROW_SUIT_DELAY

    mtrack = MultiTrack(tracks)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseThrowShot(throws, suitThrowsDict, camDuration)
    return (
     mtrack, camTrack)
    return
Beispiel #35
0
def doSquirts(squirts):
    if len(squirts) == 0:
        return (None, None)

    suitSquirtsDict = {}
    for squirt in squirts:
        suitId = squirt["target"]["suit"].doId
        if suitSquirtsDict.has_key(suitId):
            suitSquirtsDict[suitId].append(squirt)
        else:
            suitSquirtsDict[suitId] = [squirt]

    suitSquirts = suitSquirtsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1

        return 0

    suitSquirts.sort(compFunc)
    delay = 0.0
    tracks = []
    for st in suitSquirts:
        if len(st) > 0:
            ival = __doSuitSquirts(st)
            if ival:
                tracks.append(Track([(delay, ival)]))

            delay = delay + TOON_SQUIRT_SUIT_DELAY

    mtrack = MultiTrack(tracks)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseSquirtShot(squirts, suitSquirtsDict, camDuration)
    return (mtrack, camTrack)
Beispiel #36
0
def doThrows(throws):
    if len(throws) == 0:
        return (None, None)
    suitThrowsDict = {}
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            pass
        else:
            suitId = throw['target']['suit'].doId
            if suitId in suitThrowsDict:
                suitThrowsDict[suitId].append(throw)
            else:
                suitThrowsDict[suitId] = [throw]

    suitThrows = suitThrowsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        return 0

    suitThrows.sort(compFunc)
    totalHitDict = {}
    singleHitDict = {}
    groupHitDict = {}
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            for i in xrange(len(throw['target'])):
                target = throw['target'][i]
                suitId = target['suit'].doId
                if target['hp'] > 0:
                    addHit(groupHitDict, suitId, 1)
                    addHit(totalHitDict, suitId, 1)
                else:
                    addHit(groupHitDict, suitId, 0)
                    addHit(totalHitDict, suitId, 0)

        else:
            suitId = throw['target']['suit'].doId
            if throw['target']['hp'] > 0:
                addHit(singleHitDict, suitId, 1)
                addHit(totalHitDict, suitId, 1)
            else:
                addHit(singleHitDict, suitId, 0)
                addHit(totalHitDict, suitId, 0)

    notify.debug('singleHitDict = %s' % singleHitDict)
    notify.debug('groupHitDict = %s' % groupHitDict)
    notify.debug('totalHitDict = %s' % totalHitDict)
    delay = 0.0
    mtrack = Parallel()
    for st in suitThrows:
        if len(st) > 0:
            ival = __doSuitThrows(st)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_THROW_SUIT_DELAY

    retTrack = Sequence()
    retTrack.append(mtrack)
    groupThrowIvals = Parallel()
    groupThrows = []
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            groupThrows.append(throw)

    for throw in groupThrows:
        tracks = None
        tracks = __throwGroupPie(throw, 0, groupHitDict)
        if tracks:
            for track in tracks:
                groupThrowIvals.append(track)

    retTrack.append(groupThrowIvals)
    camDuration = retTrack.getDuration()
    camTrack = MovieCamera.chooseThrowShot(throws, suitThrowsDict, camDuration)
    return (retTrack, camTrack)
def doDrops(drops):
    if len(drops) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(drops)
    suitDropsDict = {}
    groupDrops = []
    for drop in drops:
        track = drop['track']
        level = drop['level']
        targets = drop['target']
        if len(targets) == 1:
            suitId = targets[0]['suit'].doId
            if suitId in suitDropsDict:
                suitDropsDict[suitId].append((drop, targets[0]))
            else:
                suitDropsDict[suitId] = [(drop, targets[0])]
        elif level <= MAX_LEVEL_INDEX and attackAffectsGroup(track, level):
            groupDrops.append(drop)
        else:
            for target in targets:
                suitId = target['suit'].doId
                if suitId in suitDropsDict:
                    otherDrops = suitDropsDict[suitId]
                    alreadyInList = 0
                    for oDrop in otherDrops:
                        if oDrop[0]['toon'] == drop['toon']:
                            alreadyInList = 1

                    if alreadyInList == 0:
                        suitDropsDict[suitId].append((drop, target))
                else:
                    suitDropsDict[suitId] = [(drop, target)]

    suitDrops = suitDropsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        return 0

    suitDrops.sort(compFunc)
    delay = 0.0
    mtrack = Parallel(name='toplevel-drop')
    npcDrops = {}
    for st in suitDrops:
        if len(st) > 0:
            ival = __doSuitDrops(st, npcs, npcDrops)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_DROP_SUIT_DELAY

    dropTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()
    if groupDrops:
        ival = __doGroupDrops(groupDrops)
        dropTrack.append(ival)
        camDuration += ival.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseDropShot(drops, suitDropsDict, camDuration, enterDuration, exitDuration)
    return (dropTrack, camTrack)
def doThrows(throws):
    if len(throws) == 0:
        return None, None
    suitThrowsDict = {}
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            pass
        else:
            suitId = throw['target']['suit'].doId
            if suitId in suitThrowsDict:
                suitThrowsDict[suitId].append(throw)
            else:
                suitThrowsDict[suitId] = [throw]

    suitThrows = suitThrowsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        return 0

    suitThrows.sort(compFunc)
    totalHitDict = {}
    singleHitDict = {}
    groupHitDict = {}
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            for i in range(len(throw['target'])):
                target = throw['target'][i]
                suitId = target['suit'].doId
                if target['hp'] > 0:
                    addHit(groupHitDict, suitId, 1)
                    addHit(totalHitDict, suitId, 1)
                else:
                    addHit(groupHitDict, suitId, 0)
                    addHit(totalHitDict, suitId, 0)

        else:
            suitId = throw['target']['suit'].doId
            if throw['target']['hp'] > 0:
                addHit(singleHitDict, suitId, 1)
                addHit(totalHitDict, suitId, 1)
            else:
                addHit(singleHitDict, suitId, 0)
                addHit(totalHitDict, suitId, 0)

    notify.debug('singleHitDict = %s' % singleHitDict)
    notify.debug('groupHitDict = %s' % groupHitDict)
    notify.debug('totalHitDict = %s' % totalHitDict)
    delay = 0.0
    mtrack = Parallel()
    for st in suitThrows:
        if len(st) > 0:
            ival = __doSuitThrows(st)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_THROW_SUIT_DELAY

    retTrack = Sequence()
    retTrack.append(mtrack)
    groupThrowIvals = Parallel()
    groupThrows = []
    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            groupThrows.append(throw)

    for throw in groupThrows:
        tracks = None
        tracks = __throwGroupPie(throw, 0, groupHitDict)
        if tracks:
            for track in tracks:
                groupThrowIvals.append(track)

    retTrack.append(groupThrowIvals)
    camDuration = retTrack.getDuration()
    camTrack = MovieCamera.chooseThrowShot(throws, suitThrowsDict, camDuration)
    return retTrack, camTrack
Beispiel #39
0
def doDrops(drops):
    """ Drops occur in the following order:
        a) by suit, in order of increasing number of drops per suit
          1) level 1 drops, right to left, (TOON_DROP_DELAY later)
          2) level 2 drops, right to left, (TOON_DROP_DELAY later)
          3) level 3 drops, right to left, (TOON_DROP_DELAY later)
          etc.
        b) next suit, (TOON_DROP_SUIT_DELAY later)
    """
    if (len(drops) == 0):
        return (None, None)

    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(drops)

    # Group the drops by targeted suit
    suitDropsDict = {}
    groupDrops = []
    for drop in drops:
        track = drop['track']
        level = drop['level']
        targets = drop['target']
        if (len(targets) == 1):
            suitId = targets[0]['suit'].doId
            if (suitDropsDict.has_key(suitId)):
                suitDropsDict[suitId].append((drop, targets[0]))
            else:
                suitDropsDict[suitId] = [(drop, targets[0])]
        elif level <= MAX_LEVEL_INDEX and attackAffectsGroup(track, level):
            groupDrops.append(drop)
        else:
            # We're dealing with an NPC drop, which can have multiple
            # targets
            for target in targets:
                suitId = target['suit'].doId
                if (suitDropsDict.has_key(suitId)):
                    otherDrops = suitDropsDict[suitId]
                    alreadyInList = 0
                    for oDrop in otherDrops:
                        if (oDrop[0]['toon'] == drop['toon']):
                            alreadyInList = 1
                    if (alreadyInList == 0):
                        suitDropsDict[suitId].append((drop, target))
                else:
                    suitDropsDict[suitId] = [(drop, target)]
    suitDrops = suitDropsDict.values()

    # Sort the suits based on the number of drops per suit
    def compFunc(a, b):
        if (len(a) > len(b)):
            return 1
        elif (len(a) < len(b)):
            return -1
        return 0

    suitDrops.sort(compFunc)
    delay = 0.0
    mtrack = Parallel(name='toplevel-drop')
    npcDrops = {}
    for st in suitDrops:
        if (len(st) > 0):
            ival = __doSuitDrops(st, npcs, npcDrops)
            if (ival):
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_DROP_SUIT_DELAY

    dropTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()

    #we do the group drops after all the single drops have gone
    if groupDrops:
        ival = __doGroupDrops(groupDrops)
        dropTrack.append(ival)
        camDuration += ival.getDuration()

    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseDropShot(drops, suitDropsDict, camDuration,
                                          enterDuration, exitDuration)

    return (dropTrack, camTrack)
Beispiel #40
0
def doTraps(traps):
    if len(traps) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(traps)
    hasUberTrapConflict = False
    suitTrapsDict = {}
    for trap in traps:
        targets = trap['target']
        if len(targets) == 1:
            suitId = targets[0]['suit'].doId
            if suitTrapsDict.has_key(suitId):
                suitTrapsDict[suitId].append(trap)
            else:
                suitTrapsDict[suitId] = [
                 trap]
        else:
            for target in targets:
                suitId = target['suit'].doId
                if not suitTrapsDict.has_key(suitId):
                    suitTrapsDict[suitId] = [
                     trap]
                    break

            if trap['level'] == UBER_GAG_LEVEL_INDEX:
                if len(traps) > 1:
                    hasUberTrapConflict = True
                for oneTarget in trap['target']:
                    suit = oneTarget['suit']
                    if suit.battleTrap != NO_TRAP:
                        hasUberTrapConflict = True

    suitTrapLists = suitTrapsDict.values()
    mtrack = Parallel()
    for trapList in suitTrapLists:
        trapPropList = []
        for i in range(len(trapList)):
            trap = trapList[i]
            level = trap['level']
            if level == 0:
                banana = globalPropPool.getProp('banana')
                banana2 = MovieUtil.copyProp(banana)
                trapPropList.append([banana, banana2])
            elif level == 1:
                rake = globalPropPool.getProp('rake')
                rake2 = MovieUtil.copyProp(rake)
                rake.pose('rake', 0)
                rake2.pose('rake', 0)
                trapPropList.append([rake, rake2])
            elif level == 2:
                marbles = globalPropPool.getProp('marbles')
                marbles2 = MovieUtil.copyProp(marbles)
                trapPropList.append([marbles, marbles2])
            elif level == 3:
                trapPropList.append([globalPropPool.getProp('quicksand')])
            elif level == 4:
                trapPropList.append([globalPropPool.getProp('trapdoor')])
            elif level == 5:
                tnt = globalPropPool.getProp('tnt')
                tnt2 = MovieUtil.copyProp(tnt)
                trapPropList.append([tnt, tnt2])
            elif level == 6:
                tnt = globalPropPool.getProp('traintrack')
                tnt2 = MovieUtil.copyProp(tnt)
                trapPropList.append([tnt, tnt2])
            else:
                notify.warning('__doTraps() - Incorrect trap level:                 %d' % level)

        if len(trapList) == 1 and not hasUberTrapConflict:
            ival = __doTrapLevel(trapList[0], trapPropList[0])
            if ival:
                mtrack.append(ival)
        else:
            subMtrack = Parallel()
            for i in range(len(trapList)):
                trap = trapList[i]
                trapProps = trapPropList[i]
                ival = __doTrapLevel(trap, trapProps, explode=1)
                if ival:
                    subMtrack.append(ival)

            mtrack.append(subMtrack)

    trapTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseTrapShot(traps, camDuration, enterDuration, exitDuration)
    return (
     trapTrack, camTrack)
def doTraps(traps):
    if len(traps) == 0:
        return None, None
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(traps)
    hasUberTrapConflict = False
    suitTrapsDict = {}
    for trap in traps:
        targets = trap['target']
        if len(targets) == 1:
            suitId = targets[0]['suit'].doId
            if suitId in suitTrapsDict:
                suitTrapsDict[suitId].append(trap)
            else:
                suitTrapsDict[suitId] = [trap]
        else:
            for target in targets:
                suitId = target['suit'].doId
                if suitId not in suitTrapsDict:
                    suitTrapsDict[suitId] = [trap]
                    break

            if trap['level'] == UBER_GAG_LEVEL_INDEX:
                if len(traps) > 1:
                    hasUberTrapConflict = True
                for oneTarget in trap['target']:
                    suit = oneTarget['suit']
                    if suit.battleTrap != NO_TRAP:
                        hasUberTrapConflict = True

    suitTrapLists = suitTrapsDict.values()
    mtrack = Parallel()
    for trapList in suitTrapLists:
        trapPropList = []
        for i in range(len(trapList)):
            trap = trapList[i]
            level = trap['level']
            if level == 0:
                banana = globalPropPool.getProp('banana')
                banana2 = MovieUtil.copyProp(banana)
                trapPropList.append([banana, banana2])
            elif level == 1:
                rake = globalPropPool.getProp('rake')
                rake2 = MovieUtil.copyProp(rake)
                rake.pose('rake', 0)
                rake2.pose('rake', 0)
                trapPropList.append([rake, rake2])
            elif level == 2:
                marbles = globalPropPool.getProp('marbles')
                marbles2 = MovieUtil.copyProp(marbles)
                trapPropList.append([marbles, marbles2])
            elif level == 3:
                trapPropList.append([globalPropPool.getProp('quicksand')])
            elif level == 4:
                trapPropList.append([globalPropPool.getProp('trapdoor')])
            elif level == 5:
                tnt = globalPropPool.getProp('tnt')
                tnt2 = MovieUtil.copyProp(tnt)
                trapPropList.append([tnt, tnt2])
            elif level == 6:
                tnt = globalPropPool.getProp('traintrack')
                tnt2 = MovieUtil.copyProp(tnt)
                trapPropList.append([tnt, tnt2])
            else:
                notify.warning(
                    '__doTraps() - Incorrect trap level:                 %d' %
                    level)

        if len(trapList) == 1 and not hasUberTrapConflict:
            ival = __doTrapLevel(trapList[0], trapPropList[0])
            if ival:
                mtrack.append(ival)
        else:
            subMtrack = Parallel()
            for i in range(len(trapList)):
                trap = trapList[i]
                trapProps = trapPropList[i]
                ival = __doTrapLevel(trap, trapProps, explode=1)
                if ival:
                    subMtrack.append(ival)

            mtrack.append(subMtrack)

    trapTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseTrapShot(
        traps, camDuration, enterDuration, exitDuration)
    return trapTrack, camTrack
Beispiel #42
0
def doTraps(traps):
    if len(traps) == 0:
        return (None, None)
    
    suitTrapsDict = { }
    for trap in traps:
        suitId = trap['target']['suit'].doId
        if suitTrapsDict.has_key(suitId):
            suitTrapsDict[suitId].append(trap)
        else:
            suitTrapsDict[suitId] = [
                trap]
    
    suitTrapLists = suitTrapsDict.values()
    ivals = []
    for trapList in suitTrapLists:
        trapPropList = []
        for i in range(len(trapList)):
            trap = trapList[i]
            level = trap['level']
            if level == 0:
                banana = globalPropPool.getProp('banana')
                banana2 = MovieUtil.copyProp(banana)
                trapPropList.append([
                    banana,
                    banana2])
            elif level == 1:
                rake = globalPropPool.getProp('rake')
                rake2 = MovieUtil.copyProp(rake)
                rake.pose('rake', 0)
                rake2.pose('rake', 0)
                trapPropList.append([
                    rake,
                    rake2])
            elif level == 2:
                marbles = globalPropPool.getProp('marbles')
                marbles2 = MovieUtil.copyProp(marbles)
                trapPropList.append([
                    marbles,
                    marbles2])
            elif level == 3:
                trapPropList.append([
                    globalPropPool.getProp('quicksand')])
            elif level == 4:
                trapPropList.append([
                    globalPropPool.getProp('trapdoor')])
            elif level == 5:
                tnt = globalPropPool.getProp('tnt')
                tnt2 = MovieUtil.copyProp(tnt)
                trapPropList.append([
                    tnt,
                    tnt2])
            else:
                notify.warning('__doTraps() - Incorrect trap level:                 %d' % level)
        
        if len(trapList) == 1:
            ival = __doTrapLevel(trapList[0], trapPropList[0])
            if ival:
                ivals.append(Track([
                    ival]))
            
        else:
            subIvals = []
            for i in range(len(trapList)):
                trap = trapList[i]
                trapProps = trapPropList[i]
                ival = __doTrapLevel(trap, trapProps, explode = 1)
                if ival:
                    subIvals.append(Track([
                        ival]))
                
            
            ivals.append(MultiTrack(subIvals))
    
    mtrack = MultiTrack(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseTrapShot(traps, camDuration)
    return (mtrack, camTrack)
def __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    npcId = 0
    if 'npcId' in heal:
        npcId = heal['npcId']
        toon = NPCToons.createLocalNPC(npcId)
        if toon == None:
            return
    else:
        toon = heal['toon']
    targets = heal['target']
    ineffective = heal['sidestep']
    level = heal['level']
    if npcId != 0:
        track = Sequence(MovieNPCSOS.teleportIn(heal, toon))
    else:
        track = Sequence(__runToHealSpot(heal))
    delay = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective,
                         hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        targetTrack.append(reactIval)

    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')
    placeNode = NodePath('lookNode')
    diveProps = [glass, ladder]
    ladderScale = toon.getBodyScale() / 0.66
    scaleUpPoint = Point3(0.5, 0.5, 0.45) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon,
                                             add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    propTrack = Sequence(
        Func(MovieUtil.showProp, glass, render, glassPos),
        Func(MovieUtil.showProp, ladder, render, ladderPos),
        Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
        Func(placeNode.setPos, lookBase),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          scaleUpPoint,
                          startScale=MovieUtil.PNT3_NEARZERO),
        Func(placeNode.setPos, lookTop), Wait(2.1),
        MovieCamera.toonGroupHighShot(None, 0), Wait(2.1),
        Func(placeNode.setPos, LookGlass), Wait(0.4),
        MovieCamera.allGroupLowShot(None, 0), Wait(1.8),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          MovieUtil.PNT3_NEARZERO,
                          startScale=scaleUpPoint),
        Func(MovieUtil.removeProps, diveProps))
    mtrack = Parallel(
        propTrack, __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon,
                                  'walk',
                                  loop=0,
                                  duration=walkToLadderTime),
                    ActorInterval(toon, 'neutral', loop=0, duration=0.1)),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime)),
            Parallel(
                ActorInterval(toon, 'climb', loop=0, endFrame=116),
                Sequence(
                    Wait(4.6), Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode,
                                           0.25,
                                           VBase4(1, 1.0, 1, 0.0),
                                           blendType='easeInOut'),
                    LerpScaleInterval(toonNode,
                                      0.01,
                                      0.1,
                                      startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(
                        ActorInterval(toon,
                                      'swim',
                                      loop=1,
                                      startTime=0.0,
                                      endTime=1.0), Wait(1.0))),
                Sequence(Wait(4.6), Func(splash.play), Wait(1.0),
                         Func(splash.destroy))), Wait(0.5),
            Parallel(
                ActorInterval(toon, 'jump', loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle))), targetTrack)
    track.append(mtrack)
    if npcId != 0:
        track.append(MovieNPCSOS.teleportOut(heal, toon))
    else:
        track.append(__returnToBase(heal))
    for target in targets:
        targetToon = target['toon']
        track.append(Func(targetToon.clearChat))

    return track
def __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    npcId = 0
    if heal.has_key('npcId'):
        npcId = heal['npcId']
        toon = NPCToons.createLocalNPC(npcId)
        if toon == None:
            return None
        
    else:
        toon = heal['toon']
    targets = heal['target']
    ineffective = heal['sidestep']
    level = heal['level']
    if npcId != 0:
        track = Sequence(MovieNPCSOS.teleportIn(heal, toon))
    else:
        track = Sequence(__runToHealSpot(heal))
    delay = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        
        targetTrack.append(reactIval)
    
    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')
    placeNode = NodePath('lookNode')
    diveProps = [
        glass,
        ladder]
    ladderScale = toon.getBodyScale() / 0.66000000000000003
    scaleUpPoint = Point3(0.5, 0.5, 0.45000000000000001) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1000000000000001, 0.20000000000000001)
    glassToonOffset = Point3(0, 1.2, 0.20000000000000001)
    splashOffset = Point3(0, 1.0, 0.40000000000000002)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon, add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    propTrack = Sequence(Func(MovieUtil.showProp, glass, render, glassPos), Func(MovieUtil.showProp, ladder, render, ladderPos), Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)), Func(placeNode.setPos, lookBase), LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale = MovieUtil.PNT3_NEARZERO), Func(placeNode.setPos, lookTop), Wait(2.1000000000000001), MovieCamera.toonGroupHighShot(None, 0), Wait(2.1000000000000001), Func(placeNode.setPos, LookGlass), Wait(0.40000000000000002), MovieCamera.allGroupLowShot(None, 0), Wait(1.8), LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale = scaleUpPoint), Func(MovieUtil.removeProps, diveProps))
    mtrack = Parallel(propTrack, __getSoundTrack(level, 0.59999999999999998, duration = 9.0, node = toon), Sequence(Parallel(Sequence(ActorInterval(toon, 'walk', loop = 0, duration = walkToLadderTime), ActorInterval(toon, 'neutral', loop = 0, duration = 0.10000000000000001)), LerpPosInterval(toon, walkToLadderTime, climbladderPos), Wait(ladderGrowTime)), Parallel(ActorInterval(toon, 'climb', loop = 0, endFrame = 116), Sequence(Wait(4.5999999999999996), Func(toonNode.setTransparency, 1), LerpColorScaleInterval(toonNode, 0.25, VBase4(1, 1.0, 1, 0.0), blendType = 'easeInOut'), LerpScaleInterval(toonNode, 0.01, 0.10000000000000001, startScale = toonscale), LerpHprInterval(toon, 0.01, toonFacing), LerpPosInterval(toon, 0.0, glassToonPos), Func(toonNode.clearTransparency), Func(toonNode.clearColorScale), Parallel(ActorInterval(toon, 'swim', loop = 1, startTime = 0.0, endTime = 1.0), Wait(1.0))), Sequence(Wait(4.5999999999999996), Func(splash.play), Wait(1.0), Func(splash.destroy))), Wait(0.5), Parallel(ActorInterval(toon, 'jump', loop = 0, startTime = 0.20000000000000001), LerpScaleInterval(toonNode, 0.5, toonscale, startScale = 0.10000000000000001), Func(stopLook, toonsInBattle))), targetTrack)
    track.append(mtrack)
    if npcId != 0:
        track.append(MovieNPCSOS.teleportOut(heal, toon))
    else:
        track.append(__returnToBase(heal))
    for target in targets:
        targetToon = target['toon']
        track.append(Func(targetToon.clearChat))
    
    return track
Beispiel #45
0
def doThrows(throws):
    """ Throws occur in the following order:
        a) by suit, in order of increasing number of throws per suit
          1) level 1 throws, right to left, (TOON_THROW_DELAY later)
          2) level 2 throws, right to left, (TOON_THROW_DELAY later)
          3) level 3 throws, right to left, (TOON_THROW_DELAY later)
          etc.
        b) next suit, (TOON_THROW_SUIT_DELAY later)
    """

    #import pdb; pdb.set_trace()
    if (len(throws) == 0):
        return (None, None)

    # Group the throws by targeted suit
    suitThrowsDict = {}
    # throw['toon'] is the thrower.
    for throw in throws:
        # TODO: Count suits, and if there is only one, save that variable.
        if attackAffectsGroup(throw['track'], throw['level']):
            #hmmm lets try throwing at all of them
            #for target in throw['target']:
            #    suitId = targett['suit'].doId
            #    if (suitThrowsDict.has_key(suitId)):
            #        suitThrowsDict[suitId].append(throw)
            #    else:
            #        suitThrowsDict[suitId] = [throw]
            pass
        else:
            suitId = throw['target']['suit'].doId
            if (suitThrowsDict.has_key(suitId)):
                suitThrowsDict[suitId].append(throw)
            else:
                suitThrowsDict[suitId] = [throw]
    # A list of lists of throws grouped by suit
    suitThrows = suitThrowsDict.values()

    # Sort the suits based on the number of throws per suit
    def compFunc(a, b):
        if (len(a) > len(b)):
            return 1
        elif (len(a) < len(b)):
            return -1
        return 0

    suitThrows.sort(compFunc)

    #since we have group throws now, we calculate how
    #many times each suit gets hit over here
    totalHitDict = {}
    singleHitDict = {}
    groupHitDict = {}

    for throw in throws:
        if attackAffectsGroup(throw['track'], throw['level']):
            for i in range(len(throw['target'])):
                target = throw['target'][i]
                suitId = target['suit'].doId
                if target['hp'] > 0:
                    addHit(groupHitDict, suitId, 1)
                    addHit(totalHitDict, suitId, 1)
                else:
                    addHit(groupHitDict, suitId, 0)
                    addHit(totalHitDict, suitId, 0)

        else:
            suitId = throw['target']['suit'].doId
            if throw['target']['hp'] > 0:
                addHit(singleHitDict, suitId, 1)
                addHit(totalHitDict, suitId, 1)
            else:
                addHit(singleHitDict, suitId, 0)
                addHit(totalHitDict, suitId, 0)

    notify.debug('singleHitDict = %s' % singleHitDict)
    notify.debug('groupHitDict = %s' % groupHitDict)
    notify.debug('totalHitDict = %s' % totalHitDict)

    # Apply attacks in order
    delay = 0.0
    mtrack = Parallel()
    for st in suitThrows:
        if (len(st) > 0):
            ival = __doSuitThrows(st)
            if (ival):
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_THROW_SUIT_DELAY

    retTrack = Sequence()
    retTrack.append(mtrack)

    #we've done the single target throws, handle the group throws
    groupThrowIvals = Parallel()
    groupThrows = []
    for throw in throws:
        # TODO: Count suits, and if there is only one, save that variable.
        if attackAffectsGroup(throw['track'], throw['level']):
            groupThrows.append(throw)

    for throw in groupThrows:
        tracks = None
        tracks = __throwGroupPie(throw, 0, groupHitDict)

        if (tracks):
            #groupThrowIvals.append(Sequence(Wait(delay), ival))
            for track in tracks:
                groupThrowIvals.append(track)
        #delay = delay + TOON_THROW_SUIT_DELAY

    retTrack.append(groupThrowIvals)

    camDuration = retTrack.getDuration()
    camTrack = MovieCamera.chooseThrowShot(throws, suitThrowsDict, camDuration)
    return (retTrack, camTrack)
Beispiel #46
0
def __healDive(heal, hasInteractivePropHealBonus):
    """ __healJuggle(heal)
    """
    # Determine if this is an NPC heal
    #print("heal Dive Anim")
    # Splash object for when toon hits the water
    splash = Splash.Splash(render)  #remember to destroy
    splash.reparentTo(render)
    #import pdb; pdb.set_trace()
    npcId = 0
    if (heal.has_key('npcId')):
        npcId = heal['npcId']
        toon = NPCToons.createLocalNPC(npcId)
        if (toon == None):
            return None
    else:
        toon = heal['toon']
    targets = heal['target']
    ineffective = heal['sidestep']
    level = heal['level']

    #print("toonScale %s" % (toon.getBodyScale()))

    # Make a 'sandwich' around the track specific interval
    if (npcId != 0):
        track = Sequence(MovieNPCSOS.teleportIn(heal, toon))
    else:
        track = Sequence(__runToHealSpot(heal))
    delay = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target['toon']
        #hp = min(targetToon.hp + target['hp'], targetToon.maxHp)
        hp = target['hp']
        reactIval = Func(__healToon, targetToon, hp, ineffective,
                         hasInteractivePropHealBonus)
        if (first == 1):
            targetTrack.append(Wait(delay))
            first = 0

        targetTrack.append(reactIval)

    thisBattle = heal['battle']
    toonsInBattle = thisBattle.toons

    glass = globalPropPool.getProp('glass')
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp('ladder')  #MovieUtil.copyProp(cube)
    #placeNode = MovieUtil.copyProp(glass)
    placeNode = NodePath("lookNode")
    diveProps = [glass, ladder]  #, placeNode]
    ladderScale = (toon.getBodyScale() / 0.66)
    scaleUpPoint = Point3(.50, .5, .45) * ladderScale
    basePos = toon.getPos()

    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(
        toon, glassOffset)  #add3(basePos, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(
        toon, add3(ladderOffset, ladderToonSep))  #add3(basePos, ladderOffset)
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)

    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    LookGlass = render.getRelativePoint(toon, glassOffset)

    splash.setPos(splashOffset)

    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    #nameTagNode =  NodePath(toon.nametag.getNametag3d())
    #nameTagNode =  NodePath(toon.getHeadParts()[0])
    #placeNode =  NodePath("lookNode")

    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    #placeNode.attachNewNode("lookNode")
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))

    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()

    #for someToon in toonsInBattle:
    #    someToon.startStareAt(nameTagNode, Point3(0,0,3))
    #toonsLook(toonsInBattle, placeNode, Point3(0,0,3))

    propTrack = Sequence(
        #Func(MovieUtil.showProps, cubes, hips),
        Func(MovieUtil.showProp, glass, render, glassPos),
        Func(MovieUtil.showProp, ladder, render, ladderPos),
        Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
        Func(placeNode.setPos, lookBase),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          scaleUpPoint,
                          startScale=MovieUtil.PNT3_NEARZERO),
        Func(placeNode.setPos, lookTop),
        Wait(2.1),
        MovieCamera.toonGroupHighShot(None, 0),
        Wait(2.1),
        Func(placeNode.setPos, LookGlass),
        Wait(0.4),
        MovieCamera.allGroupLowShot(None, 0),
        Wait(1.8),
        LerpScaleInterval(ladder,
                          ladderGrowTime,
                          MovieUtil.PNT3_NEARZERO,
                          startScale=scaleUpPoint),
        Func(MovieUtil.removeProps, diveProps),
        #Func(MovieUtil.removeProps, placeNode),
    )

    mtrack = Parallel(
        propTrack,
        __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon,
                                  'walk',
                                  loop=0,
                                  duration=walkToLadderTime),
                    ActorInterval(toon, 'neutral', loop=0, duration=0.1),
                ),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime),
            ),
            Parallel(
                ActorInterval(toon, 'climb', loop=0, endFrame=116),
                Sequence(
                    Wait(4.6),
                    #LerpScaleInterval(toon, diveTime*0.1, 0.1),
                    #Func(toon.doToonAlphaColorScale, VBase4(1, 0.0, 1, 0.0), 0.5),
                    Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode,
                                           0.25,
                                           VBase4(1, 1.0, 1, 0.0),
                                           blendType='easeInOut'),
                    LerpScaleInterval(toonNode,
                                      0.01,
                                      0.1,
                                      startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(
                        ActorInterval(toon,
                                      'swim',
                                      loop=1,
                                      startTime=0.0,
                                      endTime=1.00),
                        Wait(1.0),
                    ),
                    #
                ),
                Sequence(
                    Wait(4.6),
                    Func(splash.play),
                    Wait(1.0),
                    Func(splash.destroy),
                ),
            ),
            #ActorInterval(toon, 'walk', loop = 1, duration=walkToLadderTime),
            #ActorInterval(toon, 'swim', loop = 1, duration=climbTime),
            #ActorInterval(toon, 'swim', loop = 1, duration=diveTime*1.0),
            #LerpScaleInterval(toon, diveTime*0.1, 0.1),
            Wait(0.5),
            Parallel(
                #LerpHprInterval(toon, 0.1, Point3(0,0,0)),
                ActorInterval(toon, 'jump', loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle),
            )),
        targetTrack)
    track.append(mtrack)
    if (npcId != 0):
        track.append(MovieNPCSOS.teleportOut(heal, toon))
    else:
        track.append(__returnToBase(heal))
    for target in targets:
        targetToon = target['toon']
        track.append(Func(targetToon.clearChat))
    return track
Beispiel #47
0
def doDrops(drops):
    if len(drops) == 0:
        return (None, None)
    npcArrivals, npcDepartures, npcs = MovieNPCSOS.doNPCTeleports(drops)
    suitDropsDict = {}
    groupDrops = []
    for drop in drops:
        track = drop['track']
        level = drop['level']
        targets = drop['target']
        if len(targets) == 1:
            suitId = targets[0]['suit'].doId
            if suitDropsDict.has_key(suitId):
                suitDropsDict[suitId].append((drop, targets[0]))
            else:
                suitDropsDict[suitId] = [(drop, targets[0])]
        elif level <= MAX_LEVEL_INDEX and attackAffectsGroup(track, level):
            groupDrops.append(drop)
        else:
            for target in targets:
                suitId = target['suit'].doId
                if suitDropsDict.has_key(suitId):
                    otherDrops = suitDropsDict[suitId]
                    alreadyInList = 0
                    for oDrop in otherDrops:
                        if oDrop[0]['toon'] == drop['toon']:
                            alreadyInList = 1

                    if alreadyInList == 0:
                        suitDropsDict[suitId].append((drop, target))
                else:
                    suitDropsDict[suitId] = [(drop, target)]

    suitDrops = suitDropsDict.values()

    def compFunc(a, b):
        if len(a) > len(b):
            return 1
        elif len(a) < len(b):
            return -1
        return 0

    suitDrops.sort(compFunc)
    delay = 0.0
    mtrack = Parallel(name='toplevel-drop')
    npcDrops = {}
    for st in suitDrops:
        if len(st) > 0:
            ival = __doSuitDrops(st, npcs, npcDrops)
            if ival:
                mtrack.append(Sequence(Wait(delay), ival))
            delay = delay + TOON_DROP_SUIT_DELAY

    dropTrack = Sequence(npcArrivals, mtrack, npcDepartures)
    camDuration = mtrack.getDuration()
    if groupDrops:
        ival = __doGroupDrops(groupDrops)
        dropTrack.append(ival)
        camDuration += ival.getDuration()
    enterDuration = npcArrivals.getDuration()
    exitDuration = npcDepartures.getDuration()
    camTrack = MovieCamera.chooseDropShot(drops, suitDropsDict, camDuration,
                                          enterDuration, exitDuration)
    return (dropTrack, camTrack)
Beispiel #48
0
def doTraps(traps):
    if len(traps) == 0:
        return (None, None)
    suitTrapsDict = {}
    for trap in traps:
        suitId = trap['target']['suit'].doId
        if suitTrapsDict.has_key(suitId):
            suitTrapsDict[suitId].append(trap)
        else:
            suitTrapsDict[suitId] = [trap]

    suitTrapLists = suitTrapsDict.values()
    ivals = []
    for trapList in suitTrapLists:
        trapPropList = []
        for i in range(len(trapList)):
            trap = trapList[i]
            level = trap['level']
            if level == 0:
                banana = globalPropPool.getProp('banana')
                banana2 = MovieUtil.copyProp(banana)
                trapPropList.append([banana, banana2])
            else:
                if level == 1:
                    rake = globalPropPool.getProp('rake')
                    rake2 = MovieUtil.copyProp(rake)
                    rake.pose('rake', 0)
                    rake2.pose('rake', 0)
                    trapPropList.append([rake, rake2])
                else:
                    if level == 2:
                        marbles = globalPropPool.getProp('marbles')
                        marbles2 = MovieUtil.copyProp(marbles)
                        trapPropList.append([marbles, marbles2])
                    else:
                        if level == 3:
                            trapPropList.append(
                                [globalPropPool.getProp('quicksand')])
                        else:
                            if level == 4:
                                trapPropList.append(
                                    [globalPropPool.getProp('trapdoor')])
                            else:
                                if level == 5:
                                    tnt = globalPropPool.getProp('tnt')
                                    tnt2 = MovieUtil.copyProp(tnt)
                                    trapPropList.append([tnt, tnt2])
                                else:
                                    notify.warning(
                                        '__doTraps() - Incorrect trap level:                 %d'
                                        % level)

        if len(trapList) == 1:
            ival = __doTrapLevel(trapList[0], trapPropList[0])
            if ival:
                ivals.append(Track([ival]))
        else:
            subIvals = []
            for i in range(len(trapList)):
                trap = trapList[i]
                trapProps = trapPropList[i]
                ival = __doTrapLevel(trap, trapProps, explode=1)
                if ival:
                    subIvals.append(Track([ival]))

            ivals.append(MultiTrack(subIvals))

    mtrack = MultiTrack(ivals)
    camDuration = mtrack.getDuration()
    camTrack = MovieCamera.chooseTrapShot(traps, camDuration)
    return (mtrack, camTrack)
    return
Beispiel #49
0
def __healDive(heal, hasInteractivePropHealBonus):
    splash = Splash.Splash(render)
    splash.reparentTo(render)
    npcId = 0
    if "npcId" in heal:
        npcId = heal["npcId"]
        toon = NPCToons.createLocalNPC(npcId)
        if toon == None:
            return
    else:
        toon = heal["toon"]
    targets = heal["target"]
    ineffective = heal["sidestep"]
    level = heal["level"]
    if npcId != 0:
        track = Sequence(MovieNPCSOS.teleportIn(heal, toon))
    else:
        track = Sequence(__runToHealSpot(heal))
    delay = 7.0
    first = 1
    targetTrack = Sequence()
    for target in targets:
        targetToon = target["toon"]
        hp = target["hp"]
        reactIval = Func(__healToon, targetToon, hp, ineffective, hasInteractivePropHealBonus)
        if first == 1:
            targetTrack.append(Wait(delay))
            first = 0
        targetTrack.append(reactIval)

    thisBattle = heal["battle"]
    toonsInBattle = thisBattle.toons
    glass = globalPropPool.getProp("glass")
    glass.setScale(4.0)
    glass.setHpr(0.0, 90.0, 0.0)
    ladder = globalPropPool.getProp("ladder")
    placeNode = NodePath("lookNode")
    diveProps = [glass, ladder]
    ladderScale = toon.getBodyScale() / 0.66
    scaleUpPoint = Point3(0.5, 0.5, 0.45) * ladderScale
    basePos = toon.getPos()
    glassOffset = Point3(0, 1.1, 0.2)
    glassToonOffset = Point3(0, 1.2, 0.2)
    splashOffset = Point3(0, 1.0, 0.4)
    ladderOffset = Point3(0, 4, 0)
    ladderToonSep = Point3(0, 1, 0) * ladderScale
    diveOffset = Point3(0, 0, 10)
    divePos = add3(add3(ladderOffset, diveOffset), ladderToonSep)
    ladder.setH(toon.getH())
    glassPos = render.getRelativePoint(toon, glassOffset)
    glassToonPos = render.getRelativePoint(toon, glassToonOffset)
    ladderPos = render.getRelativePoint(toon, ladderOffset)
    climbladderPos = render.getRelativePoint(toon, add3(ladderOffset, ladderToonSep))
    divePos = render.getRelativePoint(toon, divePos)
    topDivePos = render.getRelativePoint(toon, diveOffset)
    lookBase = render.getRelativePoint(toon, ladderOffset)
    lookTop = render.getRelativePoint(toon, add3(ladderOffset, diveOffset))
    lookGlass = render.getRelativePoint(toon, glassOffset)
    splash.setPos(splashOffset)
    walkToLadderTime = 1.0
    climbTime = 5.0
    diveTime = 1.0
    ladderGrowTime = 1.5
    splash.setPos(glassPos)
    toonNode = toon.getGeomNode()
    placeNode.reparentTo(render)
    placeNode.setScale(5.0)
    placeNode.setPos(toon.getPos(render))
    placeNode.setHpr(toon.getHpr(render))
    toonscale = toonNode.getScale()
    toonFacing = toon.getHpr()
    if base.localAvatar in thisBattle.activeToons:
        propTrack = Sequence(
            Func(MovieUtil.showProp, glass, render, glassPos),
            Func(MovieUtil.showProp, ladder, render, ladderPos),
            Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
            Func(placeNode.setPos, lookBase),
            LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale=MovieUtil.PNT3_NEARZERO),
            Func(placeNode.setPos, lookTop),
            Wait(2.1),
            MovieCamera.toonGroupHighShot(None, 0),
            Wait(2.1),
            Func(placeNode.setPos, lookGlass),
            Wait(0.4),
            MovieCamera.allGroupLowShot(None, 0),
            Wait(1.8),
            LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale=scaleUpPoint),
            Func(MovieUtil.removeProps, diveProps),
        )
    else:
        propTrack = Sequence(
            Func(MovieUtil.showProp, glass, render, glassPos),
            Func(MovieUtil.showProp, ladder, render, ladderPos),
            Func(toonsLook, toonsInBattle, placeNode, Point3(0, 0, 0)),
            Func(placeNode.setPos, lookBase),
            LerpScaleInterval(ladder, ladderGrowTime, scaleUpPoint, startScale=MovieUtil.PNT3_NEARZERO),
            Func(placeNode.setPos, lookTop),
            Wait(4.2),
            Func(placeNode.setPos, lookGlass),
            Wait(2.2),
            LerpScaleInterval(ladder, ladderGrowTime, MovieUtil.PNT3_NEARZERO, startScale=scaleUpPoint),
            Func(MovieUtil.removeProps, diveProps),
        )
    mtrack = Parallel(
        propTrack,
        __getSoundTrack(level, 0.6, duration=9.0, node=toon),
        Sequence(
            Parallel(
                Sequence(
                    ActorInterval(toon, "walk", loop=0, duration=walkToLadderTime),
                    ActorInterval(toon, "neutral", loop=0, duration=0.1),
                ),
                LerpPosInterval(toon, walkToLadderTime, climbladderPos),
                Wait(ladderGrowTime),
            ),
            Parallel(
                ActorInterval(toon, "climb", loop=0, endFrame=116),
                Sequence(
                    Wait(4.6),
                    Func(toonNode.setTransparency, 1),
                    LerpColorScaleInterval(toonNode, 0.25, VBase4(1, 1.0, 1, 0.0), blendType="easeInOut"),
                    LerpScaleInterval(toonNode, 0.01, 0.1, startScale=toonscale),
                    LerpHprInterval(toon, 0.01, toonFacing),
                    LerpPosInterval(toon, 0.0, glassToonPos),
                    Func(toonNode.clearTransparency),
                    Func(toonNode.clearColorScale),
                    Parallel(ActorInterval(toon, "swim", loop=1, startTime=0.0, endTime=1.0), Wait(1.0)),
                ),
                Sequence(Wait(4.6), Func(splash.play), Wait(1.0), Func(splash.destroy)),
            ),
            Wait(0.5),
            Parallel(
                ActorInterval(toon, "jump", loop=0, startTime=0.2),
                LerpScaleInterval(toonNode, 0.5, toonscale, startScale=0.1),
                Func(stopLook, toonsInBattle),
            ),
        ),
        targetTrack,
    )
    track.append(mtrack)
    if npcId != 0:
        track.append(MovieNPCSOS.teleportOut(heal, toon))
    else:
        track.append(__returnToBase(heal))
    for target in targets:
        targetToon = target["toon"]
        track.append(Func(targetToon.clearChat))

    return track