Poodletooth-iLand/toontown/estate/ToonStatueSelectionGUI.py
2015-03-03 17:10:12 -05:00

170 lines
8.1 KiB
Python

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 pandac.PandaModules import *
from toontown.estate import DistributedToonStatuary
from toontown.estate import GardenGlobals
from toontown.estate import PlantingGUI
from toontown.nametag import NametagGlobals
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, NametagGlobals.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, NametagGlobals.CCNonPlayer)
self.ffList.append(newFF)
for friendPair in base.localAvatar.friendsList:
friendId, flags = friendPair
handle = base.cr.identifyFriend(friendId)
if handle and not self.checkFamily(friendId):
if hasattr(handle, 'getName'):
colorCode = NametagGlobals.CCSpeedChat
if flags & ToontownGlobals.FriendChat:
colorCode = NametagGlobals.CCFreeChat
newFF = (friendPair[0], handle.getName(), colorCode)
self.ffList.append(newFF)
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):
fg = NametagGlobals.NametagColors[colorCode][3][0]
return DirectButton(relief=None, text=familyName, text_scale=0.04, text_align=TextNode.ALeft, text_fg=fg, 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)