def __doFireHose(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = 0.3 tAppearDelay = 0.7 dHoseHold = 0.7 dAnimHold = 5.1 tSprayDelay = 2.8 tSpray = 0.2 dSprayScale = 0.1 dSprayHold = 1.8 tContact = 2.9 tSuitDodges = 2.1 tracks = [] toonIntervals = [ WaitInterval(tAppearDelay), FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, 'firehose'), FunctionInterval(toon.loop, extraArgs=['neutral']), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]) ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, tSprayDelay, toon) tracks.append(soundTrack) hose = globalPropPool.getProp('firehose') hydrant = globalPropPool.getProp('hydrant') hands = toon.getRightHands() scale = Toon.toonBodyScales[toon.style.getAnimal()] hydrantPos = toon.getPos() hydrantZ = hydrantPos[2] hosePos = Point3(hydrantPos) hydrantHpr = toon.getHpr() hoseHpr = hydrantHpr baseHeight = 0 base = hydrant.find('**/base') base.setColor(1, 1, 1, 0.5) def moveZ(num, hydrantPos=hydrantPos): hydrantPos.setZ(hydrantPos.getZ() + num) return hydrantPos animal = toon.style.getAnimal() legs = toon.style.legs torso = toon.style.torso torso = torso[0] if legs == 's': if torso == 's': pass else: if torso == 'm': hydrantZ = -0.25 baseHeight = baseHeight + 0.25 else: if torso == 'l': pass else: if legs == 'm': if torso == 's': if animal == 'dog' or animal == 'horse': hydrantZ = 0.4 baseHeight = baseHeight - 0.4 else: if animal == 'cat' or animal == 'rabbit': hydrantZ = 0.32 baseHeight = baseHeight - 0.32 else: if animal == 'mouse' or animal == 'fowl': hydrantZ = 0.26 baseHeight = baseHeight - 0.26 else: if torso == 'm': pass else: if torso == 'l': if animal == 'dog' or animal == 'horse': hydrantZ = 0.36 baseHeight = baseHeight - 0.36 else: if animal == 'cat' or animal == 'rabbit': hydrantZ = 0.32 baseHeight = baseHeight - 0.32 else: if animal == 'mouse' or animal == 'fowl': hydrantZ = 0.29 baseHeight = baseHeight - 0.29 else: if legs == 'l': if torso == 's': if animal == 'dog' or animal == 'horse': hydrantZ = 1.06 baseHeight = baseHeight - 1.06 else: if animal == 'cat' or animal == 'rabbit': hydrantZ = 0.94 baseHeight = baseHeight - 0.94 else: if animal == 'mouse' or animal == 'fowl': hydrantZ = 0.79 baseHeight = baseHeight - 0.79 else: if torso == 'm': if animal == 'dog' or animal == 'horse': hydrantZ = 0.74 baseHeight = baseHeight - 0.74 else: if animal == 'cat' or animal == 'rabbit': hydrantZ = 0.64 baseHeight = baseHeight - 0.64 else: if animal == 'mouse' or animal == 'fowl': hydrantZ = 0.51 baseHeight = baseHeight - 0.51 else: if torso == 'l': if animal == 'dog' or animal == 'horse': hydrantZ = 1.06 baseHeight = baseHeight - 1.06 else: if animal == 'cat' or animal == 'rabbit': hydrantZ = 0.91 baseHeight = baseHeight - 0.91 else: if animal == 'mouse' or animal == 'fowl': hydrantZ = 0.76 baseHeight = baseHeight - 0.76 hosePos.setZ(hydrantZ) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(hose=hose, toon=toon, targetPoint=targetPoint): toon.update(0) if hose.isEmpty() == 1: if callable(targetPoint): return targetPoint() else: return targetPoint joint = hose.find('**/joint-water_stream') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.55, 0)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = [] sprayIvals.append(WaitInterval(tSprayDelay)) sprayIvals.extend( MovieUtil.getSprayIntervals(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale)) tracks.append(Track(sprayIvals)) propIvals = [ Func(battle.movie.needRestoreRenderProp, base), Func(battle.movie.needRestoreRenderProp, hydrant), Func(base.setPos, hydrantPos), Func(base.setHpr, hydrantHpr), Func(base.headsUp, battle, suitPos), Func(base.setScale, scale), Func(base.wrtReparentTo, render), Func(base.setZ, battle.getZ()), Func(hydrant.reparentTo, base), Func(hydrant.setZ, toon, hydrantZ), LerpScaleInterval(base, tAppearDelay * 0.5, Point3(scale, scale, scale * 1.4), startScale=Point3(scale, scale, 0.01)), LerpScaleInterval(base, tAppearDelay * 0.3, Point3(scale, scale, scale * 0.8), startScale=Point3(scale, scale, scale * 1.4)), LerpScaleInterval(base, tAppearDelay * 0.1, Point3(scale, scale, scale * 1.2), startScale=Point3(scale, scale, scale * 0.8)), LerpScaleInterval(base, tAppearDelay * 0.1, Point3(scale, scale, scale), startScale=Point3(scale, scale, scale * 1.2)), Func(battle.movie.needRestoreRenderProp, hose), Func(hose.reparentTo, hydrant), Func(hose.setPos, 0, 0, 0), Func(hose.setHpr, 0, 0, 0), Func(hose.setScale, 1, 1, 1), FunctionInterval(hose.pose, extraArgs=['firehose', 2]), ActorInterval(hose, 'firehose', duration=dAnimHold), WaitInterval(dHoseHold - 0.2), LerpScaleInterval(base, 0.2, Point3(scale, scale, 0.01), startScale=Point3(scale, scale, scale)), FunctionInterval(MovieUtil.removeProps, extraArgs=[[hydrant, hose]]), FunctionInterval(MovieUtil.removeProps, extraArgs=[[base]]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[hydrant]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[hose]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[base]) ] tracks.append(Track(propIvals)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, 0.4, 2.7, battle, splashHold=1.5)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun)) return MultiTrack(tracks)
def __doWaterGun(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tPistol = 0.0 dPistolScale = 0.5 dPistolHold = 1.8 tSpray = 48.0 / toon.getFrameRate('water-gun') sprayPoseFrame = 63 dSprayScale = 0.1 dSprayHold = 0.3 tContact = tSpray + dSprayScale tSuitDodges = 1.1 tracks = [] toonIntervals = [ FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, 'water-gun'), FunctionInterval(toon.loop, extraArgs=['neutral']), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]) ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, 1.8, toon) tracks.append(soundTrack) pistol = globalPropPool.getProp('water-gun') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(pistol=pistol, toon=toon): toon.update(0) joint = pistol.find('**/joint-nozzle') p = joint.getPos(render) return p sprayIvals = MovieUtil.getSprayIntervals(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) pistolPos = Point3(0.28, 0.1, 0.08) pistolHpr = Point3(-4.76, -85.6, -85.91) pistolIvals = [ FunctionInterval( MovieUtil.showProp, extraArgs=[pistol, hand_jointpath0, pistolPos, pistolHpr]), LerpScaleInterval(pistol, dPistolScale, pistol.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tSpray - dPistolScale) ] pistolIvals.extend(sprayIvals) pistolIvals.append(WaitInterval(dPistolHold)) pistolIvals.append( LerpScaleInterval(pistol, dPistolScale, MovieUtil.PNT3_NEARZERO)) pistolIvals.append( FunctionInterval(hand_jointpath1.removeNode, extraArgs=[])) pistolIvals.append( FunctionInterval(hand_jointpath0.removeNode, extraArgs=[])) pistolIvals.append( FunctionInterval(MovieUtil.removeProp, extraArgs=[pistol])) tracks.append(Track(pistolIvals)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, 0.3, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun)) return MultiTrack(tracks)
def __doSeltzerBottle(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tBottle = 0.0 dBottleScale = 0.5 dBottleHold = 3.0 tSpray = 53.0 / toon.getFrameRate('hold-bottle') + 0.05 dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tContact - 0.7, 0.0) tracks = [] toonIntervals = [ FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, 'hold-bottle'), FunctionInterval(toon.loop, extraArgs=['neutral']), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]) ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, tSpray - 0.1, toon) tracks.append(soundTrack) bottle = globalPropPool.getProp('bottle') hands = toon.getRightHands() targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(bottle=bottle, toon=toon): toon.update(0) joint = bottle.find('**/joint-toSpray') n = hidden.attachNewNode('pointBehindSprayProp') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.4, 0)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = MovieUtil.getSprayIntervals(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) bottleIntervals = [ FunctionInterval(MovieUtil.showProp, extraArgs=[bottle, hand_jointpath0]), LerpScaleInterval(bottle, dBottleScale, bottle.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tSpray - dBottleScale) ] bottleIntervals.extend(sprayIvals) bottleIntervals.append(WaitInterval(dBottleHold)) bottleIntervals.append( LerpScaleInterval(bottle, dBottleScale, MovieUtil.PNT3_NEARZERO)) bottleIntervals.append( FunctionInterval(hand_jointpath1.removeNode, extraArgs=[])) bottleIntervals.append( FunctionInterval(hand_jointpath0.removeNode, extraArgs=[])) bottleIntervals.append( FunctionInterval(MovieUtil.removeProp, extraArgs=[bottle])) tracks.append(Track(bottleIntervals)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun)) return MultiTrack(tracks)
def __doFlower(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tTotalFlowerToonAnimationTime = 2.5 tFlowerFirstAppears = 1.0 dFlowerScaleTime = 0.5 tSprayStarts = tTotalFlowerToonAnimationTime dSprayScale = 0.2 dSprayHold = 0.1 tContact = tSprayStarts + dSprayScale tSuitDodges = tTotalFlowerToonAnimationTime tracks = [] button = globalPropPool.getProp('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonIvals = [] toonIvals.append( FunctionInterval(MovieUtil.showProps, extraArgs=[buttons, hands])) toonIvals.append( FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos])) toonIvals.append(ActorInterval(toon, 'pushbutton')) toonIvals.append( FunctionInterval(MovieUtil.removeProps, extraArgs=[buttons])) toonIvals.append(FunctionInterval(toon.loop, extraArgs=['neutral'])) toonIvals.append(FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr])) tracks.append(Track(toonIvals)) tracks.append( __getSoundTrack(level, hitSuit, tTotalFlowerToonAnimationTime - 0.4, toon)) flower = globalPropPool.getProp('squirting-flower') flower.setScale(1.5, 1.5, 1.5) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(flower=flower): toon.update(0) return flower.getPos(render) sprayIvals = MovieUtil.getSprayIntervals(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) lodnames = toon.getLODNames() toonlod0 = toon.getLOD(lodnames[0]) toonlod1 = toon.getLOD(lodnames[1]) flower_joint0 = toonlod0.find('**/joint-attachFlower') flower_joint1 = toonlod1.find('**/joint-attachFlower') flower_jointpath0 = flower_joint0.attachNewNode( 'attachFlower-InstanceNode') flower_jointpath1 = flower_jointpath0.instanceTo(flower_joint1) flowerIntervals = [ WaitInterval(tFlowerFirstAppears), FunctionInterval(flower.reparentTo, extraArgs=[flower_jointpath0]), LerpScaleInterval(flower, dFlowerScaleTime, flower.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tTotalFlowerToonAnimationTime - dFlowerScaleTime - tFlowerFirstAppears) ] flowerIntervals.append(WaitInterval(0.5)) flowerIntervals.extend(sprayIvals) flowerIntervals.append( LerpScaleInterval(flower, dFlowerScaleTime, MovieUtil.PNT3_NEARZERO)) flowerIntervals.append( FunctionInterval(flower_jointpath1.removeNode, extraArgs=[])) flowerIntervals.append( FunctionInterval(flower_jointpath0.removeNode, extraArgs=[])) flowerIntervals.append( FunctionInterval(MovieUtil.removeProp, extraArgs=[flower])) tracks.append(Track(flowerIntervals)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSprayStarts + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun)) return MultiTrack(tracks)
def __doWaterGlass(squirt, delay, fShowStun): toon = squirt['toon'] level = squirt['level'] hpbonus = squirt['hpbonus'] target = squirt['target'] suit = target['suit'] hp = target['hp'] kbbonus = target['kbbonus'] died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] battle = squirt['battle'] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] dGlassHold = 5.0 dGlassScale = 0.5 tSpray = 82.0 / toon.getFrameRate('spit') sprayPoseFrame = 88 dSprayScale = 0.1 dSprayHold = 0.1 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) tracks = [] toonIntervals = [ActorInterval(toon, 'spit')] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, 1.7, toon) tracks.append(soundTrack) glass = globalPropPool.getProp('glass') hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode('handJoint0-path') hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) glassIntervals = [ FunctionInterval(MovieUtil.showProp, extraArgs=[glass, hand_jointpath0]), ActorInterval(glass, 'glass'), FunctionInterval(hand_jointpath1.removeNode, extraArgs=[]), FunctionInterval(hand_jointpath0.removeNode, extraArgs=[]), FunctionInterval(MovieUtil.removeProp, extraArgs=[glass]) ] tracks.append(Track(glassIntervals)) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(toon=toon): toon.update(0) lod0 = toon.getLOD(toon.getLODNames()[0]) joint = lod0.find('**/joint-head') n = hidden.attachNewNode('pointInFrontOfHead') n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, 0.3, -0.2)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = MovieUtil.getSprayIntervals(battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale) tracks.append(Track([WaitInterval(tSpray)] + sprayIvals)) if hp > 0: tracks.append( __getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack(suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, 'squirt-small-react', died, leftSuits, rightSuits, battle, toon, fShowStun)) return MultiTrack(tracks)
def __doFireHose(squirt, delay, fShowStun): toon = squirt["toon"] level = squirt["level"] hpbonus = squirt["hpbonus"] target = squirt["target"] suit = target["suit"] hp = target["hp"] kbbonus = target["kbbonus"] died = target["died"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] battle = squirt["battle"] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = 0.29999999999999999 tAppearDelay = 0.69999999999999996 dHoseHold = 0.69999999999999996 dAnimHold = 5.0999999999999996 tSprayDelay = 2.7999999999999998 tSpray = 0.20000000000000001 dSprayScale = 0.10000000000000001 dSprayHold = 1.8 tContact = 2.8999999999999999 tSuitDodges = 2.1000000000000001 tracks = [] toonIntervals = [ WaitInterval(tAppearDelay), FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, "firehose"), FunctionInterval(toon.loop, extraArgs=["neutral"]), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]), ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, tSprayDelay, toon) tracks.append(soundTrack) hose = globalPropPool.getProp("firehose") hydrant = globalPropPool.getProp("hydrant") hands = toon.getRightHands() scale = Toon.toonBodyScales[toon.style.getAnimal()] hydrantPos = toon.getPos() hydrantZ = hydrantPos[2] hosePos = Point3(hydrantPos) hydrantHpr = toon.getHpr() hoseHpr = hydrantHpr baseHeight = 0 base = hydrant.find("**/base") base.setColor(1, 1, 1, 0.5) def moveZ(num, hydrantPos=hydrantPos): hydrantPos.setZ(hydrantPos.getZ() + num) return hydrantPos animal = toon.style.getAnimal() legs = toon.style.legs torso = toon.style.torso torso = torso[0] if legs == "s": if torso == "s": pass 1 if torso == "m": hydrantZ = -0.25 baseHeight = baseHeight + 0.25 elif torso == "l": pass elif legs == "m": if torso == "s": if animal == "dog" or animal == "horse": hydrantZ = 0.40000000000000002 baseHeight = baseHeight - 0.40000000000000002 elif animal == "cat" or animal == "rabbit": hydrantZ = 0.32000000000000001 baseHeight = baseHeight - 0.32000000000000001 elif animal == "mouse" or animal == "fowl": hydrantZ = 0.26000000000000001 baseHeight = baseHeight - 0.26000000000000001 elif torso == "m": pass elif torso == "l": if animal == "dog" or animal == "horse": hydrantZ = 0.35999999999999999 baseHeight = baseHeight - 0.35999999999999999 elif animal == "cat" or animal == "rabbit": hydrantZ = 0.32000000000000001 baseHeight = baseHeight - 0.32000000000000001 elif animal == "mouse" or animal == "fowl": hydrantZ = 0.28999999999999998 baseHeight = baseHeight - 0.28999999999999998 elif legs == "l": if torso == "s": if animal == "dog" or animal == "horse": hydrantZ = 1.0600000000000001 baseHeight = baseHeight - 1.0600000000000001 elif animal == "cat" or animal == "rabbit": hydrantZ = 0.93999999999999995 baseHeight = baseHeight - 0.93999999999999995 elif animal == "mouse" or animal == "fowl": hydrantZ = 0.79000000000000004 baseHeight = baseHeight - 0.79000000000000004 elif torso == "m": if animal == "dog" or animal == "horse": hydrantZ = 0.73999999999999999 baseHeight = baseHeight - 0.73999999999999999 elif animal == "cat" or animal == "rabbit": hydrantZ = 0.64000000000000001 baseHeight = baseHeight - 0.64000000000000001 elif animal == "mouse" or animal == "fowl": hydrantZ = 0.51000000000000001 baseHeight = baseHeight - 0.51000000000000001 elif torso == "l": if animal == "dog" or animal == "horse": hydrantZ = 1.0600000000000001 baseHeight = baseHeight - 1.0600000000000001 elif animal == "cat" or animal == "rabbit": hydrantZ = 0.91000000000000003 baseHeight = baseHeight - 0.91000000000000003 elif animal == "mouse" or animal == "fowl": hydrantZ = 0.76000000000000001 baseHeight = baseHeight - 0.76000000000000001 hosePos.setZ(hydrantZ) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(hose=hose, toon=toon, targetPoint=targetPoint): toon.update(0) if hose.isEmpty() == 1: if callable(targetPoint): return targetPoint() else: return targetPoint joint = hose.find("**/joint-water_stream") n = hidden.attachNewNode("pointBehindSprayProp") n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.55000000000000004, 0)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = [] sprayIvals.append(WaitInterval(tSprayDelay)) sprayIvals.extend( MovieUtil.getSprayIntervals( battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale, ) ) tracks.append(Track(sprayIvals)) propIvals = [ Func(battle.movie.needRestoreRenderProp, base), Func(battle.movie.needRestoreRenderProp, hydrant), Func(base.setPos, hydrantPos), Func(base.setHpr, hydrantHpr), Func(base.headsUp, battle, suitPos), Func(base.setScale, scale), Func(base.wrtReparentTo, render), Func(base.setZ, battle.getZ()), Func(hydrant.reparentTo, base), Func(hydrant.setZ, toon, hydrantZ), LerpScaleInterval( base, tAppearDelay * 0.5, Point3(scale, scale, scale * 1.3999999999999999), startScale=Point3(scale, scale, 0.01), ), LerpScaleInterval( base, tAppearDelay * 0.29999999999999999, Point3(scale, scale, scale * 0.80000000000000004), startScale=Point3(scale, scale, scale * 1.3999999999999999), ), LerpScaleInterval( base, tAppearDelay * 0.10000000000000001, Point3(scale, scale, scale * 1.2), startScale=Point3(scale, scale, scale * 0.80000000000000004), ), LerpScaleInterval( base, tAppearDelay * 0.10000000000000001, Point3(scale, scale, scale), startScale=Point3(scale, scale, scale * 1.2), ), Func(battle.movie.needRestoreRenderProp, hose), Func(hose.reparentTo, hydrant), Func(hose.setPos, 0, 0, 0), Func(hose.setHpr, 0, 0, 0), Func(hose.setScale, 1, 1, 1), FunctionInterval(hose.pose, extraArgs=["firehose", 2]), ActorInterval(hose, "firehose", duration=dAnimHold), WaitInterval(dHoseHold - 0.20000000000000001), LerpScaleInterval( base, 0.20000000000000001, Point3(scale, scale, 0.01), startScale=Point3(scale, scale, scale) ), FunctionInterval(MovieUtil.removeProps, extraArgs=[[hydrant, hose]]), FunctionInterval(MovieUtil.removeProps, extraArgs=[[base]]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[hydrant]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[hose]), FunctionInterval(battle.movie.clearRenderProp, extraArgs=[base]), ] tracks.append(Track(propIvals)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, 0.40000000000000002, 2.7000000000000002, battle, splashHold=1.5)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack( suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, "squirt-small-react", died, leftSuits, rightSuits, battle, toon, fShowStun, ) ) return MultiTrack(tracks)
def __doSeltzerBottle(squirt, delay, fShowStun): toon = squirt["toon"] level = squirt["level"] hpbonus = squirt["hpbonus"] target = squirt["target"] suit = target["suit"] hp = target["hp"] kbbonus = target["kbbonus"] died = target["died"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] battle = squirt["battle"] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tBottle = 0.0 dBottleScale = 0.5 dBottleHold = 3.0 tSpray = 53.0 / toon.getFrameRate("hold-bottle") + 0.050000000000000003 dSprayScale = 0.20000000000000001 dSprayHold = 0.10000000000000001 tContact = tSpray + dSprayScale tSuitDodges = max(tContact - 0.69999999999999996, 0.0) tracks = [] toonIntervals = [ FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, "hold-bottle"), FunctionInterval(toon.loop, extraArgs=["neutral"]), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]), ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, tSpray - 0.10000000000000001, toon) tracks.append(soundTrack) bottle = globalPropPool.getProp("bottle") hands = toon.getRightHands() targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(bottle=bottle, toon=toon): toon.update(0) joint = bottle.find("**/joint-toSpray") n = hidden.attachNewNode("pointBehindSprayProp") n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, -0.40000000000000002, 0)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = MovieUtil.getSprayIntervals( battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale, ) hand_jointpath0 = hands[0].attachNewNode("handJoint0-path") hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) bottleIntervals = [ FunctionInterval(MovieUtil.showProp, extraArgs=[bottle, hand_jointpath0]), LerpScaleInterval(bottle, dBottleScale, bottle.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tSpray - dBottleScale), ] bottleIntervals.extend(sprayIvals) bottleIntervals.append(WaitInterval(dBottleHold)) bottleIntervals.append(LerpScaleInterval(bottle, dBottleScale, MovieUtil.PNT3_NEARZERO)) bottleIntervals.append(FunctionInterval(hand_jointpath1.removeNode, extraArgs=[])) bottleIntervals.append(FunctionInterval(hand_jointpath0.removeNode, extraArgs=[])) bottleIntervals.append(FunctionInterval(MovieUtil.removeProp, extraArgs=[bottle])) tracks.append(Track(bottleIntervals)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack( suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, "squirt-small-react", died, leftSuits, rightSuits, battle, toon, fShowStun, ) ) return MultiTrack(tracks)
def __doWaterGun(squirt, delay, fShowStun): toon = squirt["toon"] level = squirt["level"] hpbonus = squirt["hpbonus"] target = squirt["target"] suit = target["suit"] hp = target["hp"] kbbonus = target["kbbonus"] died = target["died"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] battle = squirt["battle"] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tPistol = 0.0 dPistolScale = 0.5 dPistolHold = 1.8 tSpray = 48.0 / toon.getFrameRate("water-gun") sprayPoseFrame = 63 dSprayScale = 0.10000000000000001 dSprayHold = 0.29999999999999999 tContact = tSpray + dSprayScale tSuitDodges = 1.1000000000000001 tracks = [] toonIntervals = [ FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos]), ActorInterval(toon, "water-gun"), FunctionInterval(toon.loop, extraArgs=["neutral"]), FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr]), ] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, 1.8, toon) tracks.append(soundTrack) pistol = globalPropPool.getProp("water-gun") hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode("handJoint0-path") hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(pistol=pistol, toon=toon): toon.update(0) joint = pistol.find("**/joint-nozzle") p = joint.getPos(render) return p sprayIvals = MovieUtil.getSprayIntervals( battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale, ) pistolPos = Point3(0.28000000000000003, 0.10000000000000001, 0.080000000000000002) pistolHpr = Point3(-4.7599999999999998, -85.599999999999994, -85.909999999999997) pistolIvals = [ FunctionInterval(MovieUtil.showProp, extraArgs=[pistol, hand_jointpath0, pistolPos, pistolHpr]), LerpScaleInterval(pistol, dPistolScale, pistol.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tSpray - dPistolScale), ] pistolIvals.extend(sprayIvals) pistolIvals.append(WaitInterval(dPistolHold)) pistolIvals.append(LerpScaleInterval(pistol, dPistolScale, MovieUtil.PNT3_NEARZERO)) pistolIvals.append(FunctionInterval(hand_jointpath1.removeNode, extraArgs=[])) pistolIvals.append(FunctionInterval(hand_jointpath0.removeNode, extraArgs=[])) pistolIvals.append(FunctionInterval(MovieUtil.removeProp, extraArgs=[pistol])) tracks.append(Track(pistolIvals)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, 0.29999999999999999, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack( suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, "squirt-small-react", died, leftSuits, rightSuits, battle, toon, fShowStun, ) ) return MultiTrack(tracks)
def __doWaterGlass(squirt, delay, fShowStun): toon = squirt["toon"] level = squirt["level"] hpbonus = squirt["hpbonus"] target = squirt["target"] suit = target["suit"] hp = target["hp"] kbbonus = target["kbbonus"] died = target["died"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] battle = squirt["battle"] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] dGlassHold = 5.0 dGlassScale = 0.5 tSpray = 82.0 / toon.getFrameRate("spit") sprayPoseFrame = 88 dSprayScale = 0.10000000000000001 dSprayHold = 0.10000000000000001 tContact = tSpray + dSprayScale tSuitDodges = max(tSpray - 0.5, 0.0) tracks = [] toonIntervals = [ActorInterval(toon, "spit")] tracks.append(Track(toonIntervals)) soundTrack = __getSoundTrack(level, hitSuit, 1.7, toon) tracks.append(soundTrack) glass = globalPropPool.getProp("glass") hands = toon.getRightHands() hand_jointpath0 = hands[0].attachNewNode("handJoint0-path") hand_jointpath1 = hand_jointpath0.instanceTo(hands[1]) glassIntervals = [ FunctionInterval(MovieUtil.showProp, extraArgs=[glass, hand_jointpath0]), ActorInterval(glass, "glass"), FunctionInterval(hand_jointpath1.removeNode, extraArgs=[]), FunctionInterval(hand_jointpath0.removeNode, extraArgs=[]), FunctionInterval(MovieUtil.removeProp, extraArgs=[glass]), ] tracks.append(Track(glassIntervals)) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(toon=toon): toon.update(0) lod0 = toon.getLOD(toon.getLODNames()[0]) joint = lod0.find("**/joint-head") n = hidden.attachNewNode("pointInFrontOfHead") n.reparentTo(toon) n.setPos(joint.getPos(toon) + Point3(0, 0.29999999999999999, -0.20000000000000001)) p = n.getPos(render) n.removeNode() del n return p sprayIvals = MovieUtil.getSprayIntervals( battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale, ) tracks.append(Track([WaitInterval(tSpray)] + sprayIvals)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSpray + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack( suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, "squirt-small-react", died, leftSuits, rightSuits, battle, toon, fShowStun, ) ) return MultiTrack(tracks)
def __doFlower(squirt, delay, fShowStun): toon = squirt["toon"] level = squirt["level"] hpbonus = squirt["hpbonus"] target = squirt["target"] suit = target["suit"] hp = target["hp"] kbbonus = target["kbbonus"] died = target["died"] leftSuits = target["leftSuits"] rightSuits = target["rightSuits"] battle = squirt["battle"] suitPos = suit.getPos(battle) origHpr = toon.getHpr(battle) hitSuit = hp > 0 scale = sprayScales[level] tTotalFlowerToonAnimationTime = 2.5 tFlowerFirstAppears = 1.0 dFlowerScaleTime = 0.5 tSprayStarts = tTotalFlowerToonAnimationTime dSprayScale = 0.20000000000000001 dSprayHold = 0.10000000000000001 tContact = tSprayStarts + dSprayScale tSuitDodges = tTotalFlowerToonAnimationTime tracks = [] button = globalPropPool.getProp("button") button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() toonIvals = [] toonIvals.append(FunctionInterval(MovieUtil.showProps, extraArgs=[buttons, hands])) toonIvals.append(FunctionInterval(toon.headsUp, extraArgs=[battle, suitPos])) toonIvals.append(ActorInterval(toon, "pushbutton")) toonIvals.append(FunctionInterval(MovieUtil.removeProps, extraArgs=[buttons])) toonIvals.append(FunctionInterval(toon.loop, extraArgs=["neutral"])) toonIvals.append(FunctionInterval(toon.setHpr, extraArgs=[battle, origHpr])) tracks.append(Track(toonIvals)) tracks.append(__getSoundTrack(level, hitSuit, tTotalFlowerToonAnimationTime - 0.40000000000000002, toon)) flower = globalPropPool.getProp("squirting-flower") flower.setScale(1.5, 1.5, 1.5) targetPoint = lambda suit=suit: __suitTargetPoint(suit) def getSprayStartPos(flower=flower): toon.update(0) return flower.getPos(render) sprayIvals = MovieUtil.getSprayIntervals( battle, WaterSprayColor, getSprayStartPos, targetPoint, dSprayScale, dSprayHold, dSprayScale, horizScale=scale, vertScale=scale, ) lodnames = toon.getLODNames() toonlod0 = toon.getLOD(lodnames[0]) toonlod1 = toon.getLOD(lodnames[1]) flower_joint0 = toonlod0.find("**/joint-attachFlower") flower_joint1 = toonlod1.find("**/joint-attachFlower") flower_jointpath0 = flower_joint0.attachNewNode("attachFlower-InstanceNode") flower_jointpath1 = flower_jointpath0.instanceTo(flower_joint1) flowerIntervals = [ WaitInterval(tFlowerFirstAppears), FunctionInterval(flower.reparentTo, extraArgs=[flower_jointpath0]), LerpScaleInterval(flower, dFlowerScaleTime, flower.getScale(), startScale=MovieUtil.PNT3_NEARZERO), WaitInterval(tTotalFlowerToonAnimationTime - dFlowerScaleTime - tFlowerFirstAppears), ] flowerIntervals.append(WaitInterval(0.5)) flowerIntervals.extend(sprayIvals) flowerIntervals.append(LerpScaleInterval(flower, dFlowerScaleTime, MovieUtil.PNT3_NEARZERO)) flowerIntervals.append(FunctionInterval(flower_jointpath1.removeNode, extraArgs=[])) flowerIntervals.append(FunctionInterval(flower_jointpath0.removeNode, extraArgs=[])) flowerIntervals.append(FunctionInterval(MovieUtil.removeProp, extraArgs=[flower])) tracks.append(Track(flowerIntervals)) if hp > 0: tracks.append(__getSplashTrack(targetPoint, scale, tSprayStarts + dSprayScale, battle)) if hp > 0 or delay <= 0: tracks.append( __getSuitTrack( suit, tContact, tSuitDodges, hp, hpbonus, kbbonus, "squirt-small-react", died, leftSuits, rightSuits, battle, toon, fShowStun, ) ) return MultiTrack(tracks)