class DistributedMickey(DistributedSmoothNode): def __init__(self, cr): self.cr = cr DistributedSmoothNode.__init__(self, cr) NodePath.__init__(self, 'Mickey') self.name = "Mickey" self.anim = "" self.chat = "" self.mickey = Actor( "phase_3/models/char/mickey-1200.bam", { "neutral": "phase_3/models/char/mickey-wait.bam", "walk": "phase_3/models/char/mickey-walk.bam", "run": "phase_3/models/char/mickey-run.bam", "left-start": "phase_3.5/models/char/mickey-left-start.bam", "left": "phase_3.5/models/char/mickey-left.bam", "right-start": "phase_3.5/models/char/mickey-right-start.bam", "right": "phase_3.5/models/char/mickey-right.bam" }) self.mickeyEye = self.mickey.controlJoint(None, "modelRoot", "joint_pupilR") self.mickeyEye.setY(0.025) self.mickey.reparentTo(self) self.mickey.setScale(1.25) for bundle in self.mickey.getPartBundleDict().values(): bundle = bundle['modelRoot'].getBundle() earNull = bundle.findChild('sphere3') if not earNull: earNull = bundle.findChild('*sphere3') earNull.clearNetTransforms() for bundle in self.mickey.getPartBundleDict().values(): charNodepath = bundle['modelRoot'].partBundleNP bundle = bundle['modelRoot'].getBundle() earNull = bundle.findChild('sphere3') if not earNull: earNull = bundle.findChild('*sphere3') ears = charNodepath.find('**/sphere3') if ears.isEmpty(): ears = charNodepath.find('**/*sphere3') ears.clearEffect(CharacterJointEffect.getClassType()) earRoot = charNodepath.attachNewNode('earRoot') earPitch = earRoot.attachNewNode('earPitch') earPitch.setP(40.0) ears.reparentTo(earPitch) earNull.addNetTransform(earRoot.node()) ears.clearMat() ears.node().setPreserveTransform(ModelNode.PTNone) ears.setP(-40.0) ears.flattenMedium() ears.setBillboardAxis() self.shadow = loader.loadModel("phase_3/models/props/drop_shadow.bam") self.shadow.setScale(0.55) self.shadow.flattenMedium() self.shadow.setBillboardAxis(4) try: self.shadowPlacer = ShadowPlacer(base.cTrav, self.shadow, base.wall_mask, base.floor_mask) self.shadowPlacer.on() except: pass self.shadow.reparentTo(self) cs = CollisionSphere(0, 0, 0, 2) cnode = CollisionNode('mickeyCNode') cnode.addSolid(cs) rs = CollisionRay(0, 0, 2, 0, 0, -1) rnode = CollisionNode('mickeyRNode') rnode.addSolid(rs) self.cnp = self.attachNewNode(cnode) self.cnp.setZ(0.75) self.rnp = self.attachNewNode(rnode) def mickeyCollisions(self): self.cnp.setCollideMask(BitMask32(0)) self.cnp.node().setFromCollideMask(CIGlobals.WallBitmask) self.rnp.setCollideMask(BitMask32(0)) self.rnp.node().setFromCollideMask(CIGlobals.FloorBitmask) ss = CollisionSphere(0, 0, 0, 10) snode = CollisionNode('mickeySNode') snode.addSolid(ss) self.snp = self.attachNewNode(snode) self.snp.setZ(0.75) self.snp.setCollideMask(BitMask32(0)) self.snp.node().setFromCollideMask(CIGlobals.EventBitmask) pusher = CollisionHandlerPusher() pusher.setInPattern("%in") pusher.addCollider(self.cnp, self) floor = CollisionHandlerFloor() floor.setInPattern("%in") floor.addCollider(self.rnp, self) event = CollisionHandlerEvent() event.setInPattern("%fn-into") event.setOutPattern("%fn-out") base.cTrav.addCollider(self.cnp, pusher) base.cTrav.addCollider(self.rnp, floor) base.cTrav.addCollider(self.snp, event) def setName(self, name): self.name = name if name == "": return elif self.name == "minnie": self.name = "Minnie" try: self.nameTag.remove() del self.nameTag except: pass self.it = loader.loadFont("phase_3/models/fonts/ImpressBT.ttf") self.nameTag = DirectLabel(text=self.name, text_fg=(0.992188, 0.480469, 0.167969, 1.0), text_bg=(0.75, 0.75, 0.75, 0.5), text_wordwrap=8, text_decal=True, relief=None, parent=self) self.nameTag.setPos(0, 0, 5) self.nameTag.setBillboardPointEye() LS = LabelScaler() LS.resize(self.nameTag) def b_setName(self, name): self.d_setName(name) self.setName(name) def d_setName(self, name): self.sendUpdate("setName", [name]) def setChat(self, chat): if chat == "": return self.nameTag.hide() try: self.bubble.remove() taskMgr.remove("RemoveMickeyChat-" + str(self.random_taskid)) except: pass self.chat = chat self.it = loader.loadFont(CIGlobals.ToonFont, lineHeight=CIGlobals.ToonFontLineHeight) b = loader.loadTexture("phase_3/maps/chatbubble.jpg", "phase_3/maps/chatbubble_a.rgb") self.balloon_sfx = loader.loadSfx( "phase_3/audio/sfx/GUI_balloon_popup.mp3") self.balloon_sfx.play() self.dial = loader.loadSfx("phase_3/audio/dial/mickey.wav") self.dial.play() self.box = loader.loadModel(CIGlobals.ChatBubble) self.ChatBalloon = ChatBalloon(self.box) LS = LabelScaler() self.bubble = self.ChatBalloon.generate(chat, self.it) LS.resize(self.bubble) self.bubble.reparentTo(self) self.bubble.setZ(self.nameTag.getZ() - 0.3) self.bubble.setBillboardPointEye() self.random_taskid = random.randint( 0, 10000000000000000000000000000000000000000000000000000000000000000000000 ) taskMgr.doMethodLater(7, self.delChat, "RemoveMickeyChat-" + str(self.random_taskid)) def delChat(self, task): self.chat = "" self.nameTag.show() self.bubble.remove() return task.done def b_setChat(self, chat): self.d_setChat(chat) self.setChat(chat) def d_setChat(self, chat): self.sendUpdate("setChat", [chat]) def getChat(self): return self.chat def setAnimState(self, anim): self.anim = anim if "start" in anim: self.mickey.play(anim) self.mickey.loop(anim) def b_setAnimState(self, anim): self.d_setAnimState(anim) self.setAnimState(anim) def d_setAnimState(self, anim): self.sendUpdate("setAnimState", [anim]) def getAnimState(self): return self.anim def announceGenerate(self): DistributedSmoothNode.announceGenerate(self) self.reparentTo(render) def generate(self): DistributedSmoothNode.generate(self) self.activateSmoothing(True, False) self.startSmooth() def disable(self): self.stopSmooth() self.detachNode() DistributedSmoothNode.disable(self) def delete(self): self.mickey = None DistributedSmoothNode.delete(self)
class cat: def __init__(self): self.button_img = loader.loadModel( "phase_3/models/gui/quit_button.bam") self.music = loader.loadSfx( "phase_7/audio/bgm/encntr_suit_winning_indoor.mid") self.music.setVolume(1) self.music.setLoop(True) self.music.play() base.disableMouse() camera.setPos(-0.3, -45.6, 15.9) camera.setHpr(0, 0, 0) #self.get_pos_button = DirectButton(text="GetPos", command=self.give_pos, scale=0.08, pos=(1, 0, 0)) #self.get_hpr_button = DirectButton(text="GetHpr", command=self.give_hpr, scale=0.08, pos=(-1, 0, 0)) self.vp_torso = Actor( "phase_9/models/char/sellbotBoss-torso-zero.bam", { "torso-stand-angry": "phase_9/models/char/bossCog-torso-Fb_neutral.bam", "torso-stand-happy": "phase_9/models/char/bossCog-torso-Ff_neutral.bam", "torso-jump": "phase_9/models/char/bossCog-torso-Fb_jump.bam", "torso-throw": "phase_9/models/char/bossCog-torso-Fb_UpThrow.bam", "torso-fall": "phase_9/models/char/bossCog-torso-Fb_firstHit.bam", "torso-up": "phase_9/models/char/bossCog-torso-Fb_down2Up.bam", "torso-dn_neutral": "phase_9/models/char/bossCog-torso-Fb_downNeutral.bam", "torso-dn_throw": "phase_9/models/char/bossCog-torso-Fb_DownThrow.bam", "torso-speech": "phase_9/models/char/bossCog-torso-Ff_speech.bam", "torso-wave": "phase_9/models/char/bossCog-torso-wave.bam", "torso-downhit": "phase_9/models/char/bossCog-torso-Fb_firstHit.bam" }) self.vp_head_joint = self.vp_torso.find('**/joint34') self.vp_hand_joint = self.vp_torso.find('**/joint_pelvis') gear_1.reparentTo(self.vp_torso) gear_1.setScale(0.5) gear_1.setY(-2) gear_1.setZ(5) gear_1.hide() self.vp_head = Actor( "phase_9/models/char/sellbotBoss-head-zero.bam", { "head-stand-angry": "phase_9/models/char/bossCog-head-Fb_neutral.bam", "head-stand-happy": "phase_9/models/char/bossCog-head-Ff_neutral.bam", "head-jump": "phase_9/models/char/bossCog-head-Fb_jump.bam", "head-throw": "phase_9/models/char/bossCog-head-Fb_UpThrow.bam", "head-fall": "phase_9/models/char/bossCog-head-Fb_firstHit.bam", "head-up": "phase_9/models/char/bossCog-head-Fb_down2Up.bam", "head-dn_neutral": "phase_9/models/char/bossCog-head-Fb_downNeutral.bam", "head-dn_throw": "phase_9/models/char/bossCog-head-Fb_DownThrow.bam", "head-speech": "phase_9/models/char/bossCog-head-Ff_speech.bam", "head-wave": "phase_9/models/char/bossCog-head-wave.bam", "head-downhit": "phase_9/models/char/bossCog-head-Fb_firstHit.bam" }) self.vp_head.reparentTo(self.vp_head_joint) self.vp_legs = Actor( "phase_9/models/char/bossCog-legs-zero.bam", { "legs-stand-angry": "phase_9/models/char/bossCog-legs-Fb_neutral.bam", "legs-stand-happy": "phase_9/models/char/bossCog-legs-Ff_neutral.bam", "legs-jump": "phase_9/models/char/bossCog-legs-Fb_jump.bam", "legs-throw": "phase_9/models/char/bossCog-legs-Fb_UpThrow.bam", "legs-fall": "phase_9/models/char/bossCog-legs-Fb_firstHit.bam", "legs-up": "phase_9/models/char/bossCog-legs-Fb_down2Up.bam", "legs-dn_neutral": "phase_9/models/char/bossCog-legs-Fb_downNeutral.bam", "legs-dn_throw": "phase_9/models/char/bossCog-legs-Fb_DownThrow.bam", "legs-speech": "phase_9/models/char/bossCog-legs-Ff_speech.bam", "legs-wave": "phase_9/models/char/bossCog-legs-wave.bam", "legs-downhit": "phase_9/models/char/bossCog-legs-Fb_firstHit.bam" }) self.vp_legs.reparentTo(render) self.vp_legs_joint = self.vp_legs.find('**/joint_legs') self.vp_torso.reparentTo(self.vp_legs_joint) self.emote = 'angry' self.vp_head.loop("head-stand-angry") self.vp_legs.loop("legs-stand-angry") self.vp_torso.loop("torso-stand-angry") self.btn_happy = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Happy", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(1, 0.8, 0.8), command=self.goto_happy) self.btn_angry = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Angry", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(1, 0.7, 0.7), command=self.goto_angry) self.btn_jump = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Jump", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.8, 0.8), command=self.goto_jump) self.btn_throw = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Throw", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.7, 0.7), command=self.vp_throw) self.btn_collapse = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Down", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.6, 0.6), command=self.vp_collapse) self.btn_up = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Up", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.5, 0.5), command=self.goto_up) self.btn_speech = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Speech", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.4, 0.4), command=self.goto_speech) self.btn_wave = DirectButton( geom=(self.button_img.find('**/QuitBtn_UP'), self.button_img.find('**/QuitBtn_DN'), self.button_img.find('**/QuitBtn_RLVR')), relief=None, clickSound=click, rolloverSound=rollover, scale=1, text="Wave", text_font=impress_bt, text_scale=0.059999999999999998, text_pos=(0, -0.015), pos=(-1, 0.3, 0.3), command=self.goto_wave) self.slider_turn = DirectSlider(range=(-150, 150), value=0, pageSize=20, command=self.turn_vp, scale=0.7, orientation=DGG.VERTICAL, pos=(1, -0.2, -0.2)) self.find = self.vp_torso.findAllMatches('**') print self.find def goto_happy(self): taskMgr.add(self.vp_happy, "VP HAPPY") def goto_angry(self): taskMgr.add(self.vp_angry, "VP ANGRY") def goto_jump(self): taskMgr.add(self.vp_jump, "VP JUMP1") def goto_speech(self): taskMgr.add(self.vp_speech, "VP SPEECH") def goto_wave(self): taskMgr.add(self.vp_wave, "VP WAVE") def goto_up(self): taskMgr.add(self.vp_up, "VP WAVE") def turn_vp(self): self.vp_torso.setH(self.slider_turn['value']) def vp_happy(self, task): self.btn_happy.show() self.btn_angry.show() self.btn_jump.show() self.btn_throw.show() self.btn_collapse.show() self.btn_up.show() self.btn_speech.show() self.btn_wave.show() try: self.btn_stop_speech.remove() except: print("button does not exist") try: self.btn_stop_wave.remove() except: print("button does not exist") self.emote = 'happy' print self.emote self.vp_head.loop("head-stand-happy") self.vp_legs.loop("legs-stand-happy") self.vp_torso.loop("torso-stand-happy") try: if self.position == 'down': self.vp_head.loop("head-dn_neutral") self.vp_torso.loop("torso-dn_neutral") self.vp_legs.loop("legs-dn_neutral") except: print("var not set") return task.done def vp_angry(self, task): self.btn_happy.show() self.btn_wave.show() self.btn_angry.show() self.btn_jump.show() self.btn_throw.show() self.btn_collapse.show() self.btn_up.show() self.btn_speech.show() try: self.btn_stop_speech.remove() except: print("button does not exist") try: self.btn_stop_wave.remove() except: print("button does not exist") self.emote = 'angry' print self.emote self.vp_head.loop("head-stand-angry") self.vp_legs.loop("legs-stand-angry") self.vp_torso.loop("torso-stand-angry") try: if self.position == 'down': self.vp_head.loop("head-dn_neutral") self.vp_torso.loop("torso-dn_neutral") self.vp_legs.loop("legs-dn_neutral") except: print("var not set") return task.done def gear_hide(self, task): gear_1.hide() return task.done def vp_jump(self, task): try: if self.position == 'down': self.direction = 'jump' self.goto_up() return except: print("var not set") self.btn_happy.hide() self.btn_angry.hide() self.btn_wave.hide() self.btn_jump.hide() self.btn_throw.hide() self.btn_collapse.hide() self.btn_up.hide() self.btn_speech.hide() self.action = 'jump' print self.action self.position = 'up' self.vp_head.play("head-jump") self.vp_legs.play("legs-jump") self.vp_torso.play("torso-jump") jump_start.play() taskMgr.doMethodLater(1.2, self.vp_jump_end, "end sound") if self.emote == 'happy': taskMgr.doMethodLater(3, self.vp_happy, "Happy VP") if self.emote == 'angry': taskMgr.doMethodLater(3, self.vp_angry, "Angry VP") return task.done def vp_speech(self, task): self.btn_speech.hide() try: if self.position == 'down': self.direction = 'speech' self.goto_up() return except: print("var not set") self.btn_happy.hide() self.btn_angry.hide() self.btn_jump.hide() self.btn_throw.hide() self.btn_collapse.hide() self.btn_up.hide() self.btn_wave.hide() self.action = 'speech' print self.action self.vp_head.loop("head-speech") self.vp_legs.loop("legs-speech") self.vp_torso.loop("torso-speech") self.OK_ButtonImage = loader.loadModel( "phase_3/models/gui/dialog_box_buttons_gui.bam") self.btn_stop_speech = DirectButton( geom=(self.OK_ButtonImage.find('**/CloseBtn_UP'), self.OK_ButtonImage.find('**/CloseBtn_DN'), self.OK_ButtonImage.find('**/CloseBtn_Rllvr')), rolloverSound=rollover, clickSound=click, relief=None, scale=1.5, pos=(-1, 0.4, 0.4), text="Stop", text_scale=0.05, text_font=impress_bt, text_pos=(0, -0.1, -0.1), command=self.stop_speech) return task.done def vp_wave(self, task): self.btn_speech.hide() self.btn_wave.hide() try: if self.position == 'down': self.direction = 'wave' self.goto_up() return except: print("var not set") self.btn_happy.hide() self.btn_angry.hide() self.btn_jump.hide() self.btn_throw.hide() self.btn_collapse.hide() self.btn_up.hide() self.action = 'wave' print self.action self.vp_head.loop("head-wave") self.vp_legs.loop("legs-wave") self.vp_torso.loop("torso-wave") self.OK_ButtonImage = loader.loadModel( "phase_3/models/gui/dialog_box_buttons_gui.bam") self.btn_stop_wave = DirectButton( geom=(self.OK_ButtonImage.find('**/CloseBtn_UP'), self.OK_ButtonImage.find('**/CloseBtn_DN'), self.OK_ButtonImage.find('**/CloseBtn_Rllvr')), rolloverSound=rollover, clickSound=click, relief=None, scale=1.5, pos=(-1, 0.3, 0.3), text="Stop", text_scale=0.05, text_font=impress_bt, text_pos=(0, -0.1, -0.1), command=self.stop_wave) return task.done def stop_speech(self): if self.emote == 'happy': taskMgr.add(self.vp_happy, "VP HAPPY1") if self.emote == 'angry': taskMgr.add(self.vp_angry, "VP ANGRY1") def stop_wave(self): if self.emote == 'happy': taskMgr.add(self.vp_happy, "VP HAPPY2") if self.emote == 'angry': taskMgr.add(self.vp_angry, "VP ANGRY2") def vp_collapse(self): self.btn_happy.hide() self.btn_angry.hide() self.btn_jump.hide() self.btn_throw.hide() self.btn_collapse.hide() self.btn_up.hide() self.btn_speech.hide() self.btn_wave.hide() self.position = 'down' print self.position self.vp_head.play("head-fall") self.vp_torso.play("torso-fall") self.vp_legs.play("legs-fall") vp_down.play() if self.emote == 'happy': taskMgr.doMethodLater(3, self.vp_happy, "Happy VP") if self.emote == 'angry': taskMgr.doMethodLater(3, self.vp_angry, "Angry VP") def vp_up(self, task): try: if self.direction == 'jump': self.direction = None self.vp_head.play("head-up") self.vp_torso.play("torso-up") self.vp_legs.play("legs-up") taskMgr.doMethodLater(2.6, self.vp_jump, "VP JUMP") except: print("var not set") try: if self.direction == 'speech': self.direction = None self.vp_head.play("head-up") self.vp_torso.play("torso-up") self.vp_legs.play("legs-up") taskMgr.doMethodLater(2.6, self.vp_speech, "VP SPEECH") except: print("var not set") try: if self.direction == 'wave': self.direction = None self.vp_head.play("head-up") self.vp_torso.play("torso-up") self.vp_legs.play("legs-up") taskMgr.doMethodLater(2.6, self.vp_wave, "VP WAVE") except: print("var not set") self.btn_happy.hide() self.btn_angry.hide() self.btn_jump.hide() self.btn_wave.hide() self.btn_throw.hide() self.btn_collapse.hide() self.btn_up.hide() self.btn_speech.hide() self.position = 'up' print self.position self.vp_head.play("head-up") self.vp_torso.play("torso-up") self.vp_legs.play("legs-up") vp_up.play() if self.emote == 'happy': taskMgr.doMethodLater(2.6, self.vp_happy, "Happy VP") if self.emote == 'angry': taskMgr.doMethodLater(2.6, self.vp_angry, "Angry VP") return task.done def vp_throw(self): self.btn_speech.hide() self.btn_happy.hide() self.btn_collapse.hide() self.btn_angry.hide() self.btn_jump.hide() self.btn_wave.hide() self.btn_throw.hide() self.btn_up.hide() gear_1.show() gear_1_interval = gear_1.posInterval(2, Point3(0, -200, 5), startPos=Point3(0, -2, 5)) gear_1_move = Sequence(gear_1_interval, name="gear_1_throw") gear_1_move.start() taskMgr.doMethodLater(2, self.gear_hide, "Hide Gear") self.action = 'throw' print self.action gear_throw.play() self.vp_head.play("head-throw") self.vp_legs.play("legs-throw") self.vp_torso.play("torso-throw") try: if self.position == 'down': self.vp_head.play("head-dn_throw") self.vp_torso.play("torso-dn_throw") self.vp_legs.play("legs-dn_throw") except: print("var not set") if self.emote == 'happy': taskMgr.doMethodLater(0.9, self.vp_happy, "Happy VP") if self.emote == 'angry': taskMgr.doMethodLater(0.9, self.vp_angry, "Angry VP") def vp_jump_end(self, task): jump_end.play() def give_pos(self): print camera.getPos() def give_hpr(self): print camera.getHpr()
class Pies: notify = DirectNotify().newCategory("Pies") def __init__(self): self.models = { 1: "phase_3.5/models/props/tart.bam", 0: "phase_5/models/props/birthday-cake-mod.bam", 2: "phase_5/models/props/cream-pie-slice.bam" } self.hitsounds = { 1: "phase_4/audio/sfx/AA_wholepie_only.ogg", 0: "phase_4/audio/sfx/AA_wholepie_only.ogg", 2: "phase_3.5/audio/sfx/AA_tart_only.ogg" } self.splatcolors = { 1: VBase4(1, 1, 0, 1), 0: VBase4(1, 0, 1, 1), 2: VBase4(1, 1, 0, 1) } self.playrates = {1: 1.0, 0: 1.0, 2: 1.0} self.damage = {1: 36, 0: 75, 2: 17} self.max_ammo = {1: 7, 0: 3, 2: 15} self.current_ammo = {1: 7, 0: 3, 2: 15} self.avatar = None self.splat = None self.pie = None self.woosh = None self.pie_type = 1 # Default pie is the wholecream pie. self.pie_state = "start" return def delete(self): self.avatar = None if self.splat is not None: self.splat.cleanup() self.splat = None if self.pie is not None: self.deletePie() self.pie_type = None self.pie_state = None self.current_ammo = None self.max_ammo = None self.damage = None self.playrates = None self.splatcolors = None self.hitsounds = None self.models = None return def setAvatar(self, avatar): self.avatar = avatar def getAvatar(self): return self.avatar def setPieType(self, pietype): self.pie_type = pietype def getPieType(self): return self.pie_type def setAmmo(self, ammo, pietype=None): if pietype is None: pietype = self.getPieType() self.current_ammo[pietype] = ammo def getAmmo(self, pietype=None): if pietype is None: pietype = self.getPieType() return self.current_ammo[pietype] def getDamage(self): return self.damage[self.pie_type] def deletePie(self): try: self.trajectory.pause() except: pass if self.pie: self.pie.removeNode() self.pie = None def pieStart(self): self.pie = Pie(self, self.avatar, self.pie_type) self.pie.load() self.avatar.setPlayRate(self.playrates[self.pie_type], "pie") self.avatar.play("pie", fromFrame=0, toFrame=45) def pieThrow(self): self.avatar.play("pie", fromFrame=45, toFrame=90) def pieRelease(self): if self.pie is None: return self.pie.throw() self.setAmmo(self.getAmmo() - 1) def handlePieSplat(self): if self.splat: self.splat.cleanup() self.splat = None self.splat = Actor("phase_3.5/models/props/splat-mod.bam", {"chan": "phase_3.5/models/props/splat-chan.bam"}) self.splat_sfx = audio3d.loadSfx(self.hitsounds[self.pie_type]) audio3d.attachSoundToObject(self.splat_sfx, self.splat) self.splat_sfx.play() self.splat.reparentTo(render) self.splat.setBillboardPointEye() self.splat.setColor(self.splatcolors[self.pie_type]) if self.pie and self.splat: self.splat.setPos(self.pie.getPos(render)) self.splat.play("chan") if self.woosh: self.woosh.stop() self.woosh = None try: self.trajectory.pause() except: pass if self.pie: self.pie.removeNode() self.pie = None taskMgr.doMethodLater(0.5, self.delSplat, "delSplat") def delSplat(self, task): if self.splat: self.splat.cleanup() self.splat = None return task.done
class Pies: notify = DirectNotify().newCategory("Pies") def __init__(self): self.models = { 1: "phase_3.5/models/props/tart.bam", 0: "phase_5/models/props/birthday-cake-mod.bam", 2: "phase_5/models/props/cream-pie-slice.bam" } self.hitsounds = { 1: "phase_4/audio/sfx/AA_wholepie_only.mp3", 0: "phase_4/audio/sfx/AA_wholepie_only.mp3", 2: "phase_3.5/audio/sfx/AA_tart_only.mp3" } self.splatcolors = { 1: VBase4(1, 1, 0, 1), 0: VBase4(1, 0, 1, 1), 2: VBase4(1, 1, 0, 1) } self.playrates = {1: 1.0, 0: 1.0, 2: 1.0, 3: 1.0} self.damage = {1: 36, 0: 75, 2: 17, 3: 180} self.health = {1: 5, 0: 10, 2: 2} self.max_ammo = {1: 7, 0: 3, 2: 15, 3: 2} self.current_ammo = {1: 7, 0: 3, 2: 15, 3: 0} self.weapon_id_2_weapon = {0: "cake", 1: "tart", 2: "slice", 3: "tnt"} self.avatar = None self.splat = None self.pie = None self.tnt = None self.tntSparks = None self.tntTrajectory = None self.tntExplosion = None self.woosh = None self.dynamiteSfx = None self.pie_type = 1 # Default pie is the wholecream pie. self.pie_state = "start" self.tnt_state = "ready" return def getPieTypeName(self): return self.weapon_id_2_weapon.get(self.pie_type, None) def attachTNT(self): self.detachTNT() self.tnt = Actor("phase_5/models/props/tnt-mod.bam", {"chan": "phase_5/models/props/tnt-chan.bam"}) self.tnt.reparentTo(self.avatar.find('**/def_joint_right_hold')) self.tntSparks = ParticleEffect() self.tntSparks.loadConfig("phase_5/etc/tnt.ptf") #self.tntSparks.start(parent = self.tnt.find('**/joint_attachEmitter'), # renderParent = self.tnt.find('**/joint_attachEmitter')) def detachTNT(self): if self.tntTrajectory: self.tntTrajectory.pause() self.tntTrajectory = None if self.tnt is not None: self.tnt.cleanup() self.tnt = None if self.tntSparks is not None: self.tntSparks.cleanup() self.tntSparks = None def delete(self): self.avatar = None if self.splat is not None: self.splat.cleanup() self.splat = None self.detachTNT() self.tnt = None self.tnt_state = None self.tntSparks = None if self.tntExplosion: self.tntExplosion.cleanup() self.tntExplosion = None if self.dynamiteSfx: self.dynamiteSfx.stop() self.dynamiteSfx = None if self.pie is not None: self.deletePie() self.pie_type = None self.pie_state = None self.current_ammo = None self.max_ammo = None self.damage = None self.playrates = None self.splatcolors = None self.hitsounds = None self.models = None return def setAvatar(self, avatar): self.avatar = avatar def getAvatar(self): return self.avatar def setPieType(self, pietype): self.pie_type = pietype weaponType = None if pietype in [0, 1, 2]: weaponType = "pie" elif pietype == 3: weaponType = "tnt" if hasattr(self.avatar, 'setWeaponType'): self.avatar.setWeaponType(weaponType) def getPieType(self): return self.pie_type def setAmmo(self, ammo, pietype=None): if pietype is None: pietype = self.getPieType() self.current_ammo[pietype] = ammo def getAmmo(self, pietype=None): if pietype is None: pietype = self.getPieType() return self.current_ammo[pietype] def getDamage(self, weapon_id=None): if weapon_id is None: return self.damage[self.pie_type] else: return self.damage[weapon_id] def getHealth(self, weapon_id=None): if weapon_id is None: return self.health[self.pie_type] else: return self.health[weapon_id] def deletePie(self): try: self.trajectory.pause() except: pass if self.pie: self.pie.removeNode() self.pie = None def pieStart(self): try: audio3d.detachSound(self.woosh) self.trajectory.pause() self.pie.remove() self.pie = None except: pass self.pie_state = 'start' self.pie = loader.loadModel(self.models[self.pie_type]) self.pie.reparentTo( self.avatar.getPart('torso').find('**/def_joint_right_hold')) self.avatar.setPlayRate(self.playrates[self.pie_type], "pie") self.avatar.play("pie", fromFrame=0, toFrame=45) def tntStart(self): self.avatar.play("toss", fromFrame=22) self.tnt_state = "start" def tntRelease(self): if self.tnt is None: return tntNp = self.avatar.attachNewNode('tntNp') tntNp.setScale(render, 1.0) tntNp.setPos(0, 160, -120) tntNp.setHpr(0, 90, 0) self.tntTrajectory = ProjectileInterval( self.tnt, startPos=(self.avatar.getPart('torso').find( '**/def_joint_right_hold').getPos(render)), endPos=tntNp.getPos(render), gravityMult=0.9, duration=3) self.tnt.setHpr(tntNp.getHpr(render)) self.tntTrajectory.start() self.tnt.reparentTo(render) self.tnt_state = "released" self.setAmmo(self.getAmmo() - 1) def handleTntHitGround(self): if not self.tnt: return self.tntSparks.start( parent=self.tnt.find('**/joint_attachEmitter'), renderParent=self.tnt.find('**/joint_attachEmitter')) self.dynamiteSfx = audio3d.loadSfx("phase_5/audio/sfx/TL_dynamite.mp3") audio3d.attachSoundToObject(self.dynamiteSfx, self.tnt) self.dynamiteSfx.play() self.tnt.play("chan") if self.tntTrajectory: self.tntTrajectory.pause() self.tntTrajectory = None def tntExplode(self): if not self.tnt: return self.tntExplosion = Actor( "phase_5/models/props/kapow-mod.bam", {"chan": "phase_5/models/props/kapow-chan.bam"}) self.tntExplosion.reparentTo(render) self.tntExplosion.setBillboardPointEye() self.tntExplosion.setPos(self.tnt.getPos(render) + (0, 0, 4)) self.tntExplosion.setScale(0.5) self.tntExplosion.play("chan") if self.dynamiteSfx: self.dynamiteSfx.stop() self.dynamiteSfx = None explosionSfx = audio3d.loadSfx( "phase_3.5/audio/sfx/ENC_cogfall_apart.mp3") audio3d.attachSoundToObject(explosionSfx, self.tntExplosion) SoundInterval(explosionSfx).start() if self.tntSparks: self.tntSparks.cleanup() self.tntSparks = None if self.tnt: self.tnt.cleanup() self.tnt = None self.tnt_state = "ready" if self.getAmmo(3) > 0 and self.getPieType() == 3: self.attachTNT() if hasattr(self.avatar, "enablePieKeys"): # This must be the local avatar self.avatar.enablePieKeys() taskMgr.doMethodLater(0.5, self.delTntExplosion, "delTntExplosion") def delTntExplosion(self, task): if self.tntExplosion: self.tntExplosion.cleanup() self.tntExplosion = None return task.done def tntCollisions(self): if not self.tnt: return tss = CollisionSphere(0, 0, 0, 1) tsNode = CollisionNode('tntSensor') tsNode.add_solid(tss) self.tsNp = self.tnt.attach_new_node(tsNode) self.tsNp.set_scale(0.75, 0.8, 0.75) self.tsNp.set_pos(0.0, 0.1, 0.5) self.tsNp.set_collide_mask(BitMask32(0)) self.tsNp.node().set_from_collide_mask(CIGlobals.FloorBitmask) event = CollisionHandlerEvent() event.set_in_pattern("%fn-into") event.set_out_pattern("%fn-out") base.cTrav.add_collider(self.tsNp, event) def setTntPos(self, pos): if self.tnt: self.tnt.setPos(pos) def pieCollisions(self): pss = CollisionSphere(0, 0, 0, 1) psnode = CollisionNode('pieSensor') psnode.add_solid(pss) self.psnp = self.pie.attach_new_node(psnode) self.psnp.set_collide_mask(BitMask32(0)) self.psnp.node().set_from_collide_mask(CIGlobals.WallBitmask | CIGlobals.FloorBitmask) event = CollisionHandlerEvent() event.set_in_pattern("%fn-into") event.set_out_pattern("%fn-out") base.cTrav.add_collider(self.psnp, event) def pieThrow(self): self.avatar.play("pie", fromFrame=45, toFrame=90) def pieRelease(self): if self.pie is None: return self.woosh = audio3d.loadSfx( "phase_3.5/audio/sfx/AA_pie_throw_only.mp3") audio3d.attachSoundToObject(self.woosh, self.pie) self.woosh.play() self.pieNp = NodePath("PieNp") self.pieNp.reparentTo(self.avatar) self.pieNp.setScale(render, 1.0) self.pieNp.setPos(0, 160, -90) self.pieNp.setHpr(90, -90, 90) self.pie.setScale(self.pie.getScale(render)) self.pie.reparentTo(render) self.pie.setHpr(self.pieNp.getHpr(render)) self.trajectory = ProjectileInterval( self.pie, startPos=(self.avatar.getPart('torso').find( '**/def_joint_right_hold').getPos(render)), endPos=self.pieNp.getPos(render), gravityMult=0.9, duration=3) self.trajectory.start() self.pie_state = 'released' self.setAmmo(self.getAmmo() - 1) def handlePieSplat(self): if self.splat: self.splat.cleanup() self.splat = None if self.pie_type == 3: # Not sure why I get a KeyError: 3 crash, but just for now # return if the pie type is tnt (3). return self.splat = Actor("phase_3.5/models/props/splat-mod.bam", {"chan": "phase_3.5/models/props/splat-chan.bam"}) self.splat_sfx = audio3d.loadSfx(self.hitsounds[self.pie_type]) audio3d.attachSoundToObject(self.splat_sfx, self.splat) self.splat_sfx.play() pietype2splatscale = {0: 0.6, 1: 0.5, 2: 0.35} self.splat.setScale(pietype2splatscale[self.pie_type]) self.splat.reparentTo(render) self.splat.setBillboardPointEye() self.splat.setColor(self.splatcolors[self.pie_type]) if self.pie and self.splat: self.splat.setPos(self.pie.getPos(render)) self.splat.play("chan") if self.woosh: self.woosh.stop() self.woosh = None try: self.trajectory.pause() except: pass if self.pie: self.pie.removeNode() self.pie = None taskMgr.doMethodLater(0.5, self.delSplat, "delSplat") del pietype2splatscale def delSplat(self, task): if self.splat: self.splat.cleanup() self.splat = None return task.done
class TTCHood: def __init__(self, cr): self.cr = cr self.dnaStore = DNAStorage() self.isLoaded = 0 self.suitEffectEnabled = False self.amblight = None self.ambNode = None self.sky = None self.skyTrack = None self.skySeq = None self.lightTrack = None self.skyUtil = SkyUtil() def createHood(self, loadStorage = 1, AI = 0): if loadStorage: loadDNAFile(self.dnaStore, "phase_4/dna/storage.dna") loadDNAFile(self.dnaStore, "phase_4/dna/storage_TT.dna") loadDNAFile(self.dnaStore, "phase_4/dna/storage_TT_sz.dna") loadDNAFile(self.dnaStore, "phase_5/dna/storage_town.dna") loadDNAFile(self.dnaStore, "phase_5/dna/storage_TT_town.dna") self.node = loadDNAFile(self.dnaStore, "phase_4/dna/toontown_central_sz.dna") if self.node.getNumParents() == 1: self.geom = NodePath(self.node.getParent(0)) self.geom.reparentTo(hidden) else: self.geom = hidden.attachNewNode(self.node) gsg = base.win.getGsg() if gsg: self.geom.prepareScene(gsg) self.geom.setName('toontown_central') self.geom.find('**/hill').setTransparency(TransparencyAttrib.MBinary, 1) self.createSky("tt") base.hoodBGM = base.loadMusic("phase_4/audio/bgm/TC_nbrhood.ogg") base.hoodBGM.setVolume(0.25) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.clerk_node = render.attach_new_node('clerk_node') self.clerk_node.set_pos(-80, -85.57, 0.5) self.clerk_node.set_h(165.07) self.geom.find('**/toontown_central').setCollideMask(BitMask32.allOff()) self.geom.find('**/coll_sidewalk').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/collision_1').node().setIntoCollideMask(CIGlobals.WallBitmask) self.geom.find('**/coll_mainFoolr').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/left_ear').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/right_ear').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_bridge_floor').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_bridge').node().setIntoCollideMask(CIGlobals.WallBitmask) self.geom.find('**/coll_r_stair').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_l_stair_2').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_l_stairend_1').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_r_satirend_1').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_plaza').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_hedges').node().setIntoCollideMask(CIGlobals.WallBitmask) self.coll_list = ['coll_sidewalk', 'collision_1', 'coll_mainFoolr', 'left_ear', 'right_ear', 'coll_bridge_floor', 'coll_bridge', 'coll_r_stair', 'coll_l_stair_2', 'coll_l_stairend_1', 'coll_r_stairend_1', 'coll_plaza', 'coll_hedges'] self.geom.reparentTo(render) self.telescope = Actor(self.geom.find('**/*animated_prop_HQTelescopeAnimatedProp*'), {"chan": "phase_3.5/models/props/HQ_telescope-chan.bam"}, copy=0) self.telescope.reparentTo(self.geom.find('**/*toon_landmark_hqTT*')) self.createLights(1, 1, 1) #if AI: # self.createTrolley() taskMgr.add(self.telescopeTask, "telescopeTask") self.isLoaded = 1 messenger.send("loadedHood") def createLights(self, r, g, b, startColor=1, fade=0): self.deleteLights() self.amblight = AmbientLight("amblight") self.amblight.setColor(VBase4(r, g, b, 1)) self.ambNode = render.attachNewNode(self.amblight) render.setLight(self.ambNode) if fade: self.lightTrack = LerpFunc(self.setLightColor, fromData=startColor, toData=r, duration=2.5, blendType="easeInOut") self.lightTrack.start() self.skyTrack = LerpColorInterval(self.sky, color=VBase4(r + 0.4, g + 0.4, b + 0.4, 1.0), startColor=VBase4(startColor, startColor, startColor, 1.0), duration=1.5) self.skyTrack.start() sky = "tt" if r < 0.6: sky = "br" self.skySeq = Sequence(Wait(1.5), Func(self.createSky, sky)) self.skySeq.start() def createSky(self, sky): self.deleteSky() skyPath = "phase_3.5/models/props/" + sky.upper() + "_sky.bam" self.sky = loader.loadModel(skyPath) self.sky.reparentTo(self.geom) self.sky.setPos(9.15527e-005, -1.90735e-006, 2.6226e-006) self.sky.setH(-90) if sky == "tt": self.skyUtil.startSky(self.sky) def deleteSky(self): self.skyUtil.stopSky() if self.sky: self.sky.removeNode() self.sky = None if self.lightTrack: self.lightTrack.pause() self.lightTrack = None if self.skyTrack: self.skyTrack.pause() self.skyTrack = None if self.skySeq: self.skySeq.pause() self.skySeq = None def setLightColor(self, color): self.amblight.setColor(VBase4(color, color, color, 1)) def deleteLights(self): if self.ambNode: render.clearLight(self.ambNode) self.ambNode.removeNode() self.ambNode = None def telescopeTask(self, task): if not self.isLoaded: return task.done self.telescope.play("chan") task.delayTime = 12 return task.again def enableSuitEffect(self, size): self.createLights(0.4, 0.4, 0.4, startColor=1, fade=1) self.fogNode = Fog("fog") self.fogNode.setColor(0.3, 0.3, 0.3) self.fogNode.setExpDensity(0.0025) render.setFog(self.fogNode) base.hoodBGM.stop() song = random.randint(1, 4) base.hoodBGM = base.loadMusic("phase_3.5/audio/bgm/encntr_general_bg.ogg") base.hoodBGM.setVolume(0.7) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.suitEffectEnabled = True def bossSpawned(self): base.hoodBGM.stop() base.hoodBGM = base.loadMusic("phase_7/audio/bgm/encntr_suit_winning_indoor.ogg") base.hoodBGM.setVolume(0.7) base.hoodBGM.setLoop(True) Sequence(Wait(0.5), Func(base.hoodBGM.play)).start() def disableSuitEffect(self): self.createLights(1, 1, 1) self.createSky("tt") #render.clearFog() base.hoodBGM.stop() base.hoodBGM = base.loadMusic("phase_4/audio/bgm/TC_nbrhood.ogg") base.hoodBGM.setVolume(0.25) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.suitEffectEnabled = False def unloadHood(self): self.isLoaded = 0 if self.suitEffectEnabled: self.disableSuitEffect() self.deleteSky() self.deleteLights() self.geom.remove() self.clerk_node.remove_node() base.hoodBGM.stop()
class TTCHood: def __init__(self, cr): self.cr = cr self.dnaStore = DNAStorage() self.isLoaded = 0 self.suitEffectEnabled = False self.amblight = None self.ambNode = None self.sky = None self.skyTrack = None self.skySeq = None self.lightTrack = None self.skyUtil = SkyUtil() return def createHood(self, loadStorage = 1, AI = 0): if loadStorage: loadDNAFile(self.dnaStore, 'phase_4/dna/storage.dna') loadDNAFile(self.dnaStore, 'phase_4/dna/storage_TT.dna') loadDNAFile(self.dnaStore, 'phase_4/dna/storage_TT_sz.dna') loadDNAFile(self.dnaStore, 'phase_5/dna/storage_town.dna') loadDNAFile(self.dnaStore, 'phase_5/dna/storage_TT_town.dna') self.node = loadDNAFile(self.dnaStore, 'phase_4/dna/toontown_central_sz.dna') if self.node.getNumParents() == 1: self.geom = NodePath(self.node.getParent(0)) self.geom.reparentTo(hidden) else: self.geom = hidden.attachNewNode(self.node) gsg = base.win.getGsg() if gsg: self.geom.prepareScene(gsg) self.geom.setName('toontown_central') self.geom.find('**/hill').setTransparency(TransparencyAttrib.MBinary, 1) self.createSky('tt') base.hoodBGM = base.loadMusic('phase_4/audio/bgm/TC_nbrhood.ogg') base.hoodBGM.setVolume(0.25) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.clerk_node = render.attach_new_node('clerk_node') self.clerk_node.set_pos(-80, -85.57, 0.5) self.clerk_node.set_h(165.07) self.geom.find('**/toontown_central').setCollideMask(BitMask32.allOff()) self.geom.find('**/coll_sidewalk').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/collision_1').node().setIntoCollideMask(CIGlobals.WallBitmask) self.geom.find('**/coll_mainFoolr').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/left_ear').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/right_ear').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_bridge_floor').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_bridge').node().setIntoCollideMask(CIGlobals.WallBitmask) self.geom.find('**/coll_r_stair').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_l_stair_2').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_l_stairend_1').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_r_satirend_1').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_plaza').node().setIntoCollideMask(CIGlobals.FloorBitmask) self.geom.find('**/coll_hedges').node().setIntoCollideMask(CIGlobals.WallBitmask) self.coll_list = ['coll_sidewalk', 'collision_1', 'coll_mainFoolr', 'left_ear', 'right_ear', 'coll_bridge_floor', 'coll_bridge', 'coll_r_stair', 'coll_l_stair_2', 'coll_l_stairend_1', 'coll_r_stairend_1', 'coll_plaza', 'coll_hedges'] self.geom.reparentTo(render) self.telescope = Actor(self.geom.find('**/*animated_prop_HQTelescopeAnimatedProp*'), {'chan': 'phase_3.5/models/props/HQ_telescope-chan.bam'}, copy=0) self.telescope.reparentTo(self.geom.find('**/*toon_landmark_hqTT*')) self.createLights(1, 1, 1) taskMgr.add(self.telescopeTask, 'telescopeTask') self.isLoaded = 1 messenger.send('loadedHood') def createLights(self, r, g, b, startColor = 1, fade = 0): self.deleteLights() self.amblight = AmbientLight('amblight') self.amblight.setColor(VBase4(r, g, b, 1)) self.ambNode = render.attachNewNode(self.amblight) render.setLight(self.ambNode) if fade: self.lightTrack = LerpFunc(self.setLightColor, fromData=startColor, toData=r, duration=2.5, blendType='easeInOut') self.lightTrack.start() self.skyTrack = LerpColorInterval(self.sky, color=VBase4(r + 0.4, g + 0.4, b + 0.4, 1.0), startColor=VBase4(startColor, startColor, startColor, 1.0), duration=1.5) self.skyTrack.start() sky = 'tt' if r < 0.6: sky = 'br' self.skySeq = Sequence(Wait(1.5), Func(self.createSky, sky)) self.skySeq.start() def createSky(self, sky): self.deleteSky() skyPath = 'phase_3.5/models/props/' + sky.upper() + '_sky.bam' self.sky = loader.loadModel(skyPath) self.sky.reparentTo(self.geom) self.sky.setPos(9.15527e-05, -1.90735e-06, 2.6226e-06) self.sky.setH(-90) if sky == 'tt': self.skyUtil.startSky(self.sky) def deleteSky(self): self.skyUtil.stopSky() if self.sky: self.sky.removeNode() self.sky = None if self.lightTrack: self.lightTrack.pause() self.lightTrack = None if self.skyTrack: self.skyTrack.pause() self.skyTrack = None if self.skySeq: self.skySeq.pause() self.skySeq = None return def setLightColor(self, color): self.amblight.setColor(VBase4(color, color, color, 1)) def deleteLights(self): if self.ambNode: render.clearLight(self.ambNode) self.ambNode.removeNode() self.ambNode = None return def telescopeTask(self, task): if not self.isLoaded: return task.done self.telescope.play('chan') task.delayTime = 12 return task.again def createTrolley(self): self.trolley = TrolleyBase(self.cr) def enableSuitEffect(self, size): self.createLights(0.4, 0.4, 0.4, startColor=1, fade=1) self.fogNode = Fog('fog') self.fogNode.setColor(0.3, 0.3, 0.3) self.fogNode.setExpDensity(0.0025) render.setFog(self.fogNode) base.hoodBGM.stop() song = random.randint(1, 4) base.hoodBGM = base.loadMusic('phase_3.5/audio/bgm/encntr_general_bg.ogg') base.hoodBGM.setVolume(0.7) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.suitEffectEnabled = True def bossSpawned(self): base.hoodBGM.stop() base.hoodBGM = base.loadMusic('phase_7/audio/bgm/encntr_suit_winning_indoor.ogg') base.hoodBGM.setVolume(0.7) base.hoodBGM.setLoop(True) Sequence(Wait(0.5), Func(base.hoodBGM.play)).start() def disableSuitEffect(self): self.createLights(1, 1, 1) self.createSky('tt') base.hoodBGM.stop() base.hoodBGM = base.loadMusic('phase_4/audio/bgm/TC_nbrhood.ogg') base.hoodBGM.setVolume(0.25) base.hoodBGM.setLoop(True) base.hoodBGM.play() self.suitEffectEnabled = False def unloadHood(self): self.isLoaded = 0 if self.suitEffectEnabled: self.disableSuitEffect() self.deleteSky() self.deleteLights() self.geom.remove() self.clerk_node.remove_node() base.hoodBGM.stop()