def announceGenerate(self): """ announceGenerate is called after all of the required fields are filled in """ DistributedObject.DistributedObject.announceGenerate(self) self.notify.debug("BASE: announceGenerate %s" % self.activityName) # update root's name and position within the party grounds self.root.setName(self.activityName + "Root") centeredX, centeredY = getCenterPosFromGridSize( self.x, self.y, PartyGlobals.ActivityInformationDict[self.activityId]["gridsize"]) self.root.setPos(centeredX, centeredY, 0.0) self.root.setH(self.h) # if this flag is set to zero, we won't notify the server that # we've left at the end of the activity self.normalExit = True if self.wantLever: self.leverTriggerEvent = self.uniqueName('leverTriggerEvent') self.load() def cleanup(self=self): self.notify.debug("BASE: cleanup: normalExit=%s" % self.normalExit) # make sure we clear the screen base.cr.renderFrame() # If we didn't abort, tell the AI we are exiting if self.normalExit: self.sendUpdate("toonExitRequest") self.cleanupActions.append(cleanup)
def announceGenerate(self): DistributedObject.DistributedObject.announceGenerate(self) self.notify.debug('BASE: announceGenerate %s' % self.activityName) self.root.setName(self.activityName + 'Root') centeredX, centeredY = getCenterPosFromGridSize(self.x, self.y, PartyGlobals.ActivityInformationDict[self.activityId]['gridsize']) self.root.setPos(centeredX, centeredY, 0.0) self.root.setH(self.h) self.normalExit = True if self.wantLever: self.leverTriggerEvent = self.uniqueName('leverTriggerEvent') self.load() def cleanup(self = self): self.notify.debug('BASE: cleanup: normalExit=%s' % self.normalExit) base.cr.renderFrame() if self.normalExit: self.sendUpdate('toonExitRequest') self.cleanupActions.append(cleanup)
def __init__(self, name, x, y, h): NodePath.__init__(self, name) self.name = name decorId = PartyGlobals.DecorationIds.fromString(name) centerX, centerY = getCenterPosFromGridSize( x, y, PartyGlobals.DecorationInformationDict[decorId]['gridsize']) self.setPos(centerX, centerY, 0.0) self.setH(h) if self.name == 'CakeTower': self.partyCake = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_cakeTower') tntSeqNode = self.partyCake.find('**/seqNode_tnt').node() tntSeqNode.setFrameRate(20) self.partyCake.reparentTo(self) elif self.name == 'BannerJellyBean': partyBannerModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_bannerJellybean_model') banner = [] banner1 = partyBannerModel.find('**/banner1') banner2 = partyBannerModel.find('**/banner2') temp = NodePath('Empty') banner1.reparentTo(temp) banner2.reparentTo(temp) banner.append(banner1) banner.append(banner2) self.partyBanner = Actor.Actor(partyBannerModel, { 'float': 'phase_13/models/parties/tt_m_ara_pty_bannerJellybean' }) bannerSeqNodeParent = self.partyBanner.find('**/bannerJoint') bannerSeqNode = SequenceNode('banner') for bannerNode in banner: bannerSeqNode.addChild(bannerNode.node()) temp.detachNode() del temp bannerSeqNodeParent.attachNewNode(bannerSeqNode) bannerSeqNode.setFrameRate(4) bannerSeqNode.loop(True) bannerSeqNode.setPlayRate(1) balloonLeft = self.partyBanner.find('**/balloonsLMesh') balloonRight = self.partyBanner.find('**/balloonsRMesh') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.partyBanner.find('**/balloonJointL') balloonRightLocator = self.partyBanner.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.partyBanner.loop('float') self.partyBanner.reparentTo(self) elif self.name == 'GagGlobe': self.partyGlobe = Actor.Actor( 'phase_13/models/parties/tt_m_ara_pty_gagGlobe_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_gagGlobe'}) self.partyGlobe.setBillboardAxis() confettiLocator = self.partyGlobe.find('**/uvj_confetti') confettiMesh = self.partyGlobe.find('**/innerGlobeMesh') confettiMesh.setTexProjector( confettiMesh.findTextureStage('default'), confettiLocator, self.partyGlobe) collisionMesh = self.partyGlobe.find('**/collisionMesh') collisionMesh.hide() self.globeSphere = CollisionSphere( confettiMesh.getBounds().getCenter(), confettiMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode('gagGlobe' + str(self.getPos())) self.globeSphereNode.setIntoCollideMask( ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.partyGlobe.attachNewNode( self.globeSphereNode) self.partyGlobe.loop('idle') self.partyGlobe.reparentTo(self) elif self.name == 'FlyingHeart': flyingHeartModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_heartWing_model') self.flyingHeart = Actor.Actor( flyingHeartModel, {'idle': 'phase_13/models/parties/tt_m_ara_pty_heartWing'}) wingsSeqNodeParent = self.flyingHeart.find('**/heartWingJoint') collisionMesh = self.flyingHeart.find('**/collision_heartWing') collisionMesh.hide() self.globeSphere = CollisionSphere( collisionMesh.getBounds().getCenter(), collisionMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode('flyingHeart' + str(self.getPos())) self.globeSphereNode.setIntoCollideMask( ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.flyingHeart.attachNewNode( self.globeSphereNode) self.globeSphereNodePath.reparentTo(wingsSeqNodeParent) wings = [] wingsSeqNode = SequenceNode('wingsSeqNode') temp = NodePath('Empty') wing1 = self.flyingHeart.find('**/wing1') wing2 = self.flyingHeart.find('**/wing2') wing3 = self.flyingHeart.find('**/wing3') wing4 = self.flyingHeart.find('**/wing4') wing1.reparentTo(temp) wing2.reparentTo(temp) wing3.reparentTo(temp) wing4.reparentTo(temp) wings.append(wing1) wings.append(wing2) wings.append(wing3) wings.append(wing4) wingsSeqNode.addChild(wing1.node()) wingsSeqNode.addChild(wing2.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing4.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing2.node()) temp.detachNode() del temp wingsSeqNodeParent.attachNewNode(wingsSeqNode) wingsSeqNode.setFrameRate(12) wingsSeqNode.loop(True) wingsSeqNode.setPlayRate(1) self.flyingHeart.loop('idle') self.flyingHeart.reparentTo(self) elif self.name == 'HeartBanner': self.heartBanner = Actor.Actor( 'phase_13/models/parties/tt_m_ara_pty_bannerValentine_model', { 'idle': 'phase_13/models/parties/tt_m_ara_pty_bannerValentine' }) balloonLeft = self.heartBanner.find('**/balloonsL') balloonRight = self.heartBanner.find('**/balloonsR') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.heartBanner.find('**/balloonJointL') balloonRightLocator = self.heartBanner.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.heartBanner.loop('idle') self.heartBanner.reparentTo(self) elif self.name == 'Hydra' or self.name == 'StageWinter': if self.name == 'StageWinter': self.hydra = Actor.Actor( 'phase_13/models/parties/tt_r_ara_pty_winterProps', { 'dance': 'phase_13/models/parties/tt_a_ara_pty_hydra_dance' }) else: self.hydra = Actor.Actor( 'phase_13/models/parties/tt_a_ara_pty_hydra_default', { 'dance': 'phase_13/models/parties/tt_a_ara_pty_hydra_dance' }) st = random.randint(0, 10) animIval = ActorInterval(self.hydra, 'dance') animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx( 'phase_13/audio/sfx/tt_s_ara_pty_propsShow_dance.ogg') soundIval = SoundInterval(self.decSfx, node=self.hydra, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop(st) collisions = self.hydra.find('**/*collision*') collisions.setPos(0, 0, -5) self.hydra.flattenStrong() self.hydra.reparentTo(self) if self.name == 'StageWinter': stageBounds = self.hydra.find('**/stage').node().getBounds() self.hydra.node().setBounds(stageBounds) self.hydra.node().setFinal(1) elif self.name == 'TubeCogVictory': self.tubeCog = Actor.Actor( 'phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_default', { 'wave': 'phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_wave' }) st = random.randint(0, 10) animIval = ActorInterval(self.tubeCog, 'wave') animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx( 'phase_13/audio/sfx/tt_s_ara_pty_tubeCogVictory_wave.ogg') soundIval = SoundInterval(self.decSfx, node=self.tubeCog, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop() self.animSeq.setT(st) self.tubeCog.flattenStrong() self.tubeCog.reparentTo(self) elif self.name == 'BannerVictory': self.bannerVictory = Actor.Actor( 'phase_13/models/parties/tt_m_ara_pty_bannerVictory_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_bannerVictory'}) balloonLeft = self.bannerVictory.find('**/balloonsLMesh') balloonRight = self.bannerVictory.find('**/balloonsRMesh') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.bannerVictory.find('**/balloonJointL') balloonRightLocator = self.bannerVictory.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.bannerVictory.loop('idle') self.bannerVictory.reparentTo(self) elif self.name == 'CannonVictory': self.cannonVictory = Actor.Actor( 'phase_13/models/parties/tt_m_ara_pty_cannonVictory_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_cannonVictory'}) confettiLocator = self.cannonVictory.findAllMatches( '**/uvj_confetties')[1] confettiMesh = self.cannonVictory.find('**/confettis') confettiMesh.setTexProjector( confettiMesh.findTextureStage('default'), self.cannonVictory, confettiLocator) self.cannonVictory.flattenStrong() self.cannonVictory.loop('idle') self.cannonVictory.reparentTo(self) elif self.name == 'CogStatueVictory': self.decorationModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_cogDoodleVictory') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'CogIceCreamVictory': self.decorationModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_cogIceCreamVictory') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'cogIceCreamWinter': self.decorationModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_cogIceCreamWinter') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'CogStatueWinter': self.decorationModel = loader.loadModel( 'phase_13/models/parties/tt_m_ara_pty_cogDoodleWinter') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'snowman': self.decorationModel = loader.loadModel( 'phase_13/models/estate/tt_m_prp_ext_snowman') self.decorationModel.reparentTo(self) self.decorationModel.find('**/growthStage_1').hide() self.decorationModel.find('**/growthStage_2').hide() elif self.name == 'snowDoodle': self.decorationModel = loader.loadModel( 'phase_5.5/models/estate/tt_m_prp_ext_snowDoodle') self.decorationModel.reparentTo(self) self.decorationModel.find('**/growthStage_1').hide() self.decorationModel.find('**/growthStage_2').hide() else: self.decorationModels = loader.loadModel( 'phase_4/models/parties/partyDecorations') self.decorationModels.copyTo(self) decors = self.findAllMatches('**/partyDecoration_*') for i in xrange(decors.getNumPaths()): decPiece = decors.getPath(i) n = decPiece.getName() if n.endswith('shadow') or n.endswith('base') or n.endswith( 'collision') or n.endswith(name): pass else: decPiece.reparentTo(hidden) self.reparentTo(base.cr.playGame.hood.loader.geom)
def __init__(self, name, x, y, h): NodePath.__init__(self, name) self._name = name decorId = PartyGlobals.DecorationIds.fromString(name) centerX, centerY = getCenterPosFromGridSize( x, y, PartyGlobals.DecorationInformationDict[decorId]["gridsize"]) self.setPos(centerX, centerY, 0.0) self.setH(h) if self._name == "CakeTower": self.partyCake = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_cakeTower") tntSeqNode = self.partyCake.find("**/seqNode_tnt").node() tntSeqNode.setFrameRate(20) self.partyCake.reparentTo(self) elif self._name == "BannerJellyBean": partyBannerModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_bannerJellybean_model") banner = [] banner1 = partyBannerModel.find("**/banner1") banner2 = partyBannerModel.find("**/banner2") temp = NodePath("Empty") banner1.reparentTo(temp) banner2.reparentTo(temp) banner.append(banner1) banner.append(banner2) self.partyBanner = Actor.Actor(partyBannerModel, \ {'float' : "phase_13/models/parties/tt_m_ara_pty_bannerJellybean",}) bannerSeqNodeParent = self.partyBanner.find("**/bannerJoint") bannerSeqNode = SequenceNode('banner') for bannerNode in banner: bannerSeqNode.addChild(bannerNode.node()) temp.detachNode() del temp bannerSeqNodeParent.attachNewNode(bannerSeqNode) bannerSeqNode.setFrameRate(4) bannerSeqNode.loop(True) bannerSeqNode.setPlayRate(1) balloonLeft = self.partyBanner.find("**/balloonsLMesh") balloonRight = self.partyBanner.find("**/balloonsRMesh") balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() # axis = loader.loadModel("models/misc/xyzAxis") # axis.reparentTo(balloonLeft) balloonLeftLocator = self.partyBanner.find("**/balloonJointL") balloonRightLocator = self.partyBanner.find("**/balloonJointR") balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.partyBanner.loop("float") self.partyBanner.reparentTo(self) elif self._name == "GagGlobe": self.partyGlobe = Actor.Actor("phase_13/models/parties/tt_m_ara_pty_gagGlobe_model", \ {'idle' : 'phase_13/models/parties/tt_m_ara_pty_gagGlobe',}) self.partyGlobe.setBillboardAxis() confettiLocator = self.partyGlobe.find("**/uvj_confetti") confettiMesh = self.partyGlobe.find("**/innerGlobeMesh") confettiMesh.setTexProjector( confettiMesh.findTextureStage("default"), confettiLocator, self.partyGlobe) collisionMesh = self.partyGlobe.find("**/collisionMesh") collisionMesh.hide() self.globeSphere = CollisionSphere(confettiMesh.getBounds().getCenter(), \ confettiMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode("gagGlobe" + str(self.getPos())) self.globeSphereNode.setIntoCollideMask( ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.partyGlobe.attachNewNode( self.globeSphereNode) # cakeLocator = partyGlobe.find("**/uvj_cake") # cakeMesh = partyGlobe.find("**/cakeMesh") # cakeMesh.reparentTo(cakeLocator) # pieLocator = partyGlobe.find("**/uvj_pie") # pieMesh = partyGlobe.find("**/pieMesh") # pieMesh.reparentTo(pieLocator) # seltzerBottleLocator = partyGlobe.find("**/uvj_seltzerBottle") # seltzerBottleMesh = partyGlobe.find("**/seltzerBottleMesh") # seltzerBottleMesh.reparentTo(seltzerBottleLocator) # megaphoneLocator = partyGlobe.find("**/uvj_megaphone") # megaphoneMesh = partyGlobe.find("**/megaphoneMesh") # megaphoneMesh.reparentTo(megaphoneLocator) # balloonsLocator = partyGlobe.find("**/uvj_balloons1") # balloonsMesh = partyGlobe.find("**/balloonsMesh") # balloonsMesh.reparentTo(balloonsLocator) self.partyGlobe.loop('idle') self.partyGlobe.reparentTo(self) elif self._name == "FlyingHeart": flyingHeartModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_heartWing_model") self.flyingHeart = Actor.Actor(flyingHeartModel, \ {'idle' : 'phase_13/models/parties/tt_m_ara_pty_heartWing',}) wingsSeqNodeParent = self.flyingHeart.find("**/heartWingJoint") # Setup the collision in code, because the collision flag set on # collision_heartWing in Maya doesn't carry through if imported as an actor. collisionMesh = self.flyingHeart.find("**/collision_heartWing") collisionMesh.hide() self.globeSphere = CollisionSphere( collisionMesh.getBounds().getCenter(), collisionMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode("flyingHeart" + str(self.getPos())) self.globeSphereNode.setIntoCollideMask( ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.flyingHeart.attachNewNode( self.globeSphereNode) self.globeSphereNodePath.reparentTo(wingsSeqNodeParent) # Setup the Sequence Node in code. Same reason - The Sequence Node flag # gets lost if imported as an actor. wings = [] wingsSeqNode = SequenceNode('wingsSeqNode') temp = NodePath("Empty") wing1 = self.flyingHeart.find("**/wing1") wing2 = self.flyingHeart.find("**/wing2") wing3 = self.flyingHeart.find("**/wing3") wing4 = self.flyingHeart.find("**/wing4") wing1.reparentTo(temp) wing2.reparentTo(temp) wing3.reparentTo(temp) wing4.reparentTo(temp) wings.append(wing1) wings.append(wing2) wings.append(wing3) wings.append(wing4) wingsSeqNode.addChild(wing1.node()) wingsSeqNode.addChild(wing2.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing4.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing2.node()) temp.detachNode() del temp wingsSeqNodeParent.attachNewNode(wingsSeqNode) wingsSeqNode.setFrameRate(12) wingsSeqNode.loop(True) wingsSeqNode.setPlayRate(1) self.flyingHeart.loop('idle') self.flyingHeart.reparentTo(self) elif self._name == "HeartBanner": self.heartBanner = Actor.Actor("phase_13/models/parties/tt_m_ara_pty_bannerValentine_model", \ {'idle' : 'phase_13/models/parties/tt_m_ara_pty_bannerValentine',}) balloonLeft = self.heartBanner.find("**/balloonsL") balloonRight = self.heartBanner.find("**/balloonsR") balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.heartBanner.find("**/balloonJointL") balloonRightLocator = self.heartBanner.find("**/balloonJointR") balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.heartBanner.loop('idle') self.heartBanner.reparentTo(self) elif self._name == "Hydra" or self.name == "StageWinter": if self.name == "StageWinter": self.hydra = Actor.Actor("phase_13/models/parties/tt_r_ara_pty_winterProps", \ {"dance" : "phase_13/models/parties/tt_a_ara_pty_hydra_dance" }) else: self.hydra = Actor.Actor("phase_13/models/parties/tt_a_ara_pty_hydra_default", \ {'dance' : 'phase_13/models/parties/tt_a_ara_pty_hydra_dance' }) st = random.randint(0, 10) animIval = ActorInterval(self.hydra, "dance") animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx( "phase_13/audio/sfx/tt_s_ara_pty_propsShow_dance.mp3") soundIval = SoundInterval(self.decSfx, node=self.hydra, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop(st) collisions = self.hydra.find("**/*collision*") collisions.setPos(0, 0, -5) self.hydra.flattenStrong() self.hydra.reparentTo(self) if self.name == "StageWinter": stageBounds = self.hydra.find("**/stage").node().getBounds() self.hydra.node().setBounds(stageBounds) self.hydra.node().setFinal(1) elif self._name == "TubeCogVictory": self.tubeCog = Actor.Actor("phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_default", \ {'wave' : 'phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_wave' }) st = random.randint(0, 10) animIval = ActorInterval(self.tubeCog, "wave") animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx( "phase_13/audio/sfx/tt_s_ara_pty_tubeCogVictory_wave.mp3") soundIval = SoundInterval(self.decSfx, node=self.tubeCog, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop() self.animSeq.setT(st) self.tubeCog.flattenStrong() self.tubeCog.reparentTo(self) elif self._name == "BannerVictory": self.bannerVictory = Actor.Actor("phase_13/models/parties/tt_m_ara_pty_bannerVictory_model", \ {'idle' : 'phase_13/models/parties/tt_m_ara_pty_bannerVictory',}) balloonLeft = self.bannerVictory.find("**/balloonsLMesh") balloonRight = self.bannerVictory.find("**/balloonsRMesh") balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.bannerVictory.find("**/balloonJointL") balloonRightLocator = self.bannerVictory.find("**/balloonJointR") balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.bannerVictory.loop('idle') self.bannerVictory.reparentTo(self) elif self._name == "CannonVictory": self.cannonVictory = Actor.Actor("phase_13/models/parties/tt_m_ara_pty_cannonVictory_model", \ {'idle' : 'phase_13/models/parties/tt_m_ara_pty_cannonVictory',}) # NOTE: -expose uvj_confetties creates two nodes with this name: one dummy and one joint. Ignore the dummy. confettiLocator = self.cannonVictory.findAllMatches( "**/uvj_confetties")[1] assert confettiLocator and not confettiLocator.isEmpty() confettiMesh = self.cannonVictory.find("**/confettis") assert confettiMesh and not confettiMesh.isEmpty() confettiMesh.setTexProjector( confettiMesh.findTextureStage("default"), self.cannonVictory, confettiLocator) self.cannonVictory.flattenStrong() self.cannonVictory.loop('idle') self.cannonVictory.reparentTo(self) elif self._name == "CogStatueVictory": self.decorationModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_cogDoodleVictory") self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self._name == "CogIceCreamVictory": self.decorationModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_cogIceCreamVictory") self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == "cogIceCreamWinter": self.decorationModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_cogIceCreamWinter") self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == "CogStatueWinter": self.decorationModel = loader.loadModel( "phase_13/models/parties/tt_m_ara_pty_cogDoodleWinter") self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == "snowman": self.decorationModel = loader.loadModel( "phase_13/models/estate/tt_m_prp_ext_snowman") self.decorationModel.reparentTo(self) self.decorationModel.find("**/growthStage_1").hide() self.decorationModel.find("**/growthStage_2").hide() elif self.name == "snowDoodle": self.decorationModel = loader.loadModel( 'phase_5.5/models/estate/tt_m_prp_ext_snowDoodle') self.decorationModel.reparentTo(self) self.decorationModel.find("**/growthStage_1").hide() self.decorationModel.find("**/growthStage_2").hide() else: self.decorationModels = loader.loadModel( "phase_4/models/parties/partyDecorations") self.decorationModels.copyTo(self) decors = self.findAllMatches("**/partyDecoration_*") for i in range(decors.getNumPaths()): decPiece = decors.getPath(i) n = decPiece.getName() if n.endswith("shadow") or n.endswith("base") or n.endswith( "collision") or n.endswith(name): pass else: decPiece.reparentTo(hidden) self.reparentTo(base.cr.playGame.hood.loader.geom)
def __init__(self, name, x, y, h): NodePath.__init__(self, name) self.name = name decorId = PartyGlobals.DecorationIds.fromString(name) centerX, centerY = getCenterPosFromGridSize(x, y, PartyGlobals.DecorationInformationDict[decorId]['gridsize']) self.setPos(centerX, centerY, 0.0) self.setH(h) if self.name == 'CakeTower': self.partyCake = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_cakeTower') tntSeqNode = self.partyCake.find('**/seqNode_tnt').node() tntSeqNode.setFrameRate(20) self.partyCake.reparentTo(self) elif self.name == 'BannerJellyBean': partyBannerModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_bannerJellybean_model') banner = [] banner1 = partyBannerModel.find('**/banner1') banner2 = partyBannerModel.find('**/banner2') temp = NodePath('Empty') banner1.reparentTo(temp) banner2.reparentTo(temp) banner.append(banner1) banner.append(banner2) self.partyBanner = Actor.Actor(partyBannerModel, {'float': 'phase_13/models/parties/tt_m_ara_pty_bannerJellybean'}) bannerSeqNodeParent = self.partyBanner.find('**/bannerJoint') bannerSeqNode = SequenceNode('banner') for bannerNode in banner: bannerSeqNode.addChild(bannerNode.node()) temp.detachNode() del temp bannerSeqNodeParent.attachNewNode(bannerSeqNode) bannerSeqNode.setFrameRate(4) bannerSeqNode.loop(True) bannerSeqNode.setPlayRate(1) balloonLeft = self.partyBanner.find('**/balloonsLMesh') balloonRight = self.partyBanner.find('**/balloonsRMesh') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.partyBanner.find('**/balloonJointL') balloonRightLocator = self.partyBanner.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.partyBanner.loop('float') self.partyBanner.reparentTo(self) elif self.name == 'GagGlobe': self.partyGlobe = Actor.Actor('phase_13/models/parties/tt_m_ara_pty_gagGlobe_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_gagGlobe'}) self.partyGlobe.setBillboardAxis() confettiLocator = self.partyGlobe.find('**/uvj_confetti') confettiMesh = self.partyGlobe.find('**/innerGlobeMesh') confettiMesh.setTexProjector(confettiMesh.findTextureStage('default'), confettiLocator, self.partyGlobe) collisionMesh = self.partyGlobe.find('**/collisionMesh') collisionMesh.hide() self.globeSphere = CollisionSphere(confettiMesh.getBounds().getCenter(), confettiMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode('gagGlobe' + str(self.getPos())) self.globeSphereNode.setIntoCollideMask(ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.partyGlobe.attachNewNode(self.globeSphereNode) self.partyGlobe.loop('idle') self.partyGlobe.reparentTo(self) elif self.name == 'FlyingHeart': flyingHeartModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_heartWing_model') self.flyingHeart = Actor.Actor(flyingHeartModel, {'idle': 'phase_13/models/parties/tt_m_ara_pty_heartWing'}) wingsSeqNodeParent = self.flyingHeart.find('**/heartWingJoint') collisionMesh = self.flyingHeart.find('**/collision_heartWing') collisionMesh.hide() self.globeSphere = CollisionSphere(collisionMesh.getBounds().getCenter(), collisionMesh.getBounds().getRadius()) self.globeSphere.setTangible(1) self.globeSphereNode = CollisionNode('flyingHeart' + str(self.getPos())) self.globeSphereNode.setIntoCollideMask(ToontownGlobals.WallBitmask) self.globeSphereNode.addSolid(self.globeSphere) self.globeSphereNodePath = self.flyingHeart.attachNewNode(self.globeSphereNode) self.globeSphereNodePath.reparentTo(wingsSeqNodeParent) wings = [] wingsSeqNode = SequenceNode('wingsSeqNode') temp = NodePath('Empty') wing1 = self.flyingHeart.find('**/wing1') wing2 = self.flyingHeart.find('**/wing2') wing3 = self.flyingHeart.find('**/wing3') wing4 = self.flyingHeart.find('**/wing4') wing1.reparentTo(temp) wing2.reparentTo(temp) wing3.reparentTo(temp) wing4.reparentTo(temp) wings.append(wing1) wings.append(wing2) wings.append(wing3) wings.append(wing4) wingsSeqNode.addChild(wing1.node()) wingsSeqNode.addChild(wing2.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing4.node()) wingsSeqNode.addChild(wing3.node()) wingsSeqNode.addChild(wing2.node()) temp.detachNode() del temp wingsSeqNodeParent.attachNewNode(wingsSeqNode) wingsSeqNode.setFrameRate(12) wingsSeqNode.loop(True) wingsSeqNode.setPlayRate(1) self.flyingHeart.loop('idle') self.flyingHeart.reparentTo(self) elif self.name == 'HeartBanner': self.heartBanner = Actor.Actor('phase_13/models/parties/tt_m_ara_pty_bannerValentine_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_bannerValentine'}) balloonLeft = self.heartBanner.find('**/balloonsL') balloonRight = self.heartBanner.find('**/balloonsR') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.heartBanner.find('**/balloonJointL') balloonRightLocator = self.heartBanner.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.heartBanner.loop('idle') self.heartBanner.reparentTo(self) elif self.name == 'Hydra' or self.name == 'StageWinter': if self.name == 'StageWinter': self.hydra = Actor.Actor('phase_13/models/parties/tt_r_ara_pty_winterProps', {'dance': 'phase_13/models/parties/tt_a_ara_pty_hydra_dance'}) else: self.hydra = Actor.Actor('phase_13/models/parties/tt_a_ara_pty_hydra_default', {'dance': 'phase_13/models/parties/tt_a_ara_pty_hydra_dance'}) st = random.randint(0, 10) animIval = ActorInterval(self.hydra, 'dance') animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx('phase_13/audio/sfx/tt_s_ara_pty_propsShow_dance.ogg') soundIval = SoundInterval(self.decSfx, node=self.hydra, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop(st) collisions = self.hydra.find('**/*collision*') collisions.setPos(0, 0, -5) self.hydra.flattenStrong() self.hydra.reparentTo(self) if self.name == 'StageWinter': stageBounds = self.hydra.find('**/stage').node().getBounds() self.hydra.node().setBounds(stageBounds) self.hydra.node().setFinal(1) elif self.name == 'TubeCogVictory': self.tubeCog = Actor.Actor('phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_default', {'wave': 'phase_5.5/models/estate/tt_a_ara_pty_tubeCogVictory_wave'}) st = random.randint(0, 10) animIval = ActorInterval(self.tubeCog, 'wave') animIvalDur = animIval.getDuration() self.decSfx = loader.loadSfx('phase_13/audio/sfx/tt_s_ara_pty_tubeCogVictory_wave.ogg') soundIval = SoundInterval(self.decSfx, node=self.tubeCog, listenerNode=base.localAvatar, volume=PartyGlobals.DECORATION_VOLUME, cutOff=PartyGlobals.DECORATION_CUTOFF, duration=animIvalDur) self.animSeq = Parallel(animIval, soundIval) self.animSeq.loop() self.animSeq.setT(st) self.tubeCog.flattenStrong() self.tubeCog.reparentTo(self) elif self.name == 'BannerVictory': self.bannerVictory = Actor.Actor('phase_13/models/parties/tt_m_ara_pty_bannerVictory_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_bannerVictory'}) balloonLeft = self.bannerVictory.find('**/balloonsLMesh') balloonRight = self.bannerVictory.find('**/balloonsRMesh') balloonLeft.setBillboardAxis() balloonRight.setBillboardAxis() balloonLeftLocator = self.bannerVictory.find('**/balloonJointL') balloonRightLocator = self.bannerVictory.find('**/balloonJointR') balloonLeft.reparentTo(balloonLeftLocator) balloonRight.reparentTo(balloonRightLocator) self.bannerVictory.loop('idle') self.bannerVictory.reparentTo(self) elif self.name == 'CannonVictory': self.cannonVictory = Actor.Actor('phase_13/models/parties/tt_m_ara_pty_cannonVictory_model', {'idle': 'phase_13/models/parties/tt_m_ara_pty_cannonVictory'}) confettiLocator = self.cannonVictory.findAllMatches('**/uvj_confetties')[1] confettiMesh = self.cannonVictory.find('**/confettis') confettiMesh.setTexProjector(confettiMesh.findTextureStage('default'), self.cannonVictory, confettiLocator) self.cannonVictory.flattenStrong() self.cannonVictory.loop('idle') self.cannonVictory.reparentTo(self) elif self.name == 'CogStatueVictory': self.decorationModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_cogDoodleVictory') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'CogIceCreamVictory': self.decorationModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_cogIceCreamVictory') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'cogIceCreamWinter': self.decorationModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_cogIceCreamWinter') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'CogStatueWinter': self.decorationModel = loader.loadModel('phase_13/models/parties/tt_m_ara_pty_cogDoodleWinter') self.decorationModel.reparentTo(self) self.decorationShadow = self.setupAnimSeq() elif self.name == 'snowman': self.decorationModel = loader.loadModel('phase_13/models/estate/tt_m_prp_ext_snowman') self.decorationModel.reparentTo(self) self.decorationModel.find('**/growthStage_1').hide() self.decorationModel.find('**/growthStage_2').hide() elif self.name == 'snowDoodle': self.decorationModel = loader.loadModel('phase_5.5/models/estate/tt_m_prp_ext_snowDoodle') self.decorationModel.reparentTo(self) self.decorationModel.find('**/growthStage_1').hide() self.decorationModel.find('**/growthStage_2').hide() else: self.decorationModels = loader.loadModel('phase_4/models/parties/partyDecorations') self.decorationModels.copyTo(self) decors = self.findAllMatches('**/partyDecoration_*') for i in xrange(decors.getNumPaths()): decPiece = decors.getPath(i) n = decPiece.getName() if n.endswith('shadow') or n.endswith('base') or n.endswith('collision') or n.endswith(name): pass else: decPiece.reparentTo(hidden) self.reparentTo(base.cr.playGame.hood.loader.geom)