2019-12-30 00:07:56 -06:00
|
|
|
from . import ShtikerPage
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
from direct.showbase import PythonUtil
|
2019-11-17 15:57:18 -06:00
|
|
|
from otp.otpbase import PythonUtil as OTPPythonUtil
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.hood import ZoneUtil
|
|
|
|
from direct.gui.DirectGui import *
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from toontown.toonbase import TTLocalizer
|
|
|
|
|
|
|
|
class MapPage(ShtikerPage.ShtikerPage):
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
ShtikerPage.ShtikerPage.__init__(self)
|
|
|
|
|
|
|
|
def load(self):
|
|
|
|
ShtikerPage.ShtikerPage.load(self)
|
|
|
|
mapModel = loader.loadModel('phase_3.5/models/gui/toontown_map')
|
|
|
|
self.map = DirectFrame(parent=self, relief=None, image=mapModel.find('**/toontown_map'), image_scale=(1.8, 1, 1.35), scale=0.97, pos=(0, 0, 0.0775))
|
|
|
|
mapModel.removeNode()
|
|
|
|
self.allZones = []
|
|
|
|
for hood in ToontownGlobals.Hoods:
|
|
|
|
if hood not in [ToontownGlobals.GolfZone, ToontownGlobals.FunnyFarm]:
|
|
|
|
self.allZones.append(hood)
|
|
|
|
|
|
|
|
self.cloudScaleList = (((0.55, 0, 0.4), (0.35, 0, 0.25)),
|
|
|
|
(),
|
|
|
|
((0.45, 0, 0.45), (0.5, 0, 0.4)),
|
|
|
|
((0.7, 0, 0.45),),
|
|
|
|
((0.55, 0, 0.4),),
|
|
|
|
((0.6, 0, 0.4), (0.5332, 0, 0.32)),
|
|
|
|
((0.7, 0, 0.45), (0.7, 0, 0.45)),
|
|
|
|
((0.7998, 0, 0.39),),
|
|
|
|
((0.5, 0, 0.4),),
|
|
|
|
((-0.45, 0, 0.4),),
|
|
|
|
((-0.45, 0, 0.35),),
|
|
|
|
((0.5, 0, 0.35),),
|
|
|
|
((0.5, 0, 0.35),))
|
|
|
|
self.cloudPosList = (((0.575, 0.0, -0.04), (0.45, 0.0, -0.25)),
|
|
|
|
(),
|
|
|
|
((0.375, 0.0, 0.4), (0.5625, 0.0, 0.2)),
|
|
|
|
((-0.02, 0.0, 0.23),),
|
|
|
|
((-0.3, 0.0, -0.4),),
|
|
|
|
((0.25, 0.0, -0.425), (0.125, 0.0, -0.36)),
|
|
|
|
((-0.5625, 0.0, -0.07), (-0.45, 0.0, 0.2125)),
|
|
|
|
((-0.125, 0.0, 0.5),),
|
|
|
|
((0.66, 0.0, -0.4),),
|
|
|
|
((-0.68, 0.0, -0.444),),
|
|
|
|
((-0.6, 0.0, 0.45),),
|
|
|
|
((0.66, 0.0, 0.5),),
|
|
|
|
((0.4, 0.0, -0.35),))
|
|
|
|
self.labelPosList = ((0.594, 0.0, -0.075),
|
|
|
|
(0.0, 0.0, -0.1),
|
|
|
|
(0.475, 0.0, 0.25),
|
|
|
|
(0.1, 0.0, 0.15),
|
|
|
|
(-0.3, 0.0, -0.375),
|
|
|
|
(0.2, 0.0, -0.45),
|
|
|
|
(-0.55, 0.0, 0.0),
|
|
|
|
(-0.088, 0.0, 0.47),
|
|
|
|
(0.7, 0.0, -0.5),
|
|
|
|
(-0.7, 0.0, -0.5),
|
|
|
|
(-0.7, 0.0, 0.5),
|
|
|
|
(0.7, 0.0, 0.5),
|
|
|
|
(0.45, 0.0, -0.45))
|
|
|
|
self.labels = []
|
|
|
|
self.clouds = []
|
|
|
|
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
|
|
|
|
buttonLoc = (0.45, 0, - 0.74)
|
|
|
|
if base.housingEnabled:
|
|
|
|
buttonLoc = (0.55, 0, -0.74)
|
|
|
|
self.safeZoneButton = DirectButton(
|
|
|
|
parent=self.map,
|
|
|
|
relief=None,
|
|
|
|
image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')),
|
|
|
|
image_scale=(1.3, 1.1, 1.1),
|
|
|
|
pos=buttonLoc,
|
|
|
|
text=TTLocalizer.MapPageBackToPlayground,
|
|
|
|
text_scale=TTLocalizer.MPsafeZoneButton,
|
|
|
|
text_pos=(0, -0.02),
|
|
|
|
textMayChange=0,
|
|
|
|
command=self.backToSafeZone)
|
|
|
|
self.goHomeButton = DirectButton(
|
|
|
|
parent=self.map,
|
|
|
|
relief=None,
|
|
|
|
image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')),
|
|
|
|
image_scale=(0.66, 1.1, 1.1),
|
|
|
|
pos=(0.15, 0, -.74),
|
|
|
|
text=TTLocalizer.MapPageGoHome,
|
|
|
|
text_scale=TTLocalizer.MPgoHomeButton,
|
|
|
|
text_pos=(0, -0.02),
|
|
|
|
textMayChange=0,
|
|
|
|
command=self.goHome)
|
|
|
|
self.goHomeButton.hide()
|
|
|
|
guiButton.removeNode()
|
|
|
|
self.hoodLabel = DirectLabel(
|
|
|
|
parent=self.map,
|
|
|
|
relief=None,
|
|
|
|
pos=(-0.43, 0, -0.726),
|
|
|
|
text='',
|
|
|
|
text_scale=TTLocalizer.MPhoodLabel,
|
|
|
|
text_pos=(0, 0),
|
|
|
|
text_wordwrap=TTLocalizer.MPhoodLabelWordwrap)
|
|
|
|
self.hoodLabel.hide()
|
|
|
|
cloudModel = loader.loadModel('phase_3.5/models/gui/cloud')
|
|
|
|
cloudImage = cloudModel.find('**/cloud')
|
|
|
|
for hood in self.allZones:
|
|
|
|
abbrev = base.cr.hoodMgr.getNameFromId(hood)
|
|
|
|
fullname = base.cr.hoodMgr.getFullnameFromId(hood)
|
|
|
|
hoodIndex = self.allZones.index(hood)
|
|
|
|
label = DirectButton(
|
|
|
|
parent=self.map,
|
|
|
|
relief=None,
|
|
|
|
pos=self.labelPosList[hoodIndex],
|
|
|
|
pad=(0.2, 0.16),
|
|
|
|
text=('', fullname, fullname),
|
|
|
|
text_bg=Vec4(1, 1, 1, 0.4),
|
|
|
|
text_scale=0.055,
|
|
|
|
text_wordwrap=8,
|
|
|
|
rolloverSound=None,
|
|
|
|
clickSound=None,
|
|
|
|
pressEffect=0,
|
|
|
|
command=self.__buttonCallback,
|
|
|
|
extraArgs=[hood],
|
|
|
|
sortOrder=1)
|
|
|
|
label.bind(DGG.WITHIN, self.__hoverCallback, extraArgs=[1, hoodIndex])
|
|
|
|
label.bind(DGG.WITHOUT, self.__hoverCallback, extraArgs=[0, hoodIndex])
|
|
|
|
label.resetFrameSize()
|
|
|
|
self.labels.append(label)
|
|
|
|
hoodClouds = []
|
|
|
|
for cloudScale, cloudPos in zip(self.cloudScaleList[hoodIndex], self.cloudPosList[hoodIndex]):
|
|
|
|
cloud = DirectFrame(
|
|
|
|
parent=self.map,
|
|
|
|
relief=None,
|
|
|
|
state=DGG.DISABLED,
|
|
|
|
image=cloudImage,
|
|
|
|
scale=(cloudScale[0], cloudScale[1], cloudScale[2]),
|
|
|
|
pos=(cloudPos[0], cloudPos[1], cloudPos[2]))
|
|
|
|
cloud.hide()
|
|
|
|
hoodClouds.append(cloud)
|
|
|
|
|
|
|
|
self.clouds.append(hoodClouds)
|
|
|
|
|
|
|
|
cloudModel.removeNode()
|
|
|
|
self.resetFrameSize()
|
|
|
|
return
|
|
|
|
|
|
|
|
def unload(self):
|
|
|
|
for labelButton in self.labels:
|
|
|
|
labelButton.destroy()
|
|
|
|
|
|
|
|
del self.labels
|
|
|
|
del self.clouds
|
|
|
|
self.safeZoneButton.destroy()
|
|
|
|
self.goHomeButton.destroy()
|
|
|
|
ShtikerPage.ShtikerPage.unload(self)
|
|
|
|
|
|
|
|
def enter(self):
|
|
|
|
ShtikerPage.ShtikerPage.enter(self)
|
|
|
|
try:
|
|
|
|
zone = base.cr.playGame.getPlace().getZoneId()
|
|
|
|
except:
|
|
|
|
zone = 0
|
|
|
|
|
|
|
|
if base.localAvatar.lastHood >= ToontownGlobals.BossbotHQ:
|
|
|
|
self.safeZoneButton['text'] = TTLocalizer.MapPageBackToCogHQ
|
|
|
|
else:
|
|
|
|
self.safeZoneButton['text'] = TTLocalizer.MapPageBackToPlayground
|
|
|
|
if zone and ZoneUtil.isPlayground(zone) or self.book.safeMode:
|
|
|
|
self.safeZoneButton.hide()
|
|
|
|
else:
|
|
|
|
self.safeZoneButton.show()
|
|
|
|
if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate and base.cr.playGame.hood.loader.atMyEstate() or self.book.safeMode:
|
|
|
|
self.goHomeButton.hide()
|
|
|
|
elif base.housingEnabled:
|
|
|
|
self.goHomeButton.show()
|
|
|
|
if base.cr.playGame.getPlaceId() == ToontownGlobals.MyEstate:
|
|
|
|
if base.cr.playGame.hood.loader.atMyEstate():
|
|
|
|
self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtHome
|
|
|
|
self.hoodLabel.show()
|
|
|
|
else:
|
|
|
|
avatar = base.cr.identifyAvatar(base.cr.playGame.hood.loader.estateOwnerId)
|
|
|
|
if avatar:
|
|
|
|
avName = avatar.getName()
|
|
|
|
self.hoodLabel['text'] = TTLocalizer.MapPageYouAreAtSomeonesHome % TTLocalizer.GetPossesive(avName)
|
|
|
|
self.hoodLabel.show()
|
|
|
|
elif zone:
|
|
|
|
hoodName = ToontownGlobals.hoodNameMap.get(ZoneUtil.getCanonicalHoodId(zone), ('',))[-1]
|
|
|
|
streetName = ToontownGlobals.StreetNames.get(ZoneUtil.getCanonicalBranchZone(zone), ('',))[-1]
|
|
|
|
if hoodName:
|
|
|
|
self.hoodLabel['text'] = TTLocalizer.MapPageYouAreHere % (hoodName, streetName)
|
|
|
|
self.hoodLabel.show()
|
|
|
|
else:
|
|
|
|
self.hoodLabel.hide()
|
|
|
|
else:
|
|
|
|
self.hoodLabel.hide()
|
|
|
|
safeZonesVisited = base.localAvatar.hoodsVisited
|
|
|
|
hoodsAvailable = base.cr.hoodMgr.getAvailableZones()
|
|
|
|
hoodVisibleList = PythonUtil.intersection(safeZonesVisited, hoodsAvailable)
|
|
|
|
hoodTeleportList = base.localAvatar.getTeleportAccess()
|
|
|
|
for hood in self.allZones:
|
|
|
|
label = self.labels[self.allZones.index(hood)]
|
|
|
|
clouds = self.clouds[self.allZones.index(hood)]
|
|
|
|
if not self.book.safeMode and hood in hoodVisibleList:
|
|
|
|
label['text_fg'] = (0, 0, 0, 1)
|
|
|
|
label.show()
|
|
|
|
for cloud in clouds:
|
|
|
|
cloud.hide()
|
|
|
|
|
|
|
|
fullname = base.cr.hoodMgr.getFullnameFromId(hood)
|
|
|
|
if hood in hoodTeleportList:
|
|
|
|
text = TTLocalizer.MapPageGoTo % fullname
|
|
|
|
label['text'] = ('', text, text)
|
|
|
|
else:
|
|
|
|
label['text'] = ('', fullname, fullname)
|
|
|
|
else:
|
|
|
|
label['text_fg'] = (0, 0, 0, 0.65)
|
|
|
|
label.show()
|
|
|
|
for cloud in clouds:
|
|
|
|
cloud.show()
|
|
|
|
|
|
|
|
def exit(self):
|
|
|
|
ShtikerPage.ShtikerPage.exit(self)
|
|
|
|
|
|
|
|
def backToSafeZone(self):
|
|
|
|
self.doneStatus = {'mode': 'teleport',
|
|
|
|
'hood': base.localAvatar.lastHood}
|
|
|
|
messenger.send(self.doneEvent)
|
|
|
|
|
|
|
|
def goHome(self):
|
|
|
|
if base.config.GetBool('want-qa-regression', 0):
|
|
|
|
self.notify.info('QA-REGRESSION: VISITESTATE: Visit estate')
|
|
|
|
self.doneStatus = {'mode': 'gohome',
|
|
|
|
'hood': base.localAvatar.lastHood}
|
|
|
|
messenger.send(self.doneEvent)
|
|
|
|
|
|
|
|
def __buttonCallback(self, hood):
|
|
|
|
if hood in base.localAvatar.getTeleportAccess() and hood in base.cr.hoodMgr.getAvailableZones():
|
|
|
|
base.localAvatar.sendUpdate('checkTeleportAccess', [hood])
|
|
|
|
self.doneStatus = {'mode': 'teleport',
|
|
|
|
'hood': hood}
|
|
|
|
messenger.send(self.doneEvent)
|
|
|
|
|
|
|
|
def __hoverCallback(self, inside, hoodIndex, pos):
|
2019-11-17 15:57:18 -06:00
|
|
|
alpha = OTPPythonUtil.choice(inside, 0.25, 1.0)
|
2019-11-02 17:27:54 -05:00
|
|
|
try:
|
|
|
|
clouds = self.clouds[hoodIndex]
|
|
|
|
except ValueError:
|
|
|
|
clouds = []
|
|
|
|
|
|
|
|
for cloud in clouds:
|
|
|
|
cloud.setColor((1,
|
|
|
|
1,
|
|
|
|
1,
|
|
|
|
alpha))
|