toontown-just-works/toontown/estate/ToonStatueSelectionGUI.py

166 lines
7.9 KiB
Python
Raw Normal View History

2024-07-07 18:08:39 -05:00
from direct.directnotify import DirectNotifyGlobal
from direct.distributed import DistributedObject
from direct.gui.DirectGui import *
from direct.gui.DirectScrolledList import *
from direct.interval.IntervalGlobal import *
from direct.task import Task
from panda3d.core import *
from toontown.estate import DistributedToonStatuary
from toontown.estate import GardenGlobals
from toontown.estate import PlantingGUI
from otp.nametag import NametagGlobals, NametagConstants
from otp.nametag.NametagGroup import *
from toontown.toon import DistributedToon
from toontown.toon import Toon
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
class ToonStatueSelectionGUI(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('ToonStatueSelectionGUI')
def __init__(self, doneEvent, specialBoxActive = False):
base.tssGUI = self
instructions = TTLocalizer.GardeningChooseToonStatue
instructionsPos = (0, 0.4)
DirectFrame.__init__(self, relief=None, state='normal', geom=DGG.getDefaultDialogGeom(), geom_color=ToontownGlobals.GlobalDialogColor, geom_scale=(1.5, 1.0, 1.0), frameSize=(-1, 1, -1, 1), pos=(0, 0, 0), text=instructions, text_wordwrap=18, text_scale=0.08, text_pos=instructionsPos)
self.initialiseoptions(ToonStatueSelectionGUI)
self.doneEvent = doneEvent
buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
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'))
self.cancelButton = DirectButton(parent=self, relief=None, image=cancelImageList, pos=(-0.3, 0, -0.35), text=TTLocalizer.PlantingGuiCancel, text_scale=0.06, text_pos=(0, -0.1), command=self.__cancel)
self.okButton = DirectButton(parent=self, relief=None, image=okImageList, pos=(0.3, 0, -0.35), text=TTLocalizer.PlantingGuiOk, text_scale=0.06, text_pos=(0, -0.1), command=self.__accept)
buttons.removeNode()
self.ffList = []
self.friends = {}
self.doId2Dna = {}
self.textRolloverColor = Vec4(1, 1, 0, 1)
self.textDownColor = Vec4(0.5, 0.9, 1, 1)
self.textDisabledColor = Vec4(0.4, 0.8, 0.4, 1)
self.createFriendsList()
return
def destroy(self):
self.doneEvent = None
self.previewToon.delete()
self.previewToon = None
for ff in self.ffList:
self.friends[ff].destroy()
self.ffList = []
self.friends = {}
self.doId2Dna = {}
self.scrollList.destroy()
DirectFrame.destroy(self)
return
def __cancel(self):
messenger.send(self.doneEvent, [0, '', -1])
messenger.send('wakeup')
def __accept(self):
messenger.send(self.doneEvent, [1, '', DistributedToonStatuary.dnaCodeFromToonDNA(self.dnaSelected)])
messenger.send('wakeup')
def createFriendsList(self):
self.__makeFFlist()
if len(self.ffList) > 0:
gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
self.scrollList = DirectScrolledList(parent=self, relief=None, incButton_image=(gui.find('**/FndsLst_ScrollUp'),
gui.find('**/FndsLst_ScrollDN'),
gui.find('**/FndsLst_ScrollUp_Rllvr'),
gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_pos=(0.0, 0.0, -0.316), incButton_image1_color=Vec4(1.0, 0.9, 0.4, 1.0), incButton_image3_color=Vec4(1.0, 1.0, 0.6, 0.5), incButton_scale=(1.0, 1.0, -1.0), decButton_image=(gui.find('**/FndsLst_ScrollUp'),
gui.find('**/FndsLst_ScrollDN'),
gui.find('**/FndsLst_ScrollUp_Rllvr'),
gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_pos=(0.0, 0.0, 0.117), decButton_image1_color=Vec4(1.0, 1.0, 0.6, 1.0), decButton_image3_color=Vec4(1.0, 1.0, 0.6, 0.6), itemFrame_pos=(-0.17, 0.0, 0.06), itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.01,
0.35,
-0.35,
0.04), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=8, itemFrame_scale=1.0, items=[])
gui.removeNode()
self.scrollList.setPos(0.35, 0, 0.125)
self.scrollList.setScale(1.25)
clipper = PlaneNode('clipper')
clipper.setPlane(Plane(Vec3(-1, 0, 0), Point3(0.17, 0, 0)))
clipNP = self.scrollList.attachNewNode(clipper)
self.scrollList.setClipPlane(clipNP)
self.__makeScrollList()
return
def checkFamily(self, doId):
test = 0
for familyMember in base.cr.avList:
if familyMember.id == doId:
test = 1
return test
def __makeFFlist(self):
playerAvatar = (base.localAvatar.doId, base.localAvatar.name, CCNonPlayer)
self.ffList.append(playerAvatar)
self.dnaSelected = base.localAvatar.style
self.createPreviewToon(self.dnaSelected)
for familyMember in base.cr.avList:
if familyMember.id != base.localAvatar.doId:
newFF = (familyMember.id, familyMember.name, CCNonPlayer)
self.ffList.append(newFF)
for friendId in base.localAvatar.friendsList:
handle = base.cr.identifyFriend(friendId)
if handle and not self.checkFamily(friendId):
if hasattr(handle, 'getName'):
self.ffList.append((friendId, handle.getName(), NametagConstants.getFriendColor(handle)))
else:
self.notify.warning('Bad Handle for getName in makeFFlist')
def __makeScrollList(self):
for ff in self.ffList:
ffbutton = self.makeFamilyButton(ff[0], ff[1], ff[2])
if ffbutton:
self.scrollList.addItem(ffbutton, refresh=0)
self.friends[ff] = ffbutton
self.scrollList.refresh()
def makeFamilyButton(self, familyId, familyName, colorCode):
return DirectButton(relief=None, text=familyName, text_scale=0.04, text_align=TextNode.ALeft, text_fg=NametagConstants.NAMETAG_COLORS[colorCode][0][0], text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=0, command=self.__chooseFriend, extraArgs=[familyId, familyName])
def __chooseFriend(self, friendId, friendName):
messenger.send('wakeup')
if self.checkFamily(friendId):
if friendId == base.localAvatar.doId:
self.createPreviewToon(base.localAvatar.style)
elif friendId in self.doId2Dna:
self.createPreviewToon(self.doId2Dna[friendId])
else:
familyAvatar = DistributedToon.DistributedToon(base.cr)
familyAvatar.doId = friendId
familyAvatar.forceAllowDelayDelete()
base.cr.getAvatarDetails(familyAvatar, self.__handleFamilyAvatar, 'DistributedToon')
else:
friend = base.cr.identifyFriend(friendId)
if friend:
self.createPreviewToon(friend.style)
def __handleFamilyAvatar(self, gotData, avatar, dclass):
self.doId2Dna[avatar.doId] = avatar.style
self.createPreviewToon(avatar.style)
avatar.delete()
def createPreviewToon(self, dna):
if hasattr(self, 'previewToon'):
self.previewToon.delete()
self.dnaSelected = dna
self.previewToon = Toon.Toon()
self.previewToon.setDNA(dna)
self.previewToon.loop('neutral')
self.previewToon.setH(180)
self.previewToon.setPos(-0.3, 0, -0.3)
self.previewToon.setScale(0.13)
self.previewToon.reparentTo(self)
self.previewToon.startBlink()
self.previewToon.startLookAround()
self.previewToon.getGeomNode().setDepthWrite(1)
self.previewToon.getGeomNode().setDepthTest(1)