toontown-just-works/toontown/building/DistributedToonHallInterior.py
2024-07-07 18:08:39 -05:00

429 lines
20 KiB
Python

from direct.actor import Actor
from direct.interval.IntervalGlobal import *
from direct.showbase import Audio3DManager
from otp.ai.MagicWordGlobal import *
from toontown.dna.DNAParser import *
from toontown.hood import ZoneUtil
from toontown.toon import DistributedNPCToonBase
from DistributedToonInterior import DistributedToonInterior
import ToonInteriorColors, random
class DistributedToonHallInterior(DistributedToonInterior):
def setup(self):
self.dnaStore = base.cr.playGame.dnaStore
self.randomGenerator = random.Random()
self.randomGenerator.seed(self.zoneId)
interior = self.randomDNAItem('TI_hall', self.dnaStore.findNode)
self.interior = interior.copyTo(render)
hoodId = ZoneUtil.getCanonicalHoodId(self.zoneId)
self.colors = ToonInteriorColors.colors[hoodId]
self.replaceRandomInModel(self.interior)
doorModelName = 'door_double_round_ul'
if doorModelName[-1:] == 'r':
doorModelName = doorModelName[:-1] + 'l'
else:
doorModelName = doorModelName[:-1] + 'r'
door = self.dnaStore.findNode(doorModelName)
door_origin = render.find('**/door_origin;+s')
doorNP = door.copyTo(door_origin)
door_origin.setScale(0.8, 0.8, 0.8)
door_origin.setPos(door_origin, 0, -0.025, 0)
color = self.randomGenerator.choice(self.colors['TI_door'])
setupDoor(doorNP, self.interior, door_origin, self.dnaStore, str(self.block), color)
doorFrame = doorNP.find('door_*_flat')
doorFrame.wrtReparentTo(self.interior)
doorFrame.setColor(color)
del self.colors
del self.dnaStore
del self.randomGenerator
self.interior.flattenMedium()
for npcToon in self.cr.doFindAllInstances(DistributedNPCToonBase.DistributedNPCToonBase):
npcToon.initToonState()
self.createSillyMeter()
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',
'phaseOne': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseOne',
'phaseTwo': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseTwo',
'phaseThree': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseThree',
'phaseFour': 'phase_4/models/props/tt_a_ara_ttc_sillyMeter_phaseFour',
'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.smPhase1 = self.sillyMeter.find('**/stage1')
self.smPhase2 = self.sillyMeter.find('**/stage2')
self.smPhase3 = self.sillyMeter.find('**/stage3')
self.smPhase4 = self.sillyMeter.find('**/stage4')
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
thermometerLocator = self.sillyMeter.findAllMatches('**/uvj_progressBar')[1]
thermometerMesh = self.sillyMeter.find('**/tube')
thermometerMesh.setTexProjector(thermometerMesh.findTextureStage('default'), thermometerLocator, self.sillyMeter)
self.sillyMeter.flattenMedium()
self.sillyMeter.makeSubpart('arrow', ['uvj_progressBar*', 'def_springA'])
self.sillyMeter.makeSubpart('meter', ['def_pivot'], ['uvj_progressBar*', 'def_springA'])
self.audio3d = Audio3DManager.Audio3DManager(base.sfxManagerList[0], camera)
self.phase1Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseOne.ogg')
self.phase1Sfx.setLoop(True)
self.phase2Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseTwo.ogg')
self.phase2Sfx.setLoop(True)
self.phase3Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseThree.ogg')
self.phase3Sfx.setLoop(True)
self.phase4Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseFour.ogg')
self.phase4Sfx.setLoop(True)
self.phase4To5Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseFourToFive.ogg')
self.phase4To5Sfx.setLoop(False)
self.phase5Sfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterPhaseFive.ogg')
self.phase5Sfx.setLoop(True)
self.arrowSfx = self.audio3d.loadSfx('phase_4/audio/sfx/tt_s_prp_sillyMeterArrow.ogg')
self.arrowSfx.setLoop(False)
self.audio3d.setDropOffFactor(0.1)
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):
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.startSillyMeter)
def exitPhase0(self):
self.animSeq.finish()
del self.animSeq
self.audio3d.detachSound(self.phase1Sfx)
self.phase1Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase1(self):
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.startSillyMeter)
def exitPhase1(self):
self.audio3d.detachSound(self.phase1Sfx)
self.phase1Sfx.stop()
self.animSeq.finish()
del self.animSeq
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase2(self):
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.startSillyMeter)
def exitPhase2(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.audio3d.detachSound(self.phase1Sfx)
self.phase1Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase3(self):
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.startSillyMeter)
def exitPhase3(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.audio3d.detachSound(self.phase1Sfx)
self.phase1Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase4(self):
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.startSillyMeter)
def exitPhase4(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.audio3d.detachSound(self.phase1Sfx)
self.phase1Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase5(self):
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.startSillyMeter)
def exitPhase5(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.audio3d.detachSound(self.phase2Sfx)
self.phase2Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase6(self):
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.startSillyMeter)
def exitPhase6(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.audio3d.detachSound(self.phase2Sfx)
self.phase2Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase7(self):
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.startSillyMeter)
def exitPhase7(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.audio3d.detachSound(self.phase3Sfx)
self.phase3Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase8(self):
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.startSillyMeter)
def exitPhase8(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.audio3d.detachSound(self.phase3Sfx)
self.phase3Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase9(self):
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.startSillyMeter)
def exitPhase9(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.audio3d.detachSound(self.phase3Sfx)
self.phase3Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase10(self):
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.startSillyMeter)
def exitPhase10(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
self.audio3d.detachSound(self.phase4Sfx)
self.phase4Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase11(self):
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.startSillyMeter)
def exitPhase11(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
self.audio3d.detachSound(self.phase4Sfx)
self.phase4Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase12(self):
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.startSillyMeter)
def exitPhase12(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
self.audio3d.detachSound(self.phase4Sfx)
self.phase4Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase13(self):
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.startSillyMeter)
def exitPhase13(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
self.audio3d.detachSound(self.phase5Sfx)
self.phase5Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterPhase14(self):
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.startSillyMeter)
def exitPhase14(self):
self.animSeq.finish()
del self.animSeq
self.smPhase2.hide()
self.smPhase3.hide()
self.smPhase4.hide()
self.audio3d.detachSound(self.phase5Sfx)
self.phase5Sfx.stop()
self.sillyMeter.stop()
self.ignore('SillyMeterPhase')
def enterOff(self):
self.ignore('SillyMeterPhase')
if hasattr(self, 'sillyMeter'):
del self.sillyMeter
if hasattr(self, 'smPhase1'):
del self.smPhase1
if hasattr(self, 'smPhase2'):
del self.smPhase2
if hasattr(self, 'smPhase3'):
del self.smPhase3
if hasattr(self, 'smPhase4'):
del self.smPhase4
self.cleanUpSounds()
def exitOff(self):
pass
def cleanUpSounds(self):
def __cleanUpSound__(soundFile):
if soundFile.status() == soundFile.PLAYING:
soundFile.setLoop(False)
soundFile.stop()
if hasattr(self, 'audio3d'):
self.audio3d.disable()
del self.audio3d
if hasattr(self, 'phase1Sfx'):
__cleanUpSound__(self.phase1Sfx)
del self.phase1Sfx
if hasattr(self, 'phase2Sfx'):
__cleanUpSound__(self.phase2Sfx)
del self.phase2Sfx
if hasattr(self, 'phase3Sfx'):
__cleanUpSound__(self.phase3Sfx)
del self.phase3Sfx
if hasattr(self, 'phase4Sfx'):
__cleanUpSound__(self.phase4Sfx)
del self.phase4Sfx
if hasattr(self, 'phase4To5Sfx'):
__cleanUpSound__(self.phase4To5Sfx)
del self.phase4To5Sfx
if hasattr(self, 'phase5Sfx'):
__cleanUpSound__(self.phase5Sfx)
del self.phase5Sfx
if hasattr(self, 'arrowSfx'):
__cleanUpSound__(self.arrowSfx)
del self.arrowSfx
def disable(self):
self.ignoreAll()
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 > 14:
return 'Phase number must be between 0 and 14!'
messenger.send('SillyMeterPhase', [phase])
return 'Successfully set the silly meter phase!'