135 lines
5.6 KiB
Python
135 lines
5.6 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.fsm import StateData
|
|
import CogHQLoader
|
|
from toontown.toonbase import ToontownGlobals
|
|
from direct.gui import DirectGui
|
|
from toontown.toonbase import TTLocalizer
|
|
from toontown.toon import Toon
|
|
from direct.fsm import State
|
|
from toontown.coghq import BossbotHQExterior
|
|
from toontown.coghq import BossbotHQBossBattle
|
|
from toontown.coghq import BossbotOfficeExterior
|
|
from toontown.coghq import CountryClubInterior
|
|
from pandac.PandaModules import DecalEffect, TextEncoder
|
|
import random
|
|
aspectSF = 0.7227
|
|
|
|
class BossbotCogHQLoader(CogHQLoader.CogHQLoader):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('BossbotCogHQLoader')
|
|
|
|
def __init__(self, hood, parentFSMState, doneEvent):
|
|
CogHQLoader.CogHQLoader.__init__(self, hood, parentFSMState, doneEvent)
|
|
self.fsm.addState(State.State('countryClubInterior', self.enterCountryClubInterior, self.exitCountryClubInterior, ['quietZone', 'cogHQExterior']))
|
|
for stateName in ['start', 'cogHQExterior', 'quietZone']:
|
|
state = self.fsm.getStateNamed(stateName)
|
|
state.addTransition('countryClubInterior')
|
|
|
|
self.musicFile = random.choice(['phase_12/audio/bgm/Bossbot_Entry_v1.ogg', 'phase_12/audio/bgm/Bossbot_Entry_v2.ogg', 'phase_12/audio/bgm/Bossbot_Entry_v3.ogg'])
|
|
self.cogHQExteriorModelPath = 'phase_12/models/bossbotHQ/CogGolfHub'
|
|
self.factoryExteriorModelPath = 'phase_11/models/lawbotHQ/LB_DA_Lobby'
|
|
self.cogHQLobbyModelPath = 'phase_12/models/bossbotHQ/CogGolfCourtyard'
|
|
self.geom = None
|
|
|
|
def load(self, zoneId):
|
|
CogHQLoader.CogHQLoader.load(self, zoneId)
|
|
Toon.loadBossbotHQAnims()
|
|
|
|
def unloadPlaceGeom(self):
|
|
if self.geom:
|
|
self.geom.removeNode()
|
|
self.geom = None
|
|
CogHQLoader.CogHQLoader.unloadPlaceGeom(self)
|
|
|
|
def loadPlaceGeom(self, zoneId):
|
|
self.notify.info('loadPlaceGeom: %s' % zoneId)
|
|
zoneId = zoneId - zoneId % 100
|
|
self.notify.debug('zoneId = %d ToontownGlobals.BossbotHQ=%d' % (zoneId, ToontownGlobals.BossbotHQ))
|
|
if zoneId == ToontownGlobals.BossbotHQ:
|
|
self.geom = loader.loadModel(self.cogHQExteriorModelPath)
|
|
gzLinkTunnel = self.geom.find('**/LinkTunnel1')
|
|
gzLinkTunnel.setName('linktunnel_gz_17000_DNARoot')
|
|
self.makeSigns()
|
|
top = self.geom.find('**/TunnelEntrance')
|
|
origin = top.find('**/tunnel_origin')
|
|
origin.setH(-33.33)
|
|
self.geom.flattenMedium()
|
|
elif zoneId == ToontownGlobals.BossbotLobby:
|
|
if base.config.GetBool('want-qa-regression', 0):
|
|
self.notify.info('QA-REGRESSION: COGHQ: Visit BossbotLobby')
|
|
self.notify.debug('cogHQLobbyModelPath = %s' % self.cogHQLobbyModelPath)
|
|
self.geom = loader.loadModel(self.cogHQLobbyModelPath)
|
|
self.geom.flattenMedium()
|
|
else:
|
|
self.notify.warning('loadPlaceGeom: unclassified zone %s' % zoneId)
|
|
CogHQLoader.CogHQLoader.loadPlaceGeom(self, zoneId)
|
|
|
|
def makeSigns(self):
|
|
|
|
def makeSign(topStr, signStr, textId):
|
|
top = self.geom.find('**/' + topStr)
|
|
sign = top.find('**/' + signStr)
|
|
locator = top.find('**/sign_origin')
|
|
signText = DirectGui.OnscreenText(text=TextEncoder.upper(TTLocalizer.GlobalStreetNames[textId][-1]), font=ToontownGlobals.getSuitFont(), scale=TTLocalizer.BCHQLsignText, fg=(0, 0, 0, 1), parent=sign)
|
|
signText.setPosHpr(locator, 0, -0.1, -0.25, 0, 0, 0)
|
|
signText.setDepthWrite(0)
|
|
|
|
makeSign('Gate_2', 'Sign_6', 10700)
|
|
makeSign('TunnelEntrance', 'Sign_2', 1000)
|
|
makeSign('Gate_3', 'Sign_3', 10600)
|
|
makeSign('Gate_4', 'Sign_4', 10500)
|
|
makeSign('GateHouse', 'Sign_5', 10200)
|
|
|
|
def unload(self):
|
|
CogHQLoader.CogHQLoader.unload(self)
|
|
Toon.unloadSellbotHQAnims()
|
|
|
|
def enterStageInterior(self, requestStatus):
|
|
self.placeClass = StageInterior.StageInterior
|
|
self.stageId = requestStatus['stageId']
|
|
self.enterPlace(requestStatus)
|
|
|
|
def exitStageInterior(self):
|
|
self.exitPlace()
|
|
self.placeClass = None
|
|
return
|
|
|
|
def getExteriorPlaceClass(self):
|
|
self.notify.debug('getExteriorPlaceClass')
|
|
return BossbotHQExterior.BossbotHQExterior
|
|
|
|
def getBossPlaceClass(self):
|
|
self.notify.debug('getBossPlaceClass')
|
|
return BossbotHQBossBattle.BossbotHQBossBattle
|
|
|
|
def enterFactoryExterior(self, requestStatus):
|
|
self.placeClass = BossbotOfficeExterior.BossbotOfficeExterior
|
|
self.enterPlace(requestStatus)
|
|
|
|
def exitFactoryExterior(self):
|
|
taskMgr.remove('titleText')
|
|
self.hood.hideTitleText()
|
|
self.exitPlace()
|
|
self.placeClass = None
|
|
return
|
|
|
|
def enterCogHQBossBattle(self, requestStatus):
|
|
self.notify.debug('BossbotCogHQLoader.enterCogHQBossBattle')
|
|
CogHQLoader.CogHQLoader.enterCogHQBossBattle(self, requestStatus)
|
|
base.cr.forbidCheesyEffects(1)
|
|
|
|
def exitCogHQBossBattle(self):
|
|
self.notify.debug('BossbotCogHQLoader.exitCogHQBossBattle')
|
|
CogHQLoader.CogHQLoader.exitCogHQBossBattle(self)
|
|
base.cr.forbidCheesyEffects(0)
|
|
|
|
def enterCountryClubInterior(self, requestStatus):
|
|
self.placeClass = CountryClubInterior.CountryClubInterior
|
|
self.notify.info('enterCountryClubInterior, requestStatus=%s' % requestStatus)
|
|
self.countryClubId = requestStatus['countryClubId']
|
|
self.enterPlace(requestStatus)
|
|
|
|
def exitCountryClubInterior(self):
|
|
self.exitPlace()
|
|
self.placeClass = None
|
|
del self.countryClubId
|
|
return
|