def startDrop(self, entity): if entity and self.dropLoc: endPos = self.dropLoc dropMdl = entity.find('**/DropMdl') startPos = Point3(endPos.getX(), endPos.getY(), endPos.getZ() + 20) entity.setPos(startPos.getX(), startPos.getY() + 2, startPos.getZ()) dropMdl.setScale(5 * 0.85) entity.node().setBounds(OmniBoundingVolume()) entity.node().setFinal(1) entity.headsUp(self.avatar) self.buildCollisions(entity) objectTrack = Sequence() animProp = LerpPosInterval(entity, self.fallDuration, endPos, startPos=startPos) bounceProp = Effects.createZBounce(entity, 2, endPos, 0.5, 1.5) objAnimShrink = Sequence(Func(dropMdl.setScale, 5), Wait(0.5), Func(entity.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = CIGlobals.makeDropShadow(1.0) dropShadow.reparentTo(hidden) dropShadow.setPos(endPos) shadowTrack = Sequence( Func(dropShadow.reparentTo, render), LerpScaleInterval(dropShadow, self.fallDuration + 0.1, (1, 1, 1), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.8), Func(dropShadow.removeNode)) Parallel( Sequence(Wait(self.fallDuration), Func(self.completeDrop)), objectTrack, shadowTrack).start() self.dropLoc = None
def startDrop(self): if self.gag and self.dropLoc: x, y, z = self.dropLoc startPos = Point3(x, y, z + 20) self.gag.setPos(x, y + 2, z) self.gag.node().setBounds(OmniBoundingVolume()) self.gag.node().setFinal(1) self.gag.headsUp(self.avatar) if self.rotate90: self.gag.setH(self.gag.getH() - 90) self.buildCollisions() objectTrack = Sequence() animProp = LerpPosInterval(self.gag, self.fallDuration, self.dropLoc, startPos=startPos) bounceProp = Effects.createZBounce(self.gag, 2, self.dropLoc, 0.5, 1.5) objAnimShrink = Sequence(Wait(0.5), Func(self.gag.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = loader.loadModel("phase_3/models/props/drop_shadow.bam") dropShadow.reparentTo(render) dropShadow.setPos(self.dropLoc) dropShadow.setScale(self.getShadowScale()) shadowTrack = Sequence( LerpScaleInterval( dropShadow, self.fallDuration + 0.1, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01) ), Wait(0.3), Func(dropShadow.removeNode), ) self.objTrack = Parallel( Sequence(Wait(self.fallDuration), Func(self.completeDrop)), objectTrack, shadowTrack ) self.objTrack.start() self.dropLoc = None return
def startDrop(self, entity): if entity and self.dropLoc: x, y, z = self.dropLoc startPos = Point3(x, y, z + 20) entity.setPos(startPos) entity.node().setBounds(OmniBoundingVolume()) entity.node().setFinal(1) entity.headsUp(self.avatar) entity.setPythonTag('EntityRoot', entity) if self.rotate90: entity.setH(entity.getH() - 90) self.buildCollisions(entity) objectTrack = Sequence() animProp = LerpPosInterval(entity, self.fallDuration, self.dropLoc, startPos=startPos) bounceProp = Effects.createZBounce(entity, 2, self.dropLoc, 0.5, 1.5) objAnimShrink = Sequence(Wait(0.5), Func(entity.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = CIGlobals.makeDropShadow(1.0) dropShadow.reparentTo(hidden) dropShadow.setPos(self.dropLoc) if self.name == GagGlobals.FlowerPot: dropShadow.setZ(dropShadow.getZ() - 3.5) dropShadow.setScale(0.01) shadowTrack = Sequence( Func(dropShadow.reparentTo, render), LerpScaleInterval(dropShadow, self.fallDuration + 0.1, self.getShadowScale(), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.8), Func(dropShadow.removeNode)) self.objTrack = Parallel( Sequence(Wait(self.fallDuration), Func(self.completeDrop)), objectTrack, shadowTrack) self.objTrack.start() self.dropLoc = None
def startDrop(self): if self.gag and self.dropLoc: endPos = self.dropLoc startPos = Point3(endPos.getX(), endPos.getY(), endPos.getZ() + 20) self.gag.setPos(startPos.getX(), startPos.getY() + 2, startPos.getZ()) self.gag.setScale(self.gag.getScale() * 0.75) self.gag.node().setBounds(OmniBoundingVolume()) self.gag.node().setFinal(1) self.gag.headsUp(self.avatar) self.buildCollisions() objectTrack = Sequence() animProp = LerpPosInterval(self.gag, self.fallDuration, endPos, startPos=startPos) bounceProp = Effects.createZBounce(self.gag, 2, endPos, 0.5, 1.5) objAnimShrink = Sequence(Wait(0.5), Func(self.gag.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = loader.loadModel('phase_3/models/props/drop_shadow.bam') dropShadow.reparentTo(render) dropShadow.setPos(endPos) shadowTrack = Sequence(LerpScaleInterval(dropShadow, self.fallDuration + 0.1, dropShadow.getScale() * 2, startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(dropShadow.removeNode)) Parallel(Sequence(Wait(self.fallDuration), Func(self.completeDrop), Wait(4), Func(self.cleanupGag)), objectTrack, shadowTrack).start() self.dropLoc = None return
def startDrop(self): if self.gag and self.getLocation(): endPos = self.getLocation() startPos = Point3(endPos.getX(), endPos.getY(), endPos.getZ() + 20) self.gag.setPos(startPos.getX(), startPos.getY() + 2, startPos.getZ()) self.gag.setScale(5) self.gag.setP(90) self.gag.headsUp(self.avatar) self.gag.setH(self.gag.getH() - 180) self.gag.node().setBounds(OmniBoundingVolume()) self.gag.node().setFinal(1) self.buildCollisions() objectTrack = Sequence() animProp = LerpPosInterval(self.gag, self.fallDuration, endPos, startPos=startPos) bounceProp = Effects.createZBounce(self.gag, 2, endPos, 0.5, 1.5) objAnimShrink = Sequence(Func(self.gag.setP, 90), Wait(0.5), Func(self.gag.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = loader.loadModel( 'phase_3/models/props/drop_shadow.bam') dropShadow.reparentTo(render) dropShadow.setPos(endPos) shadowTrack = Sequence( LerpScaleInterval(dropShadow, self.fallDuration + 0.1, dropShadow.getScale() * 3, startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(dropShadow.removeNode)) Parallel( Sequence(Wait(self.fallDuration), Func(self.completeDrop), Wait(4), Func(self.cleanupGag)), objectTrack, shadowTrack).start() self.dropLoc = None return
def startDrop(self): if self.gag and self.dropLoc: x, y, z = self.dropLoc startPos = Point3(x, y, z + 20) self.gag.setPos(x, y + 2, z) self.gag.node().setBounds(OmniBoundingVolume()) self.gag.node().setFinal(1) self.gag.headsUp(self.avatar) if self.rotate90: self.gag.setH(self.gag.getH() - 90) self.buildCollisions() objectTrack = Sequence() animProp = LerpPosInterval(self.gag, self.fallDuration, self.dropLoc, startPos=startPos) bounceProp = Effects.createZBounce(self.gag, 2, self.dropLoc, 0.5, 1.5) objAnimShrink = Sequence(Wait(0.5), Func(self.gag.reparentTo, render), animProp, bounceProp) objectTrack.append(objAnimShrink) dropShadow = loader.loadModel( 'phase_3/models/props/drop_shadow.bam') dropShadow.reparentTo(render) dropShadow.setPos(self.dropLoc) dropShadow.setScale(self.getShadowScale()) shadowTrack = Sequence( LerpScaleInterval(dropShadow, self.fallDuration + 0.1, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(dropShadow.removeNode)) self.objTrack = Parallel( Sequence(Wait(self.fallDuration), Func(self.completeDrop)), objectTrack, shadowTrack) self.objTrack.start() self.dropLoc = None return
def __dropObject(drop, delay, objName, level, alreadyDodged, alreadyTeased, npcs, target, npcDrops): toon = drop['toon'] repeatNPC = 0 battle = drop['battle'] if ('npc' in drop): toon = drop['npc'] if (toon in npcDrops): repeatNPC = 1 else: npcDrops[toon] = 1 origHpr = Vec3(0, 0, 0) else: origHpr = toon.getHpr(battle) hpbonus = drop['hpbonus'] suit = target['suit'] hp = target['hp'] hitSuit = (hp > 0) died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] suitPos = suit.getPos(battle) majorObject = (level >= 3) if (repeatNPC == 0): button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() object = globalPropPool.getProp(objName) objectType = globalPropPool.getPropType(objName) # The safe and weight are a bit too big if (objName == 'weight'): object.setScale(object.getScale() * 0.75) elif (objName == 'safe'): object.setScale(object.getScale() * 0.85) # The object will likely animate far from its initial bounding # volume while it drops. To work around this bug, we artificially # change the object's bounding volume to be really big. In fact, # we make it infinite, so it will never be culled while it's # onscreen. node = object.node() node.setBounds(OmniBoundingVolume()) node.setFinal(1) # create the soundTrack soundTrack = __getSoundTrack(level, hitSuit, toon) # toon pulls the button out, presses it, and puts it away toonTrack = Sequence() if (repeatNPC == 0): toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) # button scales up in toon's hand as he takes it out, and # scales down to nothing as it is put away buttonTrack = Sequence() if (repeatNPC == 0): buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) # object appears above suit objectTrack = Sequence() def posObject(object, suit, level, majorObject, miss, battle=battle): object.reparentTo(battle) # Options for positioning a drop: # 1) Any successful drop on an unlured suit - strikes at suit battle pos # 2) Unsuccessful drops on an unlured suit that are of the largest three - # these strike behind the suit (who shouldn't dodge) # 3) The first three (smallest drops) on a lured suit strike the battle pos, # where the larger ones get bumped back a bit. if (battle.isSuitLured(suit)): # suit is lured, strike at battle position suitPos, suitHpr = battle.getActorPosHpr(suit) object.setPos(suitPos) object.setHpr(suitHpr) if (level >= 3): # bump back larger drops object.setY(object.getY() + 2) else: object.setPos(suit.getPos(battle)) object.setHpr(suit.getHpr(battle)) if (miss and level >= 3): object.setY(object.getY(battle) + 5) if not majorObject: if not miss: shoulderHeight = shoulderHeights[suit.style.body] * suit.scale object.setZ(object.getPos(battle)[2] + shoulderHeight) # fix up the Z offset of the prop object.setZ(object.getPos(battle)[2] + objZOffsets[level]) # the object will need to scale down to nothing at some point # and then it will immediately get deleted # since we already have an animation interval playing, # we need to put the scale on a separate track. # to avoid cases where the object has been deleted, # and the scale interval is still trying to scale the # object, we'll put the animation and scale intervals into # separate tracks, combine them into a track, and # put the hide interval after the track. objectTrack.append(Func(battle.movie.needRestoreRenderProp, object)) objInit = Func(posObject, object, suit, level, majorObject, (hp <= 0)) objectTrack.append(Wait(delay + tObjectAppears)) objectTrack.append(objInit) # we can assume that all drop props are animated if hp > 0 or (level == 1 or level == 2): # prop hits the suit #import pdb; pdb.set_trace() if hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objAnimShrink = ParallelEndTogether(animProp, shrinkProp) objectTrack.append(objAnimShrink) else: # donald boat currently does not have animation startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, (hp <= 0)) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) #objAnimShrink = ParallelEndTogether(animProp, shrinkProp) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) else: # prop misses the suit # only play the animation up to the point where it lands if hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName, duration=landFrames[level] / 24.) def poseProp(prop, animName, level): prop.pose(animName, landFrames[level]) poseProp = Func(poseProp, object, objName, level) wait = Wait(1.0) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objectTrack.append(animProp) objectTrack.append(poseProp) objectTrack.append(wait) objectTrack.append(shrinkProp) else: #donald boat currently does not have animation startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, (hp <= 0)) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) #objAnimShrink = ParallelEndTogether(animProp, shrinkProp) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) objectTrack.append(Func(MovieUtil.removeProp, object)) objectTrack.append(Func(battle.movie.clearRenderProp, object)) # we will see a shadow scale up before the object drops dropShadow = MovieUtil.copyProp(suit.getShadowJoint()) if (level == 0): dropShadow.setScale(0.5) elif (level <= 2): dropShadow.setScale(0.8) elif (level == 3): dropShadow.setScale(2.0) elif (level == 4): dropShadow.setScale(2.3) else: dropShadow.setScale(3.6) def posShadow(dropShadow=dropShadow, suit=suit, battle=battle, hp=hp, level=level): dropShadow.reparentTo(battle) if (battle.isSuitLured(suit)): # suit is lured, shadow at battle position suitPos, suitHpr = battle.getActorPosHpr(suit) dropShadow.setPos(suitPos) dropShadow.setHpr(suitHpr) if (level >= 3): # bump back larger drops dropShadow.setY(dropShadow.getY() + 2) else: dropShadow.setPos(suit.getPos(battle)) dropShadow.setHpr(suit.getHpr(battle)) if (hp <= 0 and level >= 3): dropShadow.setY(dropShadow.getY(battle) + 5) # Raise the drop shadow to curb level dropShadow.setZ(dropShadow.getZ() + 0.5) shadowTrack = Sequence( Wait(delay + tButtonPressed), Func(battle.movie.needRestoreRenderProp, dropShadow), Func(posShadow), LerpScaleInterval(dropShadow, tObjectAppears - tButtonPressed, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(MovieUtil.removeProp, dropShadow), Func(battle.movie.clearRenderProp, dropShadow), ) return Parallel(toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack)
def __dropObject(drop, delay, objName, level, alreadyDodged, alreadyTeased, npcs, target, npcDrops): toon = drop['toon'] repeatNPC = 0 battle = drop['battle'] if drop.has_key('npc'): toon = drop['npc'] if npcDrops.has_key(toon): repeatNPC = 1 else: npcDrops[toon] = 1 origHpr = Vec3(0, 0, 0) else: origHpr = toon.getHpr(battle) hpbonus = drop['hpbonus'] suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] suitPos = suit.getPos(battle) majorObject = level >= 3 if repeatNPC == 0: button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() object = globalPropPool.getProp(objName) objectType = globalPropPool.getPropType(objName) if objName == 'weight': object.setScale(object.getScale() * 0.75) elif objName == 'safe': object.setScale(object.getScale() * 0.85) node = object.node() node.setBounds(OmniBoundingVolume()) node.setFinal(1) soundTrack = __getSoundTrack(level, hitSuit, toon) toonTrack = Sequence() if repeatNPC == 0: toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() if repeatNPC == 0: buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) objectTrack = Sequence() def posObject(object, suit, level, majorObject, miss, battle=battle): object.reparentTo(battle) if battle.isSuitLured(suit): suitPos, suitHpr = battle.getActorPosHpr(suit) object.setPos(suitPos) object.setHpr(suitHpr) if level >= 3: object.setY(object.getY() + 2) else: object.setPos(suit.getPos(battle)) object.setHpr(suit.getHpr(battle)) if miss and level >= 3: object.setY(object.getY(battle) + 5) if not majorObject: if not miss: shoulderHeight = shoulderHeights[suit.style.body] * suit.scale object.setZ(object.getPos(battle)[2] + shoulderHeight) object.setZ(object.getPos(battle)[2] + objZOffsets[level]) objectTrack.append(Func(battle.movie.needRestoreRenderProp, object)) objInit = Func(posObject, object, suit, level, majorObject, hp <= 0) objectTrack.append(Wait(delay + tObjectAppears)) objectTrack.append(objInit) if hp > 0 or level == 1 or level == 2: if hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objAnimShrink = ParallelEndTogether(animProp, shrinkProp) objectTrack.append(objAnimShrink) else: startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, hp <= 0) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) elif hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName, duration=landFrames[level] / 24.0) def poseProp(prop, animName, level): prop.pose(animName, landFrames[level]) poseProp = Func(poseProp, object, objName, level) wait = Wait(1.0) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objectTrack.append(animProp) objectTrack.append(poseProp) objectTrack.append(wait) objectTrack.append(shrinkProp) else: startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, hp <= 0) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) objectTrack.append(Func(MovieUtil.removeProp, object)) objectTrack.append(Func(battle.movie.clearRenderProp, object)) dropShadow = MovieUtil.copyProp(suit.getShadowJoint()) if level == 0: dropShadow.setScale(0.5) elif level <= 2: dropShadow.setScale(0.8) elif level == 3: dropShadow.setScale(2.0) elif level == 4: dropShadow.setScale(2.3) else: dropShadow.setScale(3.6) def posShadow(dropShadow=dropShadow, suit=suit, battle=battle, hp=hp, level=level): dropShadow.reparentTo(battle) if battle.isSuitLured(suit): suitPos, suitHpr = battle.getActorPosHpr(suit) dropShadow.setPos(suitPos) dropShadow.setHpr(suitHpr) if level >= 3: dropShadow.setY(dropShadow.getY() + 2) else: dropShadow.setPos(suit.getPos(battle)) dropShadow.setHpr(suit.getHpr(battle)) if hp <= 0 and level >= 3: dropShadow.setY(dropShadow.getY(battle) + 5) dropShadow.setZ(dropShadow.getZ() + 0.5) shadowTrack = Sequence( Wait(delay + tButtonPressed), Func(battle.movie.needRestoreRenderProp, dropShadow), Func(posShadow), LerpScaleInterval(dropShadow, tObjectAppears - tButtonPressed, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(MovieUtil.removeProp, dropShadow), Func(battle.movie.clearRenderProp, dropShadow)) return Parallel(toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack)
def __dropObject(drop, delay, objName, level, alreadyDodged, alreadyTeased, npcs, target, npcDrops): toon = drop['toon'] repeatNPC = 0 battle = drop['battle'] if 'npc' in drop: toon = drop['npc'] if toon in npcDrops: repeatNPC = 1 else: npcDrops[toon] = 1 origHpr = Vec3(0, 0, 0) else: origHpr = toon.getHpr(battle) hpbonus = drop['hpbonus'] suit = target['suit'] hp = target['hp'] hitSuit = hp > 0 died = target['died'] leftSuits = target['leftSuits'] rightSuits = target['rightSuits'] kbbonus = target['kbbonus'] suitPos = suit.getPos(battle) majorObject = level >= 3 if repeatNPC == 0: button = globalPropPool.getProp('button') buttonType = globalPropPool.getPropType('button') button2 = MovieUtil.copyProp(button) buttons = [button, button2] hands = toon.getLeftHands() object = globalPropPool.getProp(objName) objectType = globalPropPool.getPropType(objName) if objName == 'weight': object.setScale(object.getScale() * 0.75) elif objName == 'safe': object.setScale(object.getScale() * 0.85) node = object.node() node.setBounds(OmniBoundingVolume()) node.setFinal(1) soundTrack = __getSoundTrack(level, hitSuit, toon) toonTrack = Sequence() if repeatNPC == 0: toonFace = Func(toon.headsUp, battle, suitPos) toonTrack.append(Wait(delay)) toonTrack.append(toonFace) toonTrack.append(ActorInterval(toon, 'pushbutton')) toonTrack.append(Func(toon.loop, 'neutral')) toonTrack.append(Func(toon.setHpr, battle, origHpr)) buttonTrack = Sequence() if repeatNPC == 0: buttonShow = Func(MovieUtil.showProps, buttons, hands) buttonScaleUp = LerpScaleInterval(button, 1.0, button.getScale(), startScale=Point3(0.01, 0.01, 0.01)) buttonScaleDown = LerpScaleInterval(button, 1.0, Point3(0.01, 0.01, 0.01), startScale=button.getScale()) buttonHide = Func(MovieUtil.removeProps, buttons) buttonTrack.append(Wait(delay)) buttonTrack.append(buttonShow) buttonTrack.append(buttonScaleUp) buttonTrack.append(Wait(2.5)) buttonTrack.append(buttonScaleDown) buttonTrack.append(buttonHide) objectTrack = Sequence() def posObject(object, suit, level, majorObject, miss, battle = battle): object.reparentTo(battle) if battle.isSuitLured(suit): suitPos, suitHpr = battle.getActorPosHpr(suit) object.setPos(suitPos) object.setHpr(suitHpr) if level >= 3: object.setY(object.getY() + 2) else: object.setPos(suit.getPos(battle)) object.setHpr(suit.getHpr(battle)) if miss and level >= 3: object.setY(object.getY(battle) + 5) if not majorObject: if not miss: shoulderHeight = shoulderHeights[suit.style.body] * suit.scale object.setZ(object.getPos(battle)[2] + shoulderHeight) object.setZ(object.getPos(battle)[2] + objZOffsets[level]) objectTrack.append(Func(battle.movie.needRestoreRenderProp, object)) objInit = Func(posObject, object, suit, level, majorObject, hp <= 0) objectTrack.append(Wait(delay + tObjectAppears)) objectTrack.append(objInit) if hp > 0 or level == 1 or level == 2: if hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objAnimShrink = ParallelEndTogether(animProp, shrinkProp) objectTrack.append(objAnimShrink) else: startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, hp <= 0) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrink, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) elif hasattr(object, 'getAnimControls'): animProp = ActorInterval(object, objName, duration=landFrames[level] / 24.0) def poseProp(prop, animName, level): prop.pose(animName, landFrames[level]) poseProp = Func(poseProp, object, objName, level) wait = Wait(1.0) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=object.getScale()) objectTrack.append(animProp) objectTrack.append(poseProp) objectTrack.append(wait) objectTrack.append(shrinkProp) else: startingScale = objStartingScales[level] object2 = MovieUtil.copyProp(object) posObject(object2, suit, level, majorObject, hp <= 0) endingPos = object2.getPos() startPos = Point3(endingPos[0], endingPos[1], endingPos[2] + 5) startHpr = object2.getHpr() endHpr = Point3(startHpr[0] + 90, startHpr[1], startHpr[2]) animProp = LerpPosInterval(object, landFrames[level] / 24.0, endingPos, startPos=startPos) shrinkProp = LerpScaleInterval(object, dShrinkOnMiss, Point3(0.01, 0.01, 0.01), startScale=startingScale) bounceProp = Effects.createZBounce(object, 2, endingPos, 0.5, 1.5) objAnimShrink = Sequence(Func(object.setScale, startingScale), Func(object.setH, endHpr[0]), animProp, bounceProp, Wait(1.5), shrinkProp) objectTrack.append(objAnimShrink) MovieUtil.removeProp(object2) objectTrack.append(Func(MovieUtil.removeProp, object)) objectTrack.append(Func(battle.movie.clearRenderProp, object)) dropShadow = MovieUtil.copyProp(suit.getShadowJoint()) if level == 0: dropShadow.setScale(0.5) elif level <= 2: dropShadow.setScale(0.8) elif level == 3: dropShadow.setScale(2.0) elif level == 4: dropShadow.setScale(2.3) else: dropShadow.setScale(3.6) def posShadow(dropShadow = dropShadow, suit = suit, battle = battle, hp = hp, level = level): dropShadow.reparentTo(battle) if battle.isSuitLured(suit): suitPos, suitHpr = battle.getActorPosHpr(suit) dropShadow.setPos(suitPos) dropShadow.setHpr(suitHpr) if level >= 3: dropShadow.setY(dropShadow.getY() + 2) else: dropShadow.setPos(suit.getPos(battle)) dropShadow.setHpr(suit.getHpr(battle)) if hp <= 0 and level >= 3: dropShadow.setY(dropShadow.getY(battle) + 5) dropShadow.setZ(dropShadow.getZ() + 0.5) shadowTrack = Sequence(Wait(delay + tButtonPressed), Func(battle.movie.needRestoreRenderProp, dropShadow), Func(posShadow), LerpScaleInterval(dropShadow, tObjectAppears - tButtonPressed, dropShadow.getScale(), startScale=Point3(0.01, 0.01, 0.01)), Wait(0.3), Func(MovieUtil.removeProp, dropShadow), Func(battle.movie.clearRenderProp, dropShadow)) return Parallel(toonTrack, soundTrack, buttonTrack, objectTrack, shadowTrack)