141 lines
7 KiB
Python
141 lines
7 KiB
Python
from direct.gui.DirectGui import *
|
|
from panda3d.core import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.toonbase import TTLocalizer
|
|
from direct.task.Task import Task
|
|
|
|
class BankGui(DirectFrame):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('BankGui')
|
|
|
|
def __init__(self, doneEvent, allowWithdraw = 1):
|
|
DirectFrame.__init__(self, relief=None, geom=DGG.getDefaultDialogGeom(), geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=(1.33, 1, 1.1), pos=(0, 0, 0))
|
|
self.initialiseoptions(BankGui)
|
|
self.doneEvent = doneEvent
|
|
self.__transactionAmount = 0
|
|
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
|
|
jarGui = loader.loadModel('phase_3.5/models/gui/jar_gui')
|
|
arrowGui = loader.loadModel('phase_3/models/gui/create_a_toon_gui')
|
|
bankModel = loader.loadModel('phase_5.5/models/estate/jellybeanBank')
|
|
bankModel.setDepthWrite(1)
|
|
bankModel.setDepthTest(1)
|
|
bankModel.find('**/jellybeans').setDepthWrite(0)
|
|
bankModel.find('**/jellybeans').setDepthTest(0)
|
|
okImageList = (buttons.find('**/ChtBx_OKBtn_UP'), buttons.find('**/ChtBx_OKBtn_DN'), buttons.find('**/ChtBx_OKBtn_Rllvr'))
|
|
cancelImageList = (buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr'))
|
|
arrowImageList = (arrowGui.find('**/CrtATn_R_Arrow_UP'),
|
|
arrowGui.find('**/CrtATn_R_Arrow_DN'),
|
|
arrowGui.find('**/CrtATn_R_Arrow_RLVR'),
|
|
arrowGui.find('**/CrtATn_R_Arrow_UP'))
|
|
self.cancelButton = DirectButton(parent=self, relief=None, image=cancelImageList, pos=(-0.2, 0, -0.4), text=TTLocalizer.BankGuiCancel, text_scale=0.06, text_pos=(0, -0.1), command=self.__cancel)
|
|
self.okButton = DirectButton(parent=self, relief=None, image=okImageList, pos=(0.2, 0, -0.4), text=TTLocalizer.BankGuiOk, text_scale=0.06, text_pos=(0, -0.1), command=self.__requestTransaction)
|
|
self.jarDisplay = DirectLabel(parent=self, relief=None, pos=(-0.4, 0, 0), scale=0.7, text=str(base.localAvatar.getMoney()), text_scale=0.2, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0, -0.1, 0), image=jarGui.find('**/Jar'), text_font=ToontownGlobals.getSignFont())
|
|
self.bankDisplay = DirectLabel(parent=self, relief=None, pos=(0.4, 0, 0), scale=0.9, text=str(base.localAvatar.getBankMoney()), text_scale=0.2, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0, -0.1, 0), geom=bankModel, geom_scale=0.08, geom_pos=(0, 10, -0.26), geom_hpr=(0, 0, 0), text_font=ToontownGlobals.getSignFont())
|
|
self.depositArrow = DirectButton(parent=self, relief=None, image=arrowImageList, image_scale=(1, 1, 1), image3_color=Vec4(0.6, 0.6, 0.6, 0.25), pos=(0.01, 0, 0.15))
|
|
self.withdrawArrow = DirectButton(parent=self, relief=None, image=arrowImageList, image_scale=(-1, 1, 1), image3_color=Vec4(0.6, 0.6, 0.6, 0.25), pos=(-0.01, 0, -0.15))
|
|
self.depositArrow.bind(DGG.B1PRESS, self.__depositButtonDown)
|
|
self.depositArrow.bind(DGG.B1RELEASE, self.__depositButtonUp)
|
|
self.withdrawArrow.bind(DGG.B1PRESS, self.__withdrawButtonDown)
|
|
self.withdrawArrow.bind(DGG.B1RELEASE, self.__withdrawButtonUp)
|
|
self.accept('bankAsleep', self.__cancel)
|
|
self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange)
|
|
self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__bankMoneyChange)
|
|
if allowWithdraw:
|
|
self.depositArrow.setPos(0.01, 0, 0.15)
|
|
self.withdrawArrow.setPos(-0.01, 0, -0.15)
|
|
else:
|
|
self.depositArrow.setPos(0, 0, 0)
|
|
self.withdrawArrow.hide()
|
|
buttons.removeNode()
|
|
jarGui.removeNode()
|
|
arrowGui.removeNode()
|
|
self.__updateTransaction(0)
|
|
return
|
|
|
|
def destroy(self):
|
|
taskMgr.remove(self.taskName('runCounter'))
|
|
self.ignore(localAvatar.uniqueName('moneyChange'))
|
|
self.ignore(localAvatar.uniqueName('bankMoneyChange'))
|
|
DirectFrame.destroy(self)
|
|
|
|
def __cancel(self):
|
|
messenger.send(self.doneEvent, [0])
|
|
|
|
def __requestTransaction(self):
|
|
messenger.send(self.doneEvent, [self.__transactionAmount])
|
|
|
|
def __updateTransaction(self, amount):
|
|
hitLimit = 0
|
|
self.__transactionAmount += amount
|
|
jarMoney = base.localAvatar.getMoney()
|
|
maxJarMoney = base.localAvatar.getMaxMoney()
|
|
bankMoney = base.localAvatar.getBankMoney()
|
|
maxBankMoney = base.localAvatar.getMaxBankMoney()
|
|
self.__transactionAmount = min(self.__transactionAmount, jarMoney)
|
|
self.__transactionAmount = min(self.__transactionAmount, maxBankMoney - bankMoney)
|
|
self.__transactionAmount = -min(-self.__transactionAmount, maxJarMoney - jarMoney)
|
|
self.__transactionAmount = -min(-self.__transactionAmount, bankMoney)
|
|
newJarMoney = jarMoney - self.__transactionAmount
|
|
newBankMoney = bankMoney + self.__transactionAmount
|
|
if newJarMoney <= 0 or newBankMoney >= maxBankMoney:
|
|
self.depositArrow['state'] = DGG.DISABLED
|
|
hitLimit = 1
|
|
else:
|
|
self.depositArrow['state'] = DGG.NORMAL
|
|
if newBankMoney <= 0 or newJarMoney >= maxJarMoney:
|
|
self.withdrawArrow['state'] = DGG.DISABLED
|
|
hitLimit = 1
|
|
else:
|
|
self.withdrawArrow['state'] = DGG.NORMAL
|
|
self.jarDisplay['text'] = str(newJarMoney)
|
|
self.bankDisplay['text'] = str(newBankMoney)
|
|
return (hitLimit,
|
|
newJarMoney,
|
|
newBankMoney,
|
|
self.__transactionAmount)
|
|
|
|
def __runCounter(self, task):
|
|
if task.time - task.prevTime < task.delayTime:
|
|
return Task.cont
|
|
else:
|
|
task.delayTime = max(0.05, task.delayTime * 0.75)
|
|
task.prevTime = task.time
|
|
hitLimit, jar, bank, trans = self.__updateTransaction(task.delta)
|
|
if hitLimit:
|
|
return Task.done
|
|
else:
|
|
return Task.cont
|
|
|
|
def __depositButtonUp(self, event):
|
|
messenger.send('wakeup')
|
|
taskMgr.remove(self.taskName('runCounter'))
|
|
|
|
def __depositButtonDown(self, event):
|
|
messenger.send('wakeup')
|
|
task = Task(self.__runCounter)
|
|
task.delayTime = 0.4
|
|
task.prevTime = 0.0
|
|
task.delta = 1
|
|
hitLimit, jar, bank, trans = self.__updateTransaction(task.delta)
|
|
if not hitLimit:
|
|
taskMgr.add(task, self.taskName('runCounter'))
|
|
|
|
def __withdrawButtonUp(self, event):
|
|
messenger.send('wakeup')
|
|
taskMgr.remove(self.taskName('runCounter'))
|
|
|
|
def __withdrawButtonDown(self, event):
|
|
messenger.send('wakeup')
|
|
task = Task(self.__runCounter)
|
|
task.delayTime = 0.4
|
|
task.prevTime = 0.0
|
|
task.delta = -1
|
|
hitLimit, jar, bank, trans = self.__updateTransaction(task.delta)
|
|
if not hitLimit:
|
|
taskMgr.add(task, self.taskName('runCounter'))
|
|
|
|
def __moneyChange(self, money):
|
|
self.__updateTransaction(0)
|
|
|
|
def __bankMoneyChange(self, bankMoney):
|
|
self.__updateTransaction(0)
|