historical/toontown-classic.git/toontown/toon/InventoryNew.py

1250 lines
55 KiB
Python
Raw Normal View History

2024-01-16 11:20:27 -06:00
from direct.gui.DirectGui import *
from panda3d.core import *
from toontown.toonbase.ToontownBattleGlobals import *
import InventoryBase
from toontown.toonbase import TTLocalizer
from toontown.quest import BlinkingArrows
from direct.interval.IntervalGlobal import *
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import ToontownGlobals
from otp.otpbase import OTPGlobals
class InventoryNew(InventoryBase.InventoryBase, DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('InventoryNew')
PressableTextColor = Vec4(1, 1, 1, 1)
PressableGeomColor = Vec4(1, 1, 1, 1)
PressableImageColor = Vec4(0, 0.6, 1, 1)
PropBonusPressableImageColor = Vec4(1.0, 0.6, 0.0, 1)
NoncreditPressableImageColor = Vec4(0.3, 0.6, 0.6, 1)
PropBonusNoncreditPressableImageColor = Vec4(0.6, 0.6, 0.3, 1)
DeletePressableImageColor = Vec4(0.7, 0.1, 0.1, 1)
UnpressableTextColor = Vec4(1, 1, 1, 0.3)
UnpressableGeomColor = Vec4(1, 1, 1, 0.3)
UnpressableImageColor = Vec4(0.3, 0.3, 0.3, 0.8)
BookUnpressableTextColor = Vec4(1, 1, 1, 1)
BookUnpressableGeomColor = Vec4(1, 1, 1, 1)
BookUnpressableImage0Color = Vec4(0, 0.6, 1, 1)
BookUnpressableImage2Color = Vec4(0.1, 0.7, 1, 1)
ShadowColor = Vec4(0, 0, 0, 0)
ShadowBuffedColor = Vec4(1, 1, 1, 1)
UnpressableShadowBuffedColor = Vec4(1, 1, 1, 0.3)
TrackYOffset = 0.0
TrackYSpacing = -0.12
ButtonXOffset = -0.31
ButtonXSpacing = 0.18
def __init__(self, toon, invStr = None, ShowSuperGags = 1):
InventoryBase.InventoryBase.__init__(self, toon, invStr)
DirectFrame.__init__(self, relief=None)
self.initialiseoptions(InventoryNew)
self.battleCreditLevel = None
self.detailCredit = None
self.__battleCreditMultiplier = 1
self.__invasionCreditMultiplier = 1
self.__respectInvasions = 1
self._interactivePropTrackBonus = -1
self.tutorialFlag = 0
self.gagTutMode = 0
self.showSuperGags = ShowSuperGags
self.clickSuperGags = 1
self.propAndOrganicBonusStack = base.config.GetBool('prop-and-organic-bonus-stack', 0)
self.propBonusIval = Parallel()
self.activateMode = 'book'
self.load()
self.hide()
return
def setBattleCreditMultiplier(self, mult):
self.__battleCreditMultiplier = mult
def getBattleCreditMultiplier(self):
return self.__battleCreditMultiplier
def setInteractivePropTrackBonus(self, trackBonus):
self._interactivePropTrackBonus = trackBonus
def getInteractivePropTrackBonus(self):
return self._interactivePropTrackBonus
def setInvasionCreditMultiplier(self, mult):
self.__invasionCreditMultiplier = mult
def getInvasionCreditMultiplier(self):
return self.__invasionCreditMultiplier
def setRespectInvasions(self, flag):
self.__respectInvasions = flag
def getRespectInvasions(self):
return self.__respectInvasions
def show(self):
if self.tutorialFlag:
self.tutArrows.arrowsOn(-0.43, -0.12, 180, -0.43, -0.24, 180, onTime=1.0, offTime=0.2)
if self.numItem(THROW_TRACK, 0) == 0:
self.tutArrows.arrow1.reparentTo(hidden)
else:
self.tutArrows.arrow1.reparentTo(self.battleFrame, 1)
if self.numItem(SQUIRT_TRACK, 0) == 0:
self.tutArrows.arrow2.reparentTo(hidden)
else:
self.tutArrows.arrow2.reparentTo(self.battleFrame, 1)
self.tutText.show()
self.tutText.reparentTo(self.battleFrame, 1)
DirectFrame.show(self)
def uberGagToggle(self, showSuperGags = 1):
self.showSuperGags = showSuperGags
for itemList in self.invModels:
for itemIndex in xrange(MAX_LEVEL_INDEX + 1):
if itemIndex <= LAST_REGULAR_GAG_LEVEL + 1 or self.showSuperGags:
itemList[itemIndex].show()
else:
itemList[itemIndex].hide()
for buttonList in self.buttons:
for buttonIndex in xrange(MAX_LEVEL_INDEX + 1):
if buttonIndex <= LAST_REGULAR_GAG_LEVEL or self.showSuperGags:
buttonList[buttonIndex].show()
else:
buttonList[buttonIndex].hide()
def enableUberGags(self, enableSG = -1):
if enableSG != -1:
self.clickSuperGags = enableSG
for buttonList in self.buttons:
for buttonIndex in xrange(LAST_REGULAR_GAG_LEVEL + 1, MAX_LEVEL_INDEX + 1):
if self.clickSuperGags:
pass
else:
self.makeUnpressable(buttonList[buttonIndex], self.buttons.index(buttonList), buttonIndex)
def hide(self):
if self.tutorialFlag:
self.tutArrows.arrowsOff()
self.tutText.hide()
DirectFrame.hide(self)
def updateTotalPropsText(self):
textTotal = TTLocalizer.InventoryTotalGags % (self.totalProps, self.toon.getMaxCarry())
if localAvatar.getPinkSlips() > 1:
textTotal = textTotal + '\n\n' + TTLocalizer.InventroyPinkSlips % localAvatar.getPinkSlips()
elif localAvatar.getPinkSlips() == 1:
textTotal = textTotal + '\n\n' + TTLocalizer.InventroyPinkSlip
self.totalLabel['text'] = textTotal
def unload(self):
self.notify.debug('Unloading Inventory for %d' % self.toon.doId)
self.stopAndClearPropBonusIval()
self.propBonusIval.finish()
self.propBonusIval = None
del self.invModels
self.buttonModels.removeNode()
del self.buttonModels
del self.upButton
del self.downButton
del self.rolloverButton
del self.flatButton
del self.invFrame
del self.battleFrame
del self.purchaseFrame
del self.storePurchaseFrame
self.deleteEnterButton.destroy()
del self.deleteEnterButton
self.deleteExitButton.destroy()
del self.deleteExitButton
del self.detailFrame
del self.detailNameLabel
del self.detailAmountLabel
del self.detailDataLabel
del self.totalLabel
for row in self.trackRows:
row.destroy()
del self.trackRows
del self.trackNameLabels
del self.trackBars
for buttonList in self.buttons:
for buttonIndex in xrange(MAX_LEVEL_INDEX + 1):
buttonList[buttonIndex].destroy()
del self.buttons
InventoryBase.InventoryBase.unload(self)
DirectFrame.destroy(self)
return
def load(self):
self.notify.debug('Loading Inventory for %d' % self.toon.doId)
invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons')
self.invModels = []
for track in xrange(len(AvPropsNew)):
itemList = []
for item in xrange(len(AvPropsNew[track])):
itemList.append(invModel.find('**/' + AvPropsNew[track][item]))
self.invModels.append(itemList)
invModel.removeNode()
del invModel
self.buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
self.rowModel = self.buttonModels.find('**/InventoryRow')
self.upButton = self.buttonModels.find('**/InventoryButtonUp')
self.downButton = self.buttonModels.find('**/InventoryButtonDown')
self.rolloverButton = self.buttonModels.find('**/InventoryButtonRollover')
self.flatButton = self.buttonModels.find('**/InventoryButtonFlat')
self.invFrame = DirectFrame(relief=None, parent=self)
self.battleFrame = None
self.purchaseFrame = None
self.storePurchaseFrame = None
trashcanGui = loader.loadModel('phase_3/models/gui/trashcan_gui')
self.deleteEnterButton = DirectButton(parent=self.invFrame, image=(trashcanGui.find('**/TrashCan_CLSD'), trashcanGui.find('**/TrashCan_OPEN'), trashcanGui.find('**/TrashCan_RLVR')), text=('', TTLocalizer.InventoryDelete, TTLocalizer.InventoryDelete), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), text_scale=0.1, text_pos=(0, -0.1), text_font=getInterfaceFont(), textMayChange=0, relief=None, pos=(-1, 0, -0.35), scale=1.0)
self.deleteExitButton = DirectButton(parent=self.invFrame, image=(trashcanGui.find('**/TrashCan_OPEN'), trashcanGui.find('**/TrashCan_CLSD'), trashcanGui.find('**/TrashCan_RLVR')), text=('', TTLocalizer.InventoryDone, TTLocalizer.InventoryDone), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), text_scale=0.1, text_pos=(0, -0.1), text_font=getInterfaceFont(), textMayChange=0, relief=None, pos=(-1, 0, -0.35), scale=1.0)
trashcanGui.removeNode()
self.deleteHelpText = DirectLabel(parent=self.invFrame, relief=None, pos=(0.272, 0.3, -0.907), text=TTLocalizer.InventoryDeleteHelp, text_fg=(0, 0, 0, 1), text_scale=0.08, textMayChange=0)
self.deleteHelpText.hide()
self.detailFrame = DirectFrame(parent=self.invFrame, relief=None, pos=(1.05, 0, -0.08))
self.detailNameLabel = DirectLabel(parent=self.detailFrame, text='', text_scale=TTLocalizer.INdetailNameLabel, text_fg=(0.05, 0.14, 0.4, 1), scale=0.045, pos=(0, 0, 0), text_font=getInterfaceFont(), relief=None, image=self.invModels[0][0])
self.detailAmountLabel = DirectLabel(parent=self.detailFrame, text='', text_fg=(0.05, 0.14, 0.4, 1), scale=0.04, pos=(0.16, 0, -0.175), text_font=getInterfaceFont(), text_align=TextNode.ARight, relief=None)
self.detailDataLabel = DirectLabel(parent=self.detailFrame, text='', text_fg=(0.05, 0.14, 0.4, 1), scale=0.04, pos=(-0.22, 0, -0.24), text_font=getInterfaceFont(), text_align=TextNode.ALeft, relief=None)
self.detailCreditLabel = DirectLabel(parent=self.detailFrame, text=TTLocalizer.InventorySkillCreditNone, text_fg=(0.05, 0.14, 0.4, 1), scale=0.04, pos=(-0.22, 0, -0.365), text_font=getInterfaceFont(), text_align=TextNode.ALeft, relief=None)
self.detailCreditLabel.hide()
self.totalLabel = DirectLabel(text='', parent=self.detailFrame, pos=(0, 0, -0.095), scale=0.05, text_fg=(0.05, 0.14, 0.4, 1), text_font=getInterfaceFont(), relief=None)
self.updateTotalPropsText()
self.trackRows = []
self.trackNameLabels = []
self.trackBars = []
self.buttons = []
for track in xrange(0, len(Tracks)):
trackFrame = DirectFrame(parent=self.invFrame, image=self.rowModel, scale=(1.0, 1.0, 1.1), pos=(0, 0.3, self.TrackYOffset + track * self.TrackYSpacing), image_color=(TrackColors[track][0],
TrackColors[track][1],
TrackColors[track][2],
1), state=DGG.NORMAL, relief=None)
trackFrame.bind(DGG.WITHIN, self.enterTrackFrame, extraArgs=[track])
trackFrame.bind(DGG.WITHOUT, self.exitTrackFrame, extraArgs=[track])
self.trackRows.append(trackFrame)
adjustLeft = -0.065
self.trackNameLabels.append(DirectLabel(text=TextEncoder.upper(Tracks[track]), parent=self.trackRows[track], pos=(-0.72 + adjustLeft, -0.1, 0.01), scale=TTLocalizer.INtrackNameLabels, relief=None, text_fg=(0.2, 0.2, 0.2, 1), text_font=getInterfaceFont(), text_align=TextNode.ALeft, textMayChange=0))
self.trackBars.append(DirectWaitBar(parent=self.trackRows[track], pos=(-0.58 + adjustLeft, -0.1, -0.025), relief=DGG.SUNKEN, frameSize=(-0.6,
0.6,
-0.1,
0.1), borderWidth=(0.02, 0.02), scale=0.25, frameColor=(TrackColors[track][0] * 0.6,
TrackColors[track][1] * 0.6,
TrackColors[track][2] * 0.6,
1), barColor=(TrackColors[track][0] * 0.9,
TrackColors[track][1] * 0.9,
TrackColors[track][2] * 0.9,
1), text='0 / 0', text_scale=0.16, text_fg=(0, 0, 0, 0.8), text_align=TextNode.ACenter, text_pos=(0, -0.05)))
self.buttons.append([])
for item in xrange(0, len(Levels[track])):
button = DirectButton(parent=self.trackRows[track], image=(self.upButton,
self.downButton,
self.rolloverButton,
self.flatButton), geom=self.invModels[track][item], text='50', text_scale=0.04, text_align=TextNode.ARight, geom_scale=0.7, geom_pos=(-0.01, -0.1, 0), text_fg=Vec4(1, 1, 1, 1), text_pos=(0.07, -0.04), textMayChange=1, relief=None, image_color=(0, 0.6, 1, 1), pos=(self.ButtonXOffset + item * self.ButtonXSpacing + adjustLeft, -0.1, 0), command=self.__handleSelection, extraArgs=[track, item])
button.bind(DGG.ENTER, self.showDetail, extraArgs=[track, item])
button.bind(DGG.EXIT, self.hideDetail)
self.buttons[track].append(button)
return
def __handleSelection(self, track, level):
if self.activateMode == 'purchaseDelete' or self.activateMode == 'bookDelete' or self.activateMode == 'storePurchaseDelete':
if self.numItem(track, level):
self.useItem(track, level)
self.updateGUI(track, level)
messenger.send('inventory-deletion', [track, level])
self.showDetail(track, level)
elif self.activateMode == 'purchase' or self.activateMode == 'storePurchase':
messenger.send('inventory-selection', [track, level])
self.showDetail(track, level)
elif self.gagTutMode:
pass
else:
messenger.send('inventory-selection', [track, level])
def __handleRun(self):
messenger.send('inventory-run')
def __handleFire(self):
messenger.send('inventory-fire')
def __handleSOS(self):
messenger.send('inventory-sos')
def __handlePass(self):
messenger.send('inventory-pass')
def __handleBackToPlayground(self):
messenger.send('inventory-back-to-playground')
def showDetail(self, track, level, event = None):
self.totalLabel.hide()
self.detailNameLabel.show()
self.detailNameLabel.configure(text=AvPropStrings[track][level], image_image=self.invModels[track][level])
self.detailNameLabel.configure(image_scale=20, image_pos=(-0.2, 0, -2.2))
self.detailAmountLabel.show()
self.detailAmountLabel.configure(text=TTLocalizer.InventoryDetailAmount % {'numItems': self.numItem(track, level),
'maxItems': self.getMax(track, level)})
self.detailDataLabel.show()
damage = getAvPropDamage(track, level, self.toon.experience.getExp(track))
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
damageBonusStr = ''
damageBonus = 0
if self.propAndOrganicBonusStack:
if propBonus:
damageBonus += getDamageBonus(damage)
if organicBonus:
damageBonus += getDamageBonus(damage)
if damageBonus:
damageBonusStr = TTLocalizer.InventoryDamageBonus % damageBonus
else:
if propBonus or organicBonus:
damageBonus += getDamageBonus(damage)
if damageBonus:
damageBonusStr = TTLocalizer.InventoryDamageBonus % damageBonus
accString = AvTrackAccStrings[track]
if (organicBonus or propBonus) and track == LURE_TRACK:
accString = TTLocalizer.BattleGlobalLureAccMedium
self.detailDataLabel.configure(text=TTLocalizer.InventoryDetailData % {'accuracy': accString,
'damageString': self.getToonupDmgStr(track, level),
'damage': damage,
'bonus': damageBonusStr,
'singleOrGroup': self.getSingleGroupStr(track, level)})
if self.itemIsCredit(track, level):
mult = self.__battleCreditMultiplier
if self.__respectInvasions:
mult *= self.__invasionCreditMultiplier
self.setDetailCredit(track, (level + 1) * mult)
else:
self.setDetailCredit(track, None)
self.detailCreditLabel.show()
return
def setDetailCredit(self, track, credit):
if credit != None:
if self.toon.earnedExperience:
maxCredit = ExperienceCap - self.toon.earnedExperience[track]
credit = min(credit, maxCredit)
credit = int(credit * 10 + 0.5)
if credit % 10 == 0:
credit /= 10
else:
credit /= 10.0
if self.detailCredit == credit:
return
if credit != None:
self.detailCreditLabel['text'] = TTLocalizer.InventorySkillCredit % credit
if self.detailCredit == None:
self.detailCreditLabel['text_fg'] = (0.05, 0.14, 0.4, 1)
else:
self.detailCreditLabel['text'] = TTLocalizer.InventorySkillCreditNone
self.detailCreditLabel['text_fg'] = (0.5, 0.0, 0.0, 1.0)
self.detailCredit = credit
return
def hideDetail(self, event = None):
self.totalLabel.show()
self.detailNameLabel.hide()
self.detailAmountLabel.hide()
self.detailDataLabel.hide()
self.detailCreditLabel.hide()
def noDetail(self):
self.totalLabel.hide()
self.detailNameLabel.hide()
self.detailAmountLabel.hide()
self.detailDataLabel.hide()
self.detailCreditLabel.hide()
def setActivateMode(self, mode, heal = 1, trap = 1, lure = 1, bldg = 0, creditLevel = None, tutorialFlag = 0, gagTutMode = 0):
self.notify.debug('setActivateMode() mode:%s heal:%s trap:%s lure:%s bldg:%s' % (mode,
heal,
trap,
lure,
bldg))
self.previousActivateMode = self.activateMode
self.activateMode = mode
self.deactivateButtons()
self.heal = heal
self.trap = trap
self.lure = lure
self.bldg = bldg
self.battleCreditLevel = creditLevel
self.tutorialFlag = tutorialFlag
self.gagTutMode = gagTutMode
self.__activateButtons()
self.enableUberGags()
return None
def setActivateModeBroke(self):
if self.activateMode == 'storePurchase':
self.setActivateMode('storePurchaseBroke')
elif self.activateMode == 'purchase':
self.setActivateMode('purchaseBroke', gagTutMode=self.gagTutMode)
else:
self.notify.error('Unexpected mode in setActivateModeBroke(): %s' % self.activateMode)
self.enableUberGags()
def deactivateButtons(self):
if self.previousActivateMode == 'book':
self.bookDeactivateButtons()
elif self.previousActivateMode == 'bookDelete':
self.bookDeleteDeactivateButtons()
elif self.previousActivateMode == 'purchaseDelete':
self.purchaseDeleteDeactivateButtons()
elif self.previousActivateMode == 'purchase':
self.purchaseDeactivateButtons()
elif self.previousActivateMode == 'purchaseBroke':
self.purchaseBrokeDeactivateButtons()
elif self.previousActivateMode == 'gagTutDisabled':
self.gagTutDisabledDeactivateButtons()
elif self.previousActivateMode == 'battle':
self.battleDeactivateButtons()
elif self.previousActivateMode == 'storePurchaseDelete':
self.storePurchaseDeleteDeactivateButtons()
elif self.previousActivateMode == 'storePurchase':
self.storePurchaseDeactivateButtons()
elif self.previousActivateMode == 'storePurchaseBroke':
self.storePurchaseBrokeDeactivateButtons()
elif self.previousActivateMode == 'plantTree':
self.plantTreeDeactivateButtons()
else:
self.notify.error('No such mode as %s' % self.previousActivateMode)
return None
def __activateButtons(self):
if hasattr(self, 'activateMode'):
if self.activateMode == 'book':
self.bookActivateButtons()
elif self.activateMode == 'bookDelete':
self.bookDeleteActivateButtons()
elif self.activateMode == 'purchaseDelete':
self.purchaseDeleteActivateButtons()
elif self.activateMode == 'purchase':
self.purchaseActivateButtons()
elif self.activateMode == 'purchaseBroke':
self.purchaseBrokeActivateButtons()
elif self.activateMode == 'gagTutDisabled':
self.gagTutDisabledActivateButtons()
elif self.activateMode == 'battle':
self.battleActivateButtons()
elif self.activateMode == 'storePurchaseDelete':
self.storePurchaseDeleteActivateButtons()
elif self.activateMode == 'storePurchase':
self.storePurchaseActivateButtons()
elif self.activateMode == 'storePurchaseBroke':
self.storePurchaseBrokeActivateButtons()
elif self.activateMode == 'plantTree':
self.plantTreeActivateButtons()
else:
self.notify.error('No such mode as %s' % self.activateMode)
return None
def bookActivateButtons(self):
self.setPos(0, 0, 0.52)
self.setScale(1.0)
self.detailFrame.setPos(0.1, 0, -0.855)
self.detailFrame.setScale(0.75)
self.deleteEnterButton.hide()
self.deleteEnterButton.setPos(1.029, 0, -0.639)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(1.029, 0, -0.639)
self.deleteExitButton.setScale(0.75)
self.invFrame.reparentTo(self)
self.invFrame.setPos(0, 0, 0)
self.invFrame.setScale(1)
self.deleteEnterButton['command'] = self.setActivateMode
self.deleteEnterButton['extraArgs'] = ['bookDelete']
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
self.makeBookUnpressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return None
def bookDeactivateButtons(self):
self.deleteEnterButton['command'] = None
return
def bookDeleteActivateButtons(self):
messenger.send('enterBookDelete')
self.setPos(-0.2, 0, 0.4)
self.setScale(0.8)
self.deleteEnterButton.hide()
self.deleteEnterButton.setPos(1.029, 0, -0.639)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.show()
self.deleteExitButton.setPos(1.029, 0, -0.639)
self.deleteExitButton.setScale(0.75)
self.deleteHelpText.show()
self.invFrame.reparentTo(self)
self.invFrame.setPos(0, 0, 0)
self.invFrame.setScale(1)
self.deleteExitButton['command'] = self.setActivateMode
self.deleteExitButton['extraArgs'] = [self.previousActivateMode]
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if self.numItem(track, level) <= 0:
self.makeUnpressable(button, track, level)
else:
self.makeDeletePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
def bookDeleteDeactivateButtons(self):
messenger.send('exitBookDelete')
self.deleteHelpText.hide()
self.deleteDeactivateButtons()
def purchaseDeleteActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.purchaseFrame == None:
self.loadPurchaseFrame()
self.purchaseFrame.show()
self.invFrame.reparentTo(self.purchaseFrame)
self.invFrame.setPos(-0.235, 0, 0.52)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.17, 0, -0.02)
self.detailFrame.setScale(1.25)
self.deleteEnterButton.hide()
self.deleteEnterButton.setPos(-0.441, 0, -0.917)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.show()
self.deleteExitButton.setPos(-0.441, 0, -0.917)
self.deleteExitButton.setScale(0.75)
self.deleteExitButton['command'] = self.setActivateMode
self.deleteExitButton['extraArgs'] = [self.previousActivateMode]
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if self.numItem(track, level) <= 0 or level >= UBER_GAG_LEVEL_INDEX:
self.makeUnpressable(button, track, level)
else:
self.makeDeletePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def purchaseDeleteDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.purchaseFrame.hide()
self.deleteDeactivateButtons()
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if self.numItem(track, level) <= 0 or level >= UBER_GAG_LEVEL_INDEX:
self.makeUnpressable(button, track, level)
else:
self.makeDeletePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
def storePurchaseDeleteActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.storePurchaseFrame == None:
self.loadStorePurchaseFrame()
self.storePurchaseFrame.show()
self.invFrame.reparentTo(self.storePurchaseFrame)
self.invFrame.setPos(-0.23, 0, 0.505)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.175, 0, 0)
self.detailFrame.setScale(1.25)
self.deleteEnterButton.hide()
self.deleteEnterButton.setPos(-0.55, 0, -0.91)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.show()
self.deleteExitButton.setPos(-0.55, 0, -0.91)
self.deleteExitButton.setScale(0.75)
self.deleteExitButton['command'] = self.setActivateMode
self.deleteExitButton['extraArgs'] = [self.previousActivateMode]
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if self.numItem(track, level) <= 0 or level >= UBER_GAG_LEVEL_INDEX:
self.makeUnpressable(button, track, level)
else:
self.makeDeletePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def storePurchaseDeleteDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.storePurchaseFrame.hide()
self.deleteDeactivateButtons()
def storePurchaseBrokeActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.storePurchaseFrame == None:
self.loadStorePurchaseFrame()
self.storePurchaseFrame.show()
self.invFrame.reparentTo(self.storePurchaseFrame)
self.invFrame.setPos(-0.23, 0, 0.505)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.175, 0, 0)
self.detailFrame.setScale(1.25)
self.deleteEnterButton.show()
self.deleteEnterButton.setPos(-0.55, 0, -0.91)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(-0.551, 0, -0.91)
self.deleteExitButton.setScale(0.75)
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
self.makeUnpressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def storePurchaseBrokeDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.storePurchaseFrame.hide()
def deleteActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0, 0, 0)
self.setScale(1)
self.deleteEnterButton.hide()
self.deleteExitButton.show()
self.deleteExitButton['command'] = self.setActivateMode
self.deleteExitButton['extraArgs'] = [self.previousActivateMode]
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if self.numItem(track, level) <= 0:
self.makeUnpressable(button, track, level)
else:
self.makePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return None
def deleteDeactivateButtons(self):
self.deleteExitButton['command'] = None
return
def purchaseActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.purchaseFrame == None:
self.loadPurchaseFrame()
self.purchaseFrame.show()
self.invFrame.reparentTo(self.purchaseFrame)
self.invFrame.setPos(-0.235, 0, 0.52)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.17, 0, -0.02)
self.detailFrame.setScale(1.25)
totalProps = self.totalProps
maxProps = self.toon.getMaxCarry()
self.deleteEnterButton.show()
self.deleteEnterButton.setPos(-0.441, 0, -0.917)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(-0.441, 0, -0.917)
self.deleteExitButton.setScale(0.75)
if self.gagTutMode:
self.deleteEnterButton.hide()
self.deleteEnterButton['command'] = self.setActivateMode
self.deleteEnterButton['extraArgs'] = ['purchaseDelete']
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
unpaid = not base.cr.isPaid()
if self.numItem(track, level) >= self.getMax(track, level) or totalProps == maxProps or unpaid and gagIsPaidOnly(track, level) or level > LAST_REGULAR_GAG_LEVEL:
if gagIsPaidOnly(track, level):
self.makeDisabledPressable(button, track, level)
elif unpaid and gagIsVelvetRoped(track, level):
self.makeDisabledPressable(button, track, level)
else:
self.makeUnpressable(button, track, level)
elif unpaid and gagIsVelvetRoped(track, level):
self.makeDisabledPressable(button, track, level)
else:
self.makePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def purchaseDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.purchaseFrame.hide()
def storePurchaseActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.storePurchaseFrame == None:
self.loadStorePurchaseFrame()
self.storePurchaseFrame.show()
self.invFrame.reparentTo(self.storePurchaseFrame)
self.invFrame.setPos(-0.23, 0, 0.505)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.175, 0, 0)
self.detailFrame.setScale(1.25)
totalProps = self.totalProps
maxProps = self.toon.getMaxCarry()
self.deleteEnterButton.show()
self.deleteEnterButton.setPos(-0.55, 0, -0.91)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(-0.55, 0, -0.91)
self.deleteExitButton.setScale(0.75)
self.deleteEnterButton['command'] = self.setActivateMode
self.deleteEnterButton['extraArgs'] = ['storePurchaseDelete']
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
unpaid = not base.cr.isPaid()
if self.numItem(track, level) >= self.getMax(track, level) or totalProps == maxProps or unpaid and gagIsPaidOnly(track, level) or level > LAST_REGULAR_GAG_LEVEL:
if gagIsPaidOnly(track, level):
self.makeDisabledPressable(button, track, level)
elif unpaid and gagIsVelvetRoped(track, level):
self.makeDisabledPressable(button, track, level)
else:
self.makeUnpressable(button, track, level)
elif unpaid and gagIsVelvetRoped(track, level):
self.makeDisabledPressable(button, track, level)
else:
self.makePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def storePurchaseDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.storePurchaseFrame.hide()
def purchaseBrokeActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.purchaseFrame == None:
self.loadPurchaseFrame()
self.purchaseFrame.show()
self.invFrame.reparentTo(self.purchaseFrame)
self.invFrame.setPos(-0.235, 0, 0.52)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.17, 0, -0.02)
self.detailFrame.setScale(1.25)
self.deleteEnterButton.show()
self.deleteEnterButton.setPos(-0.441, 0, -0.917)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(-0.441, 0, -0.917)
self.deleteExitButton.setScale(0.75)
if self.gagTutMode:
self.deleteEnterButton.hide()
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
if not self.gagTutMode:
self.makeUnpressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def purchaseBrokeDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.purchaseFrame.hide()
def gagTutDisabledActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0.2, 0, -0.04)
self.setScale(1)
if self.purchaseFrame == None:
self.loadPurchaseFrame()
self.purchaseFrame.show()
self.invFrame.reparentTo(self.purchaseFrame)
self.invFrame.setPos(-0.235, 0, 0.52)
self.invFrame.setScale(0.81)
self.detailFrame.setPos(1.17, 0, -0.02)
self.detailFrame.setScale(1.25)
self.deleteEnterButton.show()
self.deleteEnterButton.setPos(-0.441, 0, -0.917)
self.deleteEnterButton.setScale(0.75)
self.deleteExitButton.hide()
self.deleteExitButton.setPos(-0.441, 0, -0.917)
self.deleteExitButton.setScale(0.75)
self.deleteEnterButton.hide()
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
button.show()
self.makeUnpressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def gagTutDisabledDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.purchaseFrame.hide()
def battleActivateButtons(self):
self.stopAndClearPropBonusIval()
self.reparentTo(aspect2d)
self.setPos(0, 0, 0.1)
self.setScale(1)
if self.battleFrame == None:
self.loadBattleFrame()
self.battleFrame.show()
self.battleFrame.setScale(0.9)
self.invFrame.reparentTo(self.battleFrame)
self.invFrame.setPos(-0.26, 0, 0.35)
self.invFrame.setScale(1)
self.detailFrame.setPos(1.125, 0, -0.08)
self.detailFrame.setScale(1)
self.deleteEnterButton.hide()
self.deleteExitButton.hide()
if self.bldg == 1:
self.runButton.hide()
self.sosButton.show()
self.passButton.show()
elif self.tutorialFlag == 1:
self.runButton.hide()
self.sosButton.hide()
self.passButton.hide()
self.fireButton.hide()
else:
self.runButton.show()
self.sosButton.show()
self.passButton.show()
self.fireButton.show()
if localAvatar.getPinkSlips() > 0:
self.fireButton['state'] = DGG.NORMAL
self.fireButton['image_color'] = Vec4(0, 0.6, 1, 1)
else:
self.fireButton['state'] = DGG.DISABLED
self.fireButton['image_color'] = Vec4(0.4, 0.4, 0.4, 1)
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level):
unpaid = not base.cr.isPaid()
button.show()
if self.numItem(track, level) <= 0 or track == HEAL_TRACK and not self.heal or track == TRAP_TRACK and not self.trap or track == LURE_TRACK and not self.lure:
self.makeUnpressable(button, track, level)
elif unpaid and gagIsVelvetRoped(track, level):
self.makeDisabledPressable(button, track, level)
elif self.itemIsCredit(track, level):
self.makePressable(button, track, level)
else:
self.makeNoncreditPressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
self.propBonusIval.loop()
return
def battleDeactivateButtons(self):
self.invFrame.reparentTo(self)
self.battleFrame.hide()
self.stopAndClearPropBonusIval()
def plantTreeActivateButtons(self):
self.reparentTo(aspect2d)
self.setPos(0, 0, 0.1)
self.setScale(1)
if self.battleFrame == None:
self.loadBattleFrame()
self.battleFrame.show()
self.battleFrame.setScale(0.9)
self.invFrame.reparentTo(self.battleFrame)
self.invFrame.setPos(-0.25, 0, 0.35)
self.invFrame.setScale(1)
self.detailFrame.setPos(1.125, 0, -0.08)
self.detailFrame.setScale(1)
self.deleteEnterButton.hide()
self.deleteExitButton.hide()
self.runButton.hide()
self.sosButton.hide()
self.passButton['text'] = TTLocalizer.lCancel
self.passButton.show()
for track in xrange(len(Tracks)):
if self.toon.hasTrackAccess(track):
self.showTrack(track)
for level in xrange(len(Levels[track])):
button = self.buttons[track][level]
if self.itemIsUsable(track, level) and (level == 0 or self.toon.doIHaveRequiredTrees(track, level)):
button.show()
self.makeUnpressable(button, track, level)
if self.numItem(track, level) > 0:
if not self.toon.isTreePlanted(track, level):
self.makePressable(button, track, level)
else:
button.hide()
else:
self.hideTrack(track)
return
def plantTreeDeactivateButtons(self):
self.passButton['text'] = TTLocalizer.InventoryPass
self.invFrame.reparentTo(self)
self.battleFrame.hide()
def itemIsUsable(self, track, level):
if self.gagTutMode:
trackAccess = self.toon.getTrackAccess()
return trackAccess[track] >= level + 1
curSkill = self.toon.experience.getExp(track)
if curSkill < Levels[track][level]:
return 0
else:
return 1
def itemIsCredit(self, track, level):
if self.toon.earnedExperience:
if self.toon.earnedExperience[track] >= ExperienceCap:
return 0
if self.battleCreditLevel == None:
return 1
else:
return level < self.battleCreditLevel
return
def getMax(self, track, level):
if self.gagTutMode and (track not in (4, 5) or level > 0):
return 1
return InventoryBase.InventoryBase.getMax(self, track, level)
def getCurAndNextExpValues(self, track):
curSkill = self.toon.experience.getExp(track)
retVal = MaxSkill
for amount in Levels[track]:
if curSkill < amount:
retVal = amount
return (curSkill, retVal)
return (curSkill, retVal)
def makePressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.ShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(image0_image=self.upButton, image2_image=self.rolloverButton, text_shadow=shadowColor, geom_color=self.PressableGeomColor, commandButtons=(DGG.LMB,))
if self._interactivePropTrackBonus == track:
button.configure(image_color=self.PropBonusPressableImageColor)
self.addToPropBonusIval(button)
else:
button.configure(image_color=self.PressableImageColor)
def makeDisabledPressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.UnpressableShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(text_shadow=shadowColor, geom_color=self.UnpressableGeomColor, image_image=self.flatButton, commandButtons=(DGG.LMB,))
button.configure(image_color=self.UnpressableImageColor)
def makeNoncreditPressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.ShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(image0_image=self.upButton, image2_image=self.rolloverButton, text_shadow=shadowColor, geom_color=self.PressableGeomColor, commandButtons=(DGG.LMB,))
if self._interactivePropTrackBonus == track:
button.configure(image_color=self.PropBonusNoncreditPressableImageColor)
self.addToPropBonusIval(button)
else:
button.configure(image_color=self.NoncreditPressableImageColor)
def makeDeletePressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.ShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(image0_image=self.upButton, image2_image=self.rolloverButton, text_shadow=shadowColor, geom_color=self.PressableGeomColor, commandButtons=(DGG.LMB,))
button.configure(image_color=self.DeletePressableImageColor)
def makeUnpressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.UnpressableShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(text_shadow=shadowColor, geom_color=self.UnpressableGeomColor, image_image=self.flatButton, commandButtons=())
button.configure(image_color=self.UnpressableImageColor)
def makeBookUnpressable(self, button, track, level):
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
shadowColor = self.ShadowBuffedColor
else:
shadowColor = self.ShadowColor
button.configure(text_shadow=shadowColor, geom_color=self.BookUnpressableGeomColor, image_image=self.flatButton, commandButtons=())
button.configure(image0_color=self.BookUnpressableImage0Color, image2_color=self.BookUnpressableImage2Color)
def hideTrack(self, trackIndex):
self.trackNameLabels[trackIndex].show()
self.trackBars[trackIndex].hide()
for levelIndex in xrange(0, len(Levels[trackIndex])):
self.buttons[trackIndex][levelIndex].hide()
def showTrack(self, trackIndex):
self.trackNameLabels[trackIndex].show()
self.trackBars[trackIndex].show()
for levelIndex in xrange(0, len(Levels[trackIndex])):
self.buttons[trackIndex][levelIndex].show()
curExp, nextExp = self.getCurAndNextExpValues(trackIndex)
if curExp >= UnpaidMaxSkills[trackIndex] and self.toon.getGameAccess() != OTPGlobals.AccessFull:
self.trackBars[trackIndex]['range'] = nextExp
self.trackBars[trackIndex]['text'] = TTLocalizer.InventoryGuestExp
elif curExp >= regMaxSkill:
self.trackBars[trackIndex]['range'] = UberSkill
self.trackBars[trackIndex]['text'] = TTLocalizer.InventoryUberTrackExp % {'nextExp': MaxSkill - curExp}
else:
self.trackBars[trackIndex]['range'] = nextExp
self.trackBars[trackIndex]['text'] = TTLocalizer.InventoryTrackExp % {'curExp': curExp,
'nextExp': nextExp}
def updateInvString(self, invString):
InventoryBase.InventoryBase.updateInvString(self, invString)
self.updateGUI()
return None
def updateButton(self, track, level):
button = self.buttons[track][level]
button['text'] = str(self.numItem(track, level))
organicBonus = self.toon.checkGagBonus(track, level)
propBonus = self.checkPropBonus(track)
bonus = organicBonus or propBonus
if bonus:
textScale = 0.05
else:
textScale = 0.04
button.configure(text_scale=textScale)
def buttonBoing(self, track, level):
button = self.buttons[track][level]
oldScale = button.getScale()
s = Sequence(button.scaleInterval(0.1, oldScale * 1.333, blendType='easeOut'), button.scaleInterval(0.1, oldScale, blendType='easeIn'), name='inventoryButtonBoing-' + str(self.this))
s.start()
def updateGUI(self, track = None, level = None):
self.updateTotalPropsText()
if track == None and level == None:
for track in xrange(len(Tracks)):
curExp, nextExp = self.getCurAndNextExpValues(track)
if curExp >= UnpaidMaxSkills[track] and self.toon.getGameAccess() != OTPGlobals.AccessFull:
self.trackBars[track]['range'] = nextExp
self.trackBars[track]['text'] = TTLocalizer.InventoryGuestExp
elif curExp >= regMaxSkill:
self.trackBars[track]['text'] = TTLocalizer.InventoryUberTrackExp % {'nextExp': MaxSkill - curExp}
self.trackBars[track]['value'] = curExp - regMaxSkill
else:
self.trackBars[track]['text'] = TTLocalizer.InventoryTrackExp % {'curExp': curExp,
'nextExp': nextExp}
self.trackBars[track]['value'] = curExp
for level in xrange(0, len(Levels[track])):
self.updateButton(track, level)
elif track != None and level != None:
self.updateButton(track, level)
else:
self.notify.error('Invalid use of updateGUI')
self.__activateButtons()
return
def getSingleGroupStr(self, track, level):
if track == HEAL_TRACK:
if isGroup(track, level):
return TTLocalizer.InventoryAffectsAllToons
else:
return TTLocalizer.InventoryAffectsOneToon
elif isGroup(track, level):
return TTLocalizer.InventoryAffectsAllCogs
else:
return TTLocalizer.InventoryAffectsOneCog
def getToonupDmgStr(self, track, level):
if track == HEAL_TRACK:
return TTLocalizer.InventoryHealString
else:
return TTLocalizer.InventoryDamageString
def deleteItem(self, track, level):
if self.numItem(track, level) > 0:
self.useItem(track, level)
self.updateGUI(track, level)
def loadBattleFrame(self):
battleModels = loader.loadModel('phase_3.5/models/gui/battle_gui')
self.battleFrame = DirectFrame(relief=None, image=battleModels.find('**/BATTLE_Menu'), image_scale=0.8, parent=self)
self.runButton = DirectButton(parent=self.battleFrame, relief=None, pos=(0.73, 0, -0.398), text=TTLocalizer.InventoryRun, text_scale=TTLocalizer.INrunButton, text_pos=(0, -0.02), text_fg=Vec4(1, 1, 1, 1), textMayChange=0, image=(self.upButton, self.downButton, self.rolloverButton), image_scale=1.05, image_color=(0, 0.6, 1, 1), command=self.__handleRun)
self.sosButton = DirectButton(parent=self.battleFrame, relief=None, pos=(0.96, 0, -0.398), text=TTLocalizer.InventorySOS, text_scale=0.05, text_pos=(0, -0.02), text_fg=Vec4(1, 1, 1, 1), textMayChange=0, image=(self.upButton, self.downButton, self.rolloverButton), image_scale=1.05, image_color=(0, 0.6, 1, 1), command=self.__handleSOS)
self.passButton = DirectButton(parent=self.battleFrame, relief=None, pos=(0.96, 0, -0.242), text=TTLocalizer.InventoryPass, text_scale=TTLocalizer.INpassButton, text_pos=(0, -0.02), text_fg=Vec4(1, 1, 1, 1), textMayChange=1, image=(self.upButton, self.downButton, self.rolloverButton), image_scale=1.05, image_color=(0, 0.6, 1, 1), command=self.__handlePass)
self.fireButton = DirectButton(parent=self.battleFrame, relief=None, pos=(0.73, 0, -0.242), text=TTLocalizer.InventoryFire, text_scale=TTLocalizer.INfireButton, text_pos=(0, -0.02), text_fg=Vec4(1, 1, 1, 1), textMayChange=0, image=(self.upButton, self.downButton, self.rolloverButton), image_scale=1.05, image_color=(0, 0.6, 1, 1), command=self.__handleFire)
self.tutText = DirectFrame(parent=self.battleFrame, relief=None, pos=(0.05, 0, -0.1133), scale=0.143, image=DGG.getDefaultDialogGeom(), image_scale=5.125, image_pos=(0, 0, -0.65), image_color=ToontownGlobals.GlobalDialogColor, text_scale=TTLocalizer.INclickToAttack, text=TTLocalizer.InventoryClickToAttack, textMayChange=0)
self.tutText.hide()
self.tutArrows = BlinkingArrows.BlinkingArrows(parent=self.battleFrame)
battleModels.removeNode()
self.battleFrame.hide()
return
def loadPurchaseFrame(self):
purchaseModels = loader.loadModel('phase_4/models/gui/purchase_gui')
self.purchaseFrame = DirectFrame(relief=None, image=purchaseModels.find('**/PurchasePanel'), image_pos=(-0.21, 0, 0.08), parent=self)
self.purchaseFrame.setX(-.06)
self.purchaseFrame.hide()
purchaseModels.removeNode()
return
def loadStorePurchaseFrame(self):
storePurchaseModels = loader.loadModel('phase_4/models/gui/gag_shop_purchase_gui')
self.storePurchaseFrame = DirectFrame(relief=None, image=storePurchaseModels.find('**/gagShopPanel'), image_pos=(-0.21, 0, 0.18), parent=self)
self.storePurchaseFrame.hide()
storePurchaseModels.removeNode()
return
def buttonLookup(self, track, level):
return self.invModels[track][level]
def enterTrackFrame(self, track, guiItem):
messenger.send('enterTrackFrame', [track])
def exitTrackFrame(self, track, guiItem):
messenger.send('exitTrackFrame', [track])
def checkPropBonus(self, track):
result = False
if track == self._interactivePropTrackBonus:
result = True
return result
def stopAndClearPropBonusIval(self):
if self.propBonusIval and self.propBonusIval.isPlaying():
self.propBonusIval.finish()
self.propBonusIval = Parallel(name='dummyPropBonusIval')
def addToPropBonusIval(self, button):
flashObject = button
try:
flashObject = button.component('image0')
except:
pass
goDark = LerpColorScaleInterval(flashObject, 0.5, Point4(0.1, 0.1, 0.1, 1.0), Point4(1, 1, 1, 1), blendType='easeIn')
goBright = LerpColorScaleInterval(flashObject, 0.5, Point4(1, 1, 1, 1), Point4(0.1, 0.1, 0.1, 1.0), blendType='easeOut')
newSeq = Sequence(goDark, goBright, Wait(0.2))
self.propBonusIval.append(newSeq)