mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 21:22:27 -06:00
287 lines
12 KiB
Python
287 lines
12 KiB
Python
|
from direct.gui.DirectGui import *
|
||
|
from pandac.PandaModules import *
|
||
|
|
||
|
import ShtikerPage
|
||
|
from toontown.battle import SuitBattleGlobals
|
||
|
from toontown.coghq import CogDisguiseGlobals
|
||
|
from toontown.suit import SuitDNA
|
||
|
from toontown.toonbase import TTLocalizer
|
||
|
from toontown.toonbase import ToontownGlobals
|
||
|
|
||
|
|
||
|
DeptColors = (
|
||
|
Vec4(0.647, 0.608, 0.596, 1.0),
|
||
|
Vec4(0.588, 0.635, 0.671, 1.0),
|
||
|
Vec4(0.596, 0.714, 0.659, 1.0),
|
||
|
Vec4(0.761, 0.678, 0.69, 1.0)
|
||
|
)
|
||
|
NumParts = max(CogDisguiseGlobals.PartsPerSuit)
|
||
|
PartNames = (
|
||
|
'lUpleg', 'lLowleg', 'lShoe', 'rUpleg', 'rLowleg', 'rShoe', 'lShoulder',
|
||
|
'rShoulder', 'chest', 'waist', 'hip', 'lUparm', 'lLowarm', 'lHand',
|
||
|
'rUparm', 'rLowarm', 'rHand'
|
||
|
)
|
||
|
|
||
|
|
||
|
class DisguisePage(ShtikerPage.ShtikerPage):
|
||
|
meterColor = Vec4(0.87, 0.87, 0.827, 1.0)
|
||
|
meterActiveColor = Vec4(0.7, 0.3, 0.3, 1)
|
||
|
|
||
|
def __init__(self):
|
||
|
ShtikerPage.ShtikerPage.__init__(self)
|
||
|
self.activeTab = 0
|
||
|
self.progressTitle = None
|
||
|
|
||
|
def load(self):
|
||
|
ShtikerPage.ShtikerPage.load(self)
|
||
|
|
||
|
gui = loader.loadModel('phase_9/models/gui/cog_disguises.bam')
|
||
|
self.frame = DirectFrame(parent=self, relief=None, scale=0.47, pos=(0.02, 1, 0))
|
||
|
self.bkgd = DirectFrame(
|
||
|
parent=self.frame, geom=gui.find('**/base'), relief=None, scale=(0.98, 1, 1))
|
||
|
self.bkgd.setTextureOff(1)
|
||
|
self.tabs = []
|
||
|
self.pageFrame = DirectFrame(parent=self.frame, relief=None)
|
||
|
for dept in SuitDNA.suitDepts:
|
||
|
if dept == 'c':
|
||
|
tabIndex = 1
|
||
|
textPos = (1.57, 0.75)
|
||
|
elif dept == 'l':
|
||
|
tabIndex = 2
|
||
|
textPos = (1.57, 0.12)
|
||
|
elif dept == 'm':
|
||
|
tabIndex = 3
|
||
|
textPos = (1.57, -0.47)
|
||
|
elif dept == 's':
|
||
|
tabIndex = 4
|
||
|
textPos = (1.57, -1.05)
|
||
|
pageGeom = gui.find('**/page%d' % tabIndex)
|
||
|
tabGeom = gui.find('**/tab%d' % tabIndex)
|
||
|
tab = DirectButton(
|
||
|
parent=self.pageFrame, relief=None, geom=tabGeom,
|
||
|
geom_color=DeptColors[tabIndex - 1],
|
||
|
text=SuitDNA.suitDeptFullnames[dept],
|
||
|
text_font=ToontownGlobals.getSuitFont(), text_pos=textPos,
|
||
|
text_roll=-90, text_scale=TTLocalizer.DPtab,
|
||
|
text_align=TextNode.ACenter, text1_fg=Vec4(1, 0, 0, 1),
|
||
|
text2_fg=Vec4(0.5, 0.4, 0.4, 1),
|
||
|
text3_fg=Vec4(0.4, 0.4, 0.4, 1), command=self.doTab,
|
||
|
extraArgs=[len(self.tabs)], pressEffect=0)
|
||
|
self.tabs.append(tab)
|
||
|
DirectFrame(parent=tab, relief=None, geom=pageGeom)
|
||
|
|
||
|
self.deptLabel = DirectLabel(
|
||
|
parent=self.frame, text='',
|
||
|
text_font=ToontownGlobals.getSuitFont(),
|
||
|
text_scale=TTLocalizer.DPdeptLabel, text_pos=(-0.1, 0.8))
|
||
|
DirectFrame(parent=self.frame, relief=None, geom=gui.find('**/pipe_frame'))
|
||
|
self.tube = DirectFrame(parent=self.frame, relief=None, geom=gui.find('**/tube'))
|
||
|
DirectFrame(parent=self.frame, relief=None, geom=gui.find('**/robot/face'))
|
||
|
DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_cog_disguises'), geom_pos=(0, 0.1, 0))
|
||
|
self.meritTitle = DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_merit_progress'), geom_pos=(0, 0.1, 0))
|
||
|
self.meritTitle.hide()
|
||
|
self.cogbuckTitle = DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_cashbuck_progress'), geom_pos=(0, 0.1, 0))
|
||
|
self.cogbuckTitle.hide()
|
||
|
self.juryNoticeTitle = DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_jury_notice_progress'), geom_pos=(0, 0.1, 0))
|
||
|
self.juryNoticeTitle.hide()
|
||
|
self.stockOptionTitle = DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_stock_option_progress'), geom_pos=(0, 0.1, 0))
|
||
|
self.stockOptionTitle.hide()
|
||
|
self.progressTitle = self.meritTitle
|
||
|
self.promotionTitle = DirectLabel(
|
||
|
parent=self.frame, relief=None,
|
||
|
geom=gui.find('**/text_ready4promotion'), geom_pos=(0, 0.1, 0))
|
||
|
self.cogName = DirectLabel(
|
||
|
parent=self.frame, relief=None, text='',
|
||
|
text_font=ToontownGlobals.getSuitFont(),
|
||
|
text_scale=TTLocalizer.DPcogName, text_align=TextNode.ACenter,
|
||
|
pos=(-0.948, 0, -1.15))
|
||
|
self.cogLevel = DirectLabel(
|
||
|
parent=self.frame, relief=None, text='',
|
||
|
text_font=ToontownGlobals.getSuitFont(), text_scale=0.09,
|
||
|
text_align=TextNode.ACenter, pos=(-0.91, 0, -1.02))
|
||
|
self.partFrame = DirectFrame(parent=self.frame, relief=None)
|
||
|
self.parts = []
|
||
|
for partNum in xrange(0, 17):
|
||
|
self.parts.append(
|
||
|
DirectFrame(parent=self.partFrame, relief=None,
|
||
|
geom=gui.find('**/robot/' + PartNames[partNum])))
|
||
|
self.holes = []
|
||
|
for partNum in xrange(0, 17):
|
||
|
self.holes.append(
|
||
|
DirectFrame(parent=self.partFrame, relief=None,
|
||
|
geom=gui.find('**/robot_hole/' + PartNames[partNum])))
|
||
|
self.cogPartRatio = DirectLabel(
|
||
|
parent=self.frame, relief=None, text='',
|
||
|
text_font=ToontownGlobals.getSuitFont(), text_scale=0.08,
|
||
|
text_align=TextNode.ACenter, pos=(-0.91, 0, -0.82))
|
||
|
self.cogMeritRatio = DirectLabel(
|
||
|
parent=self.frame, relief=None, text='',
|
||
|
text_font=ToontownGlobals.getSuitFont(), text_scale=0.08,
|
||
|
text_align=TextNode.ACenter, pos=(0.45, 0, -0.36))
|
||
|
meterFace = gui.find('**/meter_face_whole')
|
||
|
meterFaceHalf = gui.find('**/meter_face_half')
|
||
|
self.meterFace = DirectLabel(
|
||
|
parent=self.frame, relief=None, geom=meterFace,
|
||
|
color=self.meterColor, pos=(0.455, 0.0, 0.04))
|
||
|
self.meterFaceHalf1 = DirectLabel(
|
||
|
parent=self.frame, relief=None, geom=meterFaceHalf,
|
||
|
color=self.meterActiveColor, pos=(0.455, 0.0, 0.04))
|
||
|
self.meterFaceHalf2 = DirectLabel(
|
||
|
parent=self.frame, relief=None, geom=meterFaceHalf,
|
||
|
color=self.meterColor, pos=(0.455, 0.0, 0.04))
|
||
|
self.promotionSfx = loader.loadSfx('phase_5/audio/sfx/suit_promotion_sfx.ogg')
|
||
|
self.buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui.bam')
|
||
|
upButton = self.buttonModels.find('**//InventoryButtonUp')
|
||
|
downButton = self.buttonModels.find('**/InventoryButtonDown')
|
||
|
rolloverButton = self.buttonModels.find('**/InventoryButtonRollover')
|
||
|
self.promoteButton = DirectButton(
|
||
|
parent=self.frame, relief=None, text='Promote',
|
||
|
text_fg=(0.9, 0.9, 0.9, 1), text_pos=(0, -0.2),
|
||
|
text_font=ToontownGlobals.getSuitFont(),
|
||
|
text_scale=0.6, image=(upButton, downButton, rolloverButton),
|
||
|
image_color=(0.5, 0.5, 0.5, 1), image_scale=(20, 1, 11),
|
||
|
pos=(0.94, 0, -1.125), scale=0.125,
|
||
|
command=self.sendPromotionRequest, extraArgs=[3])
|
||
|
self.promoteButton.hide()
|
||
|
if base.localAvatar.promotionStatus[3] == ToontownGlobals.PendingPromotion:
|
||
|
self.promoteButton.show()
|
||
|
if base.localAvatar.cogLevels[3] == ToontownGlobals.MaxCogSuitLevel:
|
||
|
self.promoteButton['state'] = DGG.DISABLED
|
||
|
self.frame.hide()
|
||
|
self.activeTab = 3
|
||
|
self.updatePage()
|
||
|
|
||
|
def unload(self):
|
||
|
ShtikerPage.ShtikerPage.unload(self)
|
||
|
|
||
|
del self.promotionSfx
|
||
|
self.buttonModels.removeNode()
|
||
|
|
||
|
def enter(self):
|
||
|
self.frame.show()
|
||
|
ShtikerPage.ShtikerPage.enter(self)
|
||
|
|
||
|
def exit(self):
|
||
|
self.frame.hide()
|
||
|
ShtikerPage.ShtikerPage.exit(self)
|
||
|
|
||
|
def updatePage(self):
|
||
|
self.doTab(self.activeTab)
|
||
|
|
||
|
def updatePartsDisplay(self, index, numParts, numPartsRequired):
|
||
|
partBitmask = 1
|
||
|
groupingBitmask = CogDisguiseGlobals.PartsPerSuitBitmasks[index]
|
||
|
previousPart = 0
|
||
|
for part in self.parts:
|
||
|
groupingBit = groupingBitmask & partBitmask
|
||
|
if numParts & partBitmask & groupingBit:
|
||
|
part.show()
|
||
|
self.holes[self.parts.index(part)].hide()
|
||
|
if groupingBit:
|
||
|
previousPart = 1
|
||
|
elif not groupingBit and previousPart:
|
||
|
part.show()
|
||
|
self.holes[self.parts.index(part)].hide()
|
||
|
else:
|
||
|
self.holes[self.parts.index(part)].show()
|
||
|
part.hide()
|
||
|
previousPart = 0
|
||
|
partBitmask = partBitmask << 1
|
||
|
|
||
|
def updateMeritBar(self, dept):
|
||
|
merits = base.localAvatar.cogMerits[dept]
|
||
|
totalMerits = CogDisguiseGlobals.getTotalMerits(base.localAvatar, dept)
|
||
|
if totalMerits == 0:
|
||
|
progress = 1
|
||
|
else:
|
||
|
progress = min(merits / float(totalMerits), 1)
|
||
|
self.updateMeritDial(progress)
|
||
|
if base.localAvatar.readyForPromotion(dept):
|
||
|
self.cogMeritRatio['text'] = TTLocalizer.DisguisePageMeritFull
|
||
|
self.promotionTitle.show()
|
||
|
self.progressTitle.hide()
|
||
|
else:
|
||
|
self.cogMeritRatio['text'] = '%d/%d' % (merits, totalMerits)
|
||
|
self.promotionTitle.hide()
|
||
|
self.progressTitle.show()
|
||
|
|
||
|
def updateMeritDial(self, progress):
|
||
|
if progress == 0:
|
||
|
self.meterFaceHalf1.hide()
|
||
|
self.meterFaceHalf2.hide()
|
||
|
self.meterFace.setColor(self.meterColor)
|
||
|
elif progress == 1:
|
||
|
self.meterFaceHalf1.hide()
|
||
|
self.meterFaceHalf2.hide()
|
||
|
self.meterFace.setColor(self.meterActiveColor)
|
||
|
else:
|
||
|
self.meterFaceHalf1.show()
|
||
|
self.meterFaceHalf2.show()
|
||
|
self.meterFace.setColor(self.meterColor)
|
||
|
if progress < 0.5:
|
||
|
self.meterFaceHalf2.setColor(self.meterColor)
|
||
|
else:
|
||
|
self.meterFaceHalf2.setColor(self.meterActiveColor)
|
||
|
progress = progress - 0.5
|
||
|
self.meterFaceHalf2.setR(180 * (progress / 0.5))
|
||
|
|
||
|
def doTab(self, index):
|
||
|
self.promoteButton.hide()
|
||
|
self.activeTab = index
|
||
|
self.tabs[index].reparentTo(self.pageFrame)
|
||
|
for i in xrange(len(self.tabs)):
|
||
|
tab = self.tabs[i]
|
||
|
if i == index:
|
||
|
tab['text0_fg'] = (1, 0, 0, 1)
|
||
|
tab['text2_fg'] = (1, 0, 0, 1)
|
||
|
else:
|
||
|
tab['text0_fg'] = (0, 0, 0, 1)
|
||
|
tab['text2_fg'] = (0.5, 0.4, 0.4, 1)
|
||
|
|
||
|
self.bkgd.setColor(DeptColors[index])
|
||
|
self.deptLabel['text'] = (SuitDNA.suitDeptFullnames[SuitDNA.suitDepts[index]],)
|
||
|
cogIndex = base.localAvatar.cogTypes[index] + SuitDNA.suitsPerDept * index
|
||
|
cog = SuitDNA.suitHeadTypes[cogIndex]
|
||
|
self.progressTitle.hide()
|
||
|
if SuitDNA.suitDepts[index] == 'm':
|
||
|
self.progressTitle = self.cogbuckTitle
|
||
|
elif SuitDNA.suitDepts[index] == 'l':
|
||
|
self.progressTitle = self.juryNoticeTitle
|
||
|
elif SuitDNA.suitDepts[index] == 'c':
|
||
|
self.progressTitle = self.stockOptionTitle
|
||
|
else:
|
||
|
self.progressTitle = self.meritTitle
|
||
|
self.progressTitle.show()
|
||
|
self.cogName['text'] = SuitBattleGlobals.SuitAttributes[cog]['name']
|
||
|
cogLevel = base.localAvatar.cogLevels[index]
|
||
|
self.cogLevel['text'] = TTLocalizer.DisguisePageCogLevel % str(cogLevel + 1)
|
||
|
numParts = base.localAvatar.cogParts[index]
|
||
|
numPartsRequired = CogDisguiseGlobals.PartsPerSuit[index]
|
||
|
self.updatePartsDisplay(index, numParts, numPartsRequired)
|
||
|
self.updateMeritBar(index)
|
||
|
self.cogPartRatio['text'] = '%d/%d' % (CogDisguiseGlobals.getTotalParts(numParts), numPartsRequired)
|
||
|
if base.localAvatar.promotionStatus[index] == ToontownGlobals.PendingPromotion:
|
||
|
self.promoteButton['extraArgs'] = [index]
|
||
|
if base.localAvatar.cogLevels[index] == ToontownGlobals.MaxCogSuitLevel:
|
||
|
self.promoteButton['state'] = DGG.DISABLED
|
||
|
else:
|
||
|
self.promoteButton['state'] = DGG.NORMAL
|
||
|
self.promoteButton.show()
|
||
|
|
||
|
def sendPromotionRequest(self, dept):
|
||
|
self.promoteButton.hide()
|
||
|
base.playSfx(self.promotionSfx)
|
||
|
base.localAvatar.promotionStatus[dept] = 0
|
||
|
base.localAvatar.sendUpdate('requestPromotion', [dept])
|
||
|
self.updatePage()
|