diff --git a/toontown/building/DistributedToonHallInterior.py b/toontown/building/DistributedToonHallInterior.py index 31974dbc..e1c45b0f 100644 --- a/toontown/building/DistributedToonHallInterior.py +++ b/toontown/building/DistributedToonHallInterior.py @@ -1,65 +1,22 @@ -from toontown.toonbase.ToonBaseGlobal import * from direct.interval.IntervalGlobal import * from direct.distributed.ClockDelta import * from direct.showbase import Audio3DManager -from toontown.toonbase import ToontownGlobals -from toontown.dna.DNAParser import * -import cPickle from DistributedToonInterior import DistributedToonInterior from direct.directnotify import DirectNotifyGlobal from direct.fsm import ClassicFSM, State from direct.distributed import DistributedObject from direct.fsm import State from direct.actor import Actor -import random -import time -import ToonInteriorColors +from otp.ai.MagicWordGlobal import * +from toontown.toonbase import ToontownGlobals +from toontown.toonbase.ToonBaseGlobal import * +from toontown.dna.DNAParser import * from toontown.hood import ZoneUtil -from toontown.toon import ToonDNA -from toontown.toon import ToonHead from toontown.toon.DistributedNPCToonBase import DistributedNPCToonBase +import ToonInteriorColors, random class DistributedToonHallInterior(DistributedToonInterior): - def __init__(self, cr): - DistributedToonInterior.__init__(self, cr) - self.sillyFSM = ClassicFSM.ClassicFSM('SillyOMeter', [State.State('Setup', self.enterSetup, self.exitSetup, ['Phase0', - 'Phase1', - 'Phase2', - 'Phase3', - 'Phase4', - 'Phase5', - 'Phase6', - 'Phase7', - 'Phase8', - 'Phase9', - 'Phase10', - 'Phase11', - 'Phase12', - 'Phase13', - 'Phase14', - 'Phase15', - 'Flat', - 'Off']), - State.State('Phase0', self.enterPhase0, self.exitPhase0, ['Phase1', 'Flat', 'Off']), - State.State('Phase1', self.enterPhase1, self.exitPhase1, ['Phase2', 'Flat', 'Off']), - State.State('Phase2', self.enterPhase2, self.exitPhase2, ['Phase3', 'Flat', 'Off']), - State.State('Phase3', self.enterPhase3, self.exitPhase3, ['Phase4', 'Flat', 'Off']), - State.State('Phase4', self.enterPhase4, self.exitPhase4, ['Phase5', 'Flat', 'Off']), - State.State('Phase5', self.enterPhase5, self.exitPhase5, ['Phase6', 'Flat', 'Off']), - State.State('Phase6', self.enterPhase6, self.exitPhase6, ['Phase7', 'Flat', 'Off']), - State.State('Phase7', self.enterPhase7, self.exitPhase7, ['Phase8', 'Flat', 'Off']), - State.State('Phase8', self.enterPhase8, self.exitPhase8, ['Phase9', 'Flat', 'Off']), - State.State('Phase9', self.enterPhase9, self.exitPhase9, ['Phase10', 'Flat', 'Off']), - State.State('Phase10', self.enterPhase10, self.exitPhase10, ['Phase11', 'Flat', 'Off']), - State.State('Phase11', self.enterPhase11, self.exitPhase11, ['Phase12', 'Flat', 'Off']), - State.State('Phase12', self.enterPhase12, self.exitPhase12, ['Phase13', 'Flat', 'Off']), - State.State('Phase13', self.enterPhase13, self.exitPhase13, ['Phase14', 'Flat', 'Off']), - State.State('Phase14', self.enterPhase14, self.exitPhase14, ['Phase15', 'Flat', 'Off']), - State.State('Phase15', self.enterPhase15, self.exitPhase15, ['Flat', 'Off']), - State.State('Flat', self.enterFlat, self.exitFlat, ['Off', 'Phase0']), - State.State('Off', self.enterOff, self.exitOff, [])], 'Setup', 'Off') - def setup(self): self.dnaStore = base.cr.playGame.dnaStore self.randomGenerator = random.Random() @@ -88,95 +45,12 @@ class DistributedToonHallInterior(DistributedToonInterior): del self.dnaStore del self.randomGenerator self.interior.flattenMedium() - self.sillyFSM.enterInitialState() for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase): npcToon.initToonState() + + self.createSillyMeter() - def sillyMeterIsRunning(self, isRunning): - if isRunning: - self.sillyFSM.request('Phase0') - else: - self.sillyFSM.request('Flat') - - def selectPhase(self, newPhase): - try: - gotoPhase = 'Phase' + str(newPhase) - if self.sillyFSM.hasStateNamed(gotoPhase) and not self.sillyFSM.getCurrentState() == self.sillyFSM.getStateNamed(gotoPhase): - self.sillyFSM.request(gotoPhase) - except: - self.notify.warning('Illegal phase transition requested %s' % newPhase) - - def startIfNeeded(self): - try: - self.curPhase = self.getPhaseToRun() - if self.curPhase >= 0: - self.sillyFSM.request('Phase' + str(self.curPhase)) - else: - self.sillyFSM.request('Flat') - except: - pass - - def getPhaseToRun(self): - result = -1 - enoughInfoToRun = False - if base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_HOLIDAY) or base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_EXT_HOLIDAY): - if hasattr(base.cr, 'SillyMeterMgr') and not base.cr.SillyMeterMgr.isDisabled(): - enoughInfoToRun = True - elif hasattr(base.cr, 'SillyMeterMgr'): - self.notify.debug('isDisabled = %s' % base.cr.SillyMeterMgr.isDisabled()) - else: - self.notify.debug('base.cr does not have SillyMeterMgr') - else: - self.notify.debug('holiday is not running') - self.notify.debug('enoughInfoToRun = %s' % enoughInfoToRun) - if enoughInfoToRun and base.cr.SillyMeterMgr.getIsRunning(): - result = base.cr.SillyMeterMgr.getCurPhase() - return result - - def calculatePhaseDuration(self): - result = -1 - valid = False - if base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_HOLIDAY) or base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_EXT_HOLIDAY): - if hasattr(base.cr, 'SillyMeterMgr') and not base.cr.SillyMeterMgr.isDisabled(): - valid = True - elif hasattr(base.cr, 'SillyMeterMgr'): - self.notify.debug('isDisabled = %s' % base.cr.SillyMeterMgr.isDisabled()) - else: - self.notify.debug('base.cr does not have SillyMeterMgr') - else: - self.notify.debug('holiday is not running') - self.notify.debug('valid = %s' % valid) - if valid and base.cr.SillyMeterMgr.getIsRunning(): - result = base.cr.SillyMeterMgr.getCurPhaseDuration() - return result - - def calculateFrameOffset(self, phaseDuration, numFrames): - result = -1 - valid = False - if base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_HOLIDAY) or base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLYMETER_EXT_HOLIDAY): - if hasattr(base.cr, 'SillyMeterMgr') and not base.cr.SillyMeterMgr.isDisabled(): - valid = True - elif hasattr(base.cr, 'SillyMeterMgr'): - self.notify.debug('isDisabled = %s' % base.cr.SillyMeterMgr.isDisabled()) - else: - self.notify.debug('base.cr does not have SillyMeterMgr') - else: - self.notify.debug('holiday is not running') - self.notify.debug('valid = %s' % valid) - if valid and base.cr.SillyMeterMgr.getIsRunning(): - startTime = time.mktime(base.cr.SillyMeterMgr.getCurPhaseStartDate().timetuple()) - serverTime = time.mktime(base.cr.toontownTimeManager.getCurServerDateTime().timetuple()) - offset = (serverTime - startTime) / phaseDuration - if offset < 0: - result = -1 - else: - result = offset * numFrames - return result - - def calculateFrameRange(self, frameNo): - pass - - def enterSetup(self): + def createSillyMeter(self): ropes = loader.loadModel('phase_4/models/modules/tt_m_ara_int_ropes') ropes.reparentTo(self.interior) self.sillyMeter = Actor.Actor('phase_4/models/props/tt_a_ara_ttc_sillyMeter_default', {'arrowTube': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_arrowFluid', @@ -187,24 +61,6 @@ class DistributedToonHallInterior(DistributedToonInterior): 'phaseFourToFive': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFourToFive', 'phaseFive': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFive'}) self.sillyMeter.reparentTo(self.interior) - self.flatSillyMeter = loader.loadModel('phase_3.5/models/modules/tt_m_ara_int_sillyMeterFlat') - self.flatSillyMeter.reparentTo(self.interior) - self.flatSillyMeter.hide() - self.flatDuck = loader.loadModel('phase_3.5/models/modules/tt_m_ara_int_scientistDuckFlat') - loc1 = self.interior.find('**/npc_origin_1') - if loc1: - self.flatDuck.reparentTo(loc1) - self.flatDuck.hide() - self.flatMonkey = loader.loadModel('phase_3.5/models/modules/tt_m_ara_int_scientistMonkeyFlat') - loc1 = self.interior.find('**/npc_origin_2') - if loc1: - self.flatMonkey.reparentTo(loc1) - self.flatMonkey.hide() - self.flatHorse = loader.loadModel('phase_3.5/models/modules/tt_m_ara_int_scientistHorseFlat') - loc1 = self.interior.find('**/npc_origin_3') - if loc1: - self.flatHorse.reparentTo(loc1) - self.flatHorse.hide() self.smPhase1 = self.sillyMeter.find('**/stage1') self.smPhase2 = self.sillyMeter.find('**/stage2') self.smPhase3 = self.sillyMeter.find('**/stage3') @@ -234,21 +90,25 @@ class DistributedToonHallInterior(DistributedToonInterior): self.arrowSfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterArrow.ogg') self.arrowSfx.setLoop(False) self.audio3d.setDropOffFactor(0.1) - self.accept('SillyMeterPhase', self.selectPhase) - self.accept('SillyMeterIsRunning', self.sillyMeterIsRunning) - self.startIfNeeded() - - def exitSetup(self): - self.ignore('SillyMeterPhase') + + self.startSillyMeter(config.GetInt('silly-meter-phase', 12)) + + def startSillyMeter(self, phase): + self.stopSillyMeter() + + if hasattr(self, 'enterPhase%s' % phase): + getattr(self, 'enterPhase%s' % phase)() + self.phase = phase + + def stopSillyMeter(self): + if hasattr(self, 'phase') and hasattr(self, 'exitPhase%s' % self.phase): + getattr(self, 'exitPhase%s' % self.phase)() def enterPhase0(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=1, endFrame=30), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter))) + self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=1, endFrame=30), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter))) self.animSeq.start() self.sillyMeter.loop('phaseOne', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase0(self): self.animSeq.finish() @@ -259,14 +119,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase1(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 self.audio3d.attachSoundToObject(self.phase1Sfx, self.sillyMeter) - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=31, endFrame=42), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=42, endFrame=71), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=31, endFrame=42), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=42, endFrame=71), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) self.animSeq.start() self.sillyMeter.loop('phaseOne', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase1(self): self.audio3d.detachSound(self.phase1Sfx) @@ -277,14 +134,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase2(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=42, endFrame=71), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter))) + self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=42, endFrame=71), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter))) self.animSeq.start() self.smPhase2.show() self.sillyMeter.loop('phaseOne', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase2(self): self.animSeq.finish() @@ -296,14 +150,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase3(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=72, endFrame=83), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=83, endFrame=112), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=72, endFrame=83), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=83, endFrame=112), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.sillyMeter.loop('phaseOne', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase3(self): self.animSeq.finish() @@ -315,14 +166,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase4(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=113, endFrame=124), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=124, endFrame=153), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=113, endFrame=124), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=124, endFrame=153), Sequence(Func(self.phase1Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase1Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.sillyMeter.loop('phaseOne', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase4(self): self.animSeq.finish() @@ -334,14 +182,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase5(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=154, endFrame=165), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=165, endFrame=194), Sequence(Func(self.phase2Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase2Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=154, endFrame=165), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=165, endFrame=194), Sequence(Func(self.phase2Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase2Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.sillyMeter.loop('phaseTwo', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase5(self): self.animSeq.finish() @@ -353,14 +198,11 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase6(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=195, endFrame=206), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=206, endFrame=235), Sequence(Func(self.phase2Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase2Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=195, endFrame=206), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=206, endFrame=235), Sequence(Func(self.phase2Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase2Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.sillyMeter.loop('phaseTwo', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase6(self): self.animSeq.finish() @@ -372,15 +214,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase7(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=236, endFrame=247), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=247, endFrame=276), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=236, endFrame=247), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=247, endFrame=276), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.sillyMeter.loop('phaseThree', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase7(self): self.animSeq.finish() @@ -393,15 +232,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase8(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=277, endFrame=288), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=288, endFrame=317), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=277, endFrame=288), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=288, endFrame=317), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.sillyMeter.loop('phaseThree', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase8(self): self.animSeq.finish() @@ -414,15 +250,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase9(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=318, endFrame=329), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=329, endFrame=358), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=318, endFrame=329), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=329, endFrame=358), Sequence(Func(self.phase3Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase3Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.sillyMeter.loop('phaseThree', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase9(self): self.animSeq.finish() @@ -435,16 +268,13 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase10(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=359, endFrame=370), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=370, endFrame=399), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=359, endFrame=370), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=370, endFrame=399), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() self.sillyMeter.loop('phaseFour', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase10(self): self.animSeq.finish() @@ -458,16 +288,13 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase11(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=400, endFrame=411), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=411, endFrame=440), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=400, endFrame=411), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=411, endFrame=440), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() self.sillyMeter.loop('phaseFour', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase11(self): self.animSeq.finish() @@ -481,18 +308,13 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase12(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - elif phaseDuration > 2000000: - phaseDuration = 2000000 - self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=441, endFrame=452), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=phaseDuration, constrainedLoop=1, startFrame=452, endFrame=481), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Sequence(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', constrainedLoop=0, startFrame=441, endFrame=452), Func(self.arrowSfx.play)), Parallel(ActorInterval(self.sillyMeter, 'arrowTube', partName='arrow', duration=604800, constrainedLoop=1, startFrame=452, endFrame=481), Sequence(Func(self.phase4Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase4Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() self.sillyMeter.loop('phaseFour', partName='meter') - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase12(self): self.animSeq.finish() @@ -506,15 +328,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase13(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Sequence(Parallel(Func(self.phase4To5Sfx.play), ActorInterval(self.sillyMeter, 'phaseFourToFive', constrainedLoop=0, startFrame=1, endFrame=120)), Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=phaseDuration, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter)))) + self.animSeq = Sequence(Parallel(Func(self.phase4To5Sfx.play), ActorInterval(self.sillyMeter, 'phaseFourToFive', constrainedLoop=0, startFrame=1, endFrame=120)), Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=604800, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter)))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase13(self): self.animSeq.finish() @@ -528,15 +347,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase14(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=phaseDuration, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter))) + self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=604800, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase14(self): self.animSeq.finish() @@ -550,15 +366,12 @@ class DistributedToonHallInterior(DistributedToonInterior): self.ignore('SillyMeterPhase') def enterPhase15(self): - phaseDuration = self.calculatePhaseDuration() - if phaseDuration < 0: - phaseDuration = 604800 - self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=phaseDuration, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter))) + self.animSeq = Parallel(ActorInterval(self.sillyMeter, 'phaseFive', duration=604800, constrainedLoop=1, startFrame=1, endFrame=48), Sequence(Func(self.phase5Sfx.play), Func(self.audio3d.attachSoundToObject, self.phase5Sfx, self.sillyMeter))) self.animSeq.start() self.smPhase2.show() self.smPhase3.show() self.smPhase4.show() - self.accept('SillyMeterPhase', self.selectPhase) + self.accept('SillyMeterPhase', self.startSillyMeter) def exitPhase15(self): self.animSeq.finish() @@ -569,25 +382,8 @@ class DistributedToonHallInterior(DistributedToonInterior): self.audio3d.detachSound(self.phase5Sfx) self.phase5Sfx.stop() self.sillyMeter.stop() - self.ignore('SillyMeterPhase') - - def enterFlat(self): - self.sillyMeter.hide() - self.flatSillyMeter.show() - self.flatDuck.show() - self.flatMonkey.show() - self.flatHorse.show() - - def exitFlat(self): - self.sillyMeter.show() - self.flatSillyMeter.hide() - self.flatDuck.hide() - self.flatMonkey.hide() - self.flatHorse.hide() def enterOff(self): - if hasattr(self, 'animSeq') and self.animSeq: - self.animSeq.finish() self.ignore('SillyMeterPhase') if hasattr(self, 'sillyMeter'): del self.sillyMeter @@ -708,10 +504,21 @@ class DistributedToonHallInterior(DistributedToonInterior): self.restoreCam() self.ignoreAll() self.cleanUpCollisions() - if hasattr(self, 'sillyFSM'): - self.sillyFSM.requestFinalState() - del self.sillyFSM + self.stopSillyMeter() + self.enterOff() DistributedToonInterior.disable(self) def delete(self): DistributedToonInterior.delete(self) + +@magicWord(category=CATEGORY_CREATIVE, types=[int]) +def sillyPhase(phase): + """ + Set the silly meter phase. + """ + + if phase < -1 or phase > 15: + return 'Phase number must be between 0 and 15!' + + messenger.send('SillyMeterPhase', [phase]) + return 'Successfully set the silly meter phase!' \ No newline at end of file