Poodletooth-iLand/toontown/shtiker/DisguisePage.py
2015-03-03 17:10:12 -05:00

286 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()