toontown-just-works/toontown/estate/ClosetGUI.py
2024-07-07 18:08:39 -05:00

232 lines
10 KiB
Python

from direct.showbase.PythonUtil import Functor
from direct.gui.DirectGui import *
from panda3d.core import *
from toontown.makeatoon import ClothesGUI
import ClosetGlobals
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
from toontown.toontowngui import TTDialog
from toontown.toonbase import TTLocalizer
class ClosetGUI(ClothesGUI.ClothesGUI):
notify = directNotify.newCategory('ClosetGUI')
def __init__(self, isOwner, doneEvent, cancelEvent, swapEvent, deleteEvent, topList = None, botList = None, maxClothes = 0):
ClothesGUI.ClothesGUI.__init__(self, ClothesGUI.CLOTHES_CLOSET, doneEvent, swapEvent)
self.toon = None
self.topsList = topList
self.bottomsList = botList
self.isOwner = isOwner
self.deleteEvent = deleteEvent
self.cancelEvent = cancelEvent
self.genderChange = 0
self.maxClothes = maxClothes
self.verify = None
def load(self):
ClothesGUI.ClothesGUI.load(self)
self.gui = loader.loadModel('phase_3/models/gui/create_a_toon_gui')
self.cancelButton = DirectButton(relief=None, image=(self.gui.find('**/CrtAtoon_Btn2_UP'), self.gui.find('**/CrtAtoon_Btn2_DOWN'), self.gui.find('**/CrtAtoon_Btn2_RLLVR')), pos=(0.15, 0, -0.85), command=self.__handleCancel, text=('', TTLocalizer.MakeAToonCancel, TTLocalizer.MakeAToonCancel), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, -0.03), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))
self.cancelButton.hide()
self.countFrame = DirectFrame(parent=self.parentFrame, image=self.shuffleFrame, image_scale=(-0.6, 0.6, 0.6), relief=None, pos=(0, 0, -0.125), scale=1.2, frameColor=(1, 1, 1, 1), text=TTLocalizer.ClothesGUICount % (0, 0), text_scale=0.0575, text_pos=(-0.001, -0.015), text_fg=(1, 1, 1, 1))
if self.isOwner:
trashcanGui = loader.loadModel('phase_3/models/gui/trashcan_gui')
trashImage = (trashcanGui.find('**/TrashCan_CLSD'), trashcanGui.find('**/TrashCan_OPEN'), trashcanGui.find('**/TrashCan_RLVR'))
self.trashPanel = DirectFrame(parent=aspect2d, image=DGG.getDefaultDialogGeom(), image_color=(1, 1, 0.75, 0.8), image_scale=(0.36, 0, 0.75), pos=(-.86, 0, -.05), relief=None)
self.topTrashButton = DirectButton(parent=self.trashPanel, image=trashImage, relief=None, pos=(-0.09, 0, 0.2), command=self.__handleDelete, extraArgs=[ClosetGlobals.SHIRT], scale=(0.5, 0.5, 0.5), text=TTLocalizer.ClosetDeleteShirt, text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.12, text_pos=(0.3, 0), text_fg=(0.8, 0.2, 0.2, 1), text_shadow=(0, 0, 0, 1), textMayChange=0)
self.bottomTrashButton = DirectButton(parent=self.trashPanel, image=trashImage, relief=None, textMayChange=1, pos=(-0.09, 0, -0.2), command=self.__handleDelete, extraArgs=[ClosetGlobals.SHORTS], scale=(0.5, 0.5, 0.5), text=TTLocalizer.ClosetDeleteShorts, text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.12, text_pos=(0.3, 0), text_fg=(0.8, 0.2, 0.2, 1), text_shadow=(0, 0, 0, 1))
self.button = DirectButton(relief=None, image=(self.gui.find('**/CrtAtoon_Btn1_UP'), self.gui.find('**/CrtAtoon_Btn1_DOWN'), self.gui.find('**/CrtAtoon_Btn1_RLLVR')), pos=(-0.15, 0, -0.85), command=self.__handleButton, text=('', TTLocalizer.MakeAToonDone, TTLocalizer.MakeAToonDone), text_font=ToontownGlobals.getInterfaceFont(), text_scale=0.08, text_pos=(0, -0.03), text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1))
trashcanGui.removeNode()
def unload(self):
self.ignore('verifyDone')
ClothesGUI.ClothesGUI.unload(self)
self.cancelButton.destroy()
del self.cancelButton
self.countFrame.destroy()
del self.countFrame
if self.isOwner:
self.topTrashButton.destroy()
self.bottomTrashButton.destroy()
self.button.destroy()
del self.topTrashButton
del self.bottomTrashButton
del self.button
self.trashPanel.destroy()
del self.trashPanel
if self.verify:
self.verify.cleanup()
del self.verify
def showButtons(self):
ClothesGUI.ClothesGUI.showButtons(self)
self.cancelButton.show()
if self.isOwner:
self.topTrashButton.show()
self.bottomTrashButton.show()
self.button.show()
def hideButtons(self):
ClothesGUI.ClothesGUI.hideButtons(self)
self.cancelButton.hide()
if self.isOwner:
self.topTrashButton.hide()
self.bottomTrashButton.hide()
self.button.hide()
def setupScrollInterface(self):
self.notify.debug('setupScrollInterface')
self.dna = self.toon.getStyle()
self.gender = self.dna.getGender()
self.swappedTorso = 0
if self.topsList == None:
self.topsList = self.toon.getClothesTopsList()
if self.bottomsList == None:
self.bottomsList = self.toon.getClothesBottomsList()
self.tops = []
self.bottoms = []
self.tops.append((self.dna.topTex,
self.dna.topTexColor,
self.dna.sleeveTex,
self.dna.sleeveTexColor))
self.bottoms.append((self.dna.botTex, self.dna.botTexColor))
i = 0
while i < len(self.topsList):
self.tops.append((self.topsList[i],
self.topsList[i + 1],
self.topsList[i + 2],
self.topsList[i + 3]))
i = i + 4
i = 0
while i < len(self.bottomsList):
self.bottoms.append((self.bottomsList[i], self.bottomsList[i + 1]))
i = i + 2
self.topChoice = 0
self.bottomChoice = 0
self.swapTop(0)
self.swapBottom(0)
if self.isOwner:
self.updateTrashButtons()
self.setupButtons()
self.updateCount()
def updateCount(self, clothes, maxClothes):
self.countFrame['text'] = TTLocalizer.ClothesGUICount % (clothes, maxClothes)
def updateTrashButtons(self):
if len(self.tops) < 2:
self.topTrashButton['state'] = DGG.DISABLED
else:
self.topTrashButton['state'] = DGG.NORMAL
if len(self.bottoms) < 2:
self.bottomTrashButton['state'] = DGG.DISABLED
else:
self.bottomTrashButton['state'] = DGG.NORMAL
if self.toon:
if self.toon.style.torso[1] == 'd':
self.bottomTrashButton['text'] = TTLocalizer.ClosetDeleteSkirt
else:
self.bottomTrashButton['text'] = TTLocalizer.ClosetDeleteShorts
self.updateCount()
def updateCount(self):
clothes = (len(self.tops) + len(self.bottoms)) - 2
self.countFrame['text'] = TTLocalizer.ClothesGUICount % (clothes, self.maxClothes)
def setGender(self, gender):
self.ownerGender = gender
self.genderChange = 1
def swapBottom(self, offset):
length = len(self.bottoms)
self.bottomChoice += offset
if self.bottomChoice <= 0:
self.bottomChoice = 0
self.updateScrollButtons(self.bottomChoice, length, 0, self.bottomLButton, self.bottomRButton)
if self.bottomChoice < 0 or self.bottomChoice >= len(self.bottoms) or len(self.bottoms[self.bottomChoice]) != 2:
self.notify.warning('bottomChoice index is out of range!')
return None
self.toon.style.botTex = self.bottoms[self.bottomChoice][0]
self.toon.style.botTexColor = self.bottoms[self.bottomChoice][1]
if self.genderChange == 1:
if self.bottomChoice > 0:
self.__handleGenderBender(1)
else:
self.__handleGenderBender(0)
if self.toon.generateToonClothes() == 1:
self.toon.loop('neutral', 0)
self.swappedTorso = 1
if self.isOwner:
self.updateTrashButtons()
if self.swapEvent != None:
messenger.send(self.swapEvent)
def __handleGenderBender(self, type):
if type == 1:
if self.toon.style.gender != self.ownerGender and self.toon.style.gender == 'f':
self.toon.swapToonTorso(self.toon.style.torso[0] + 's', genClothes=0)
self.toon.loop('neutral', 0)
self.swappedTorso = 1
self.toon.style.gender = self.ownerGender
else:
self.toon.style.gender = self.gender
if self.toon.style.gender != self.ownerGender and self.toon.style.gender == 'm':
self.toon.swapToonTorso(self.toon.style.torso[0] + 's', genClothes=0)
self.toon.loop('neutral', 0)
self.swappedTorso = 1
def removeTop(self, index):
listLen = len(self.tops)
if index < listLen:
del self.tops[index]
if self.topChoice > index:
self.topChoice -= 1
elif self.topChoice == index:
self.topChoice = 0
return 1
return 0
def removeBottom(self, index):
listLen = len(self.bottoms)
if index < listLen:
del self.bottoms[index]
if self.bottomChoice > index:
self.bottomChoice -= 1
elif self.bottomChoice == index:
self.bottomChoice = 0
return 1
return 0
def __handleButton(self):
self.doneStatus = 'next'
messenger.send(self.doneEvent)
messenger.send('wakeup')
def __handleCancel(self):
messenger.send(self.cancelEvent)
messenger.send('wakeup')
def __handleDelete(self, t_or_b):
if t_or_b == ClosetGlobals.SHIRT:
item = TTLocalizer.ClosetShirt
elif self.toon.style.torso[1] == 'd':
item = TTLocalizer.ClosetSkirt
else:
item = TTLocalizer.ClosetShorts
self.verify = TTDialog.TTGlobalDialog(doneEvent='verifyDone', message=TTLocalizer.ClosetVerifyDelete % item, style=TTDialog.TwoChoice)
self.verify.show()
self.accept('verifyDone', Functor(self.__handleVerifyDelete, t_or_b))
messenger.send('wakeup')
def __handleVerifyDelete(self, t_or_b):
status = self.verify.doneStatus
self.ignore('verifyDone')
self.verify.cleanup()
del self.verify
self.verify = None
if status == 'ok':
messenger.send(self.deleteEvent, [t_or_b])
messenger.send('wakeup')
return