1183 lines
55 KiB
Python
1183 lines
55 KiB
Python
from pandac.PandaModules import *
|
|
from direct.gui.DirectGui import *
|
|
from pandac.PandaModules import *
|
|
from direct.gui.DirectScrolledList import *
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.toontowngui import TTDialog
|
|
import CatalogItem
|
|
import CatalogInvalidItem
|
|
import CatalogFurnitureItem
|
|
from toontown.toonbase import TTLocalizer
|
|
import CatalogItemPanel
|
|
import CatalogItemTypes
|
|
from direct.actor import Actor
|
|
import random
|
|
from toontown.toon import DistributedToon
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from otp.nametag.ChatBalloon import ChatBalloon
|
|
from otp.nametag import NametagGroup
|
|
NUM_CATALOG_ROWS = 3
|
|
NUM_CATALOG_COLS = 2
|
|
CatalogPanelCenters = [[Point3(-0.95, 0, 0.91), Point3(-0.275, 0, 0.91)], [Point3(-0.95, 0, 0.275), Point3(-0.275, 0, 0.275)], [Point3(-0.95, 0, -0.4), Point3(-0.275, 0, -0.4)]]
|
|
CatalogPanelColors = {CatalogItemTypes.FURNITURE_ITEM: Vec4(0.733, 0.78, 0.933, 1.0),
|
|
CatalogItemTypes.CHAT_ITEM: Vec4(0.922, 0.922, 0.753, 1.0),
|
|
CatalogItemTypes.CLOTHING_ITEM: Vec4(0.918, 0.69, 0.69, 1.0),
|
|
CatalogItemTypes.EMOTE_ITEM: Vec4(0.922, 0.922, 0.753, 1.0),
|
|
CatalogItemTypes.WALLPAPER_ITEM: Vec4(0.749, 0.984, 0.608, 1.0),
|
|
CatalogItemTypes.WINDOW_ITEM: Vec4(0.827, 0.91, 0.659, 1.0)}
|
|
|
|
class CatalogScreen(DirectFrame):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogScreen')
|
|
|
|
def __init__(self, parent = aspect2d, **kw):
|
|
guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
|
|
background = guiItems.find('**/catalog_background')
|
|
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
|
|
guiBack = loader.loadModel('phase_5.5/models/gui/package_delivery_panel')
|
|
optiondefs = (('scale', 0.667, None),
|
|
('pos', (0, 1, 0.025), None),
|
|
('phone', None, None),
|
|
('doneEvent', None, None),
|
|
('image', background, None),
|
|
('relief', None, None))
|
|
self.defineoptions(kw, optiondefs)
|
|
DirectFrame.__init__(self, parent)
|
|
self.friendGiftIndex = 0
|
|
self.friendGiftHandle = None
|
|
self.frienddoId = None
|
|
self.receiverName = 'Error Nameless Toon'
|
|
self.friends = {}
|
|
self.family = {}
|
|
self.ffList = []
|
|
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.giftAvatar = None
|
|
self.gotAvatar = 0
|
|
self.allowGetDetails = 1
|
|
self.load(guiItems, guiButton, guiBack)
|
|
self.initialiseoptions(CatalogScreen)
|
|
self.enableBackorderCatalogButton()
|
|
self.setMaxPageIndex(self.numNewPages)
|
|
self.setPageIndex(-1)
|
|
self.showPageItems()
|
|
self.hide()
|
|
self.clarabelleChatNP = None
|
|
self.clarabelleChatBalloon = None
|
|
self.clarabelleGreetingSfx = None
|
|
self.clarabelleGoodbyeSfx = None
|
|
self.clarabelleErrorSfx = None
|
|
self.clarabelleChatterSfx = None
|
|
self.gifting = -1
|
|
self.createdGiftGui = None
|
|
self.viewing = None
|
|
return
|
|
|
|
def show(self):
|
|
self.accept('CatalogItemPurchaseRequest', self.__handlePurchaseRequest)
|
|
self.accept('CatalogItemGiftPurchaseRequest', self.__handleGiftPurchaseRequest)
|
|
self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange)
|
|
self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__bankMoneyChange)
|
|
self.accept(localAvatar.uniqueName('emblemsChange'), self.__emblemChange)
|
|
deliveryText = 'setDeliverySchedule-%s' % base.localAvatar.doId
|
|
self.accept(deliveryText, self.remoteUpdate)
|
|
base.setBackgroundColor(Vec4(0.529, 0.290, 0.286, 1))
|
|
render.hide()
|
|
DirectFrame.show(self)
|
|
|
|
def clarabelleGreeting(task):
|
|
self.setClarabelleChat(TTLocalizer.CatalogGreeting, type='greeting')
|
|
|
|
def clarabelleHelpText1(task):
|
|
self.setClarabelleChat(TTLocalizer.CatalogHelpText1)
|
|
|
|
taskMgr.doMethodLater(1.0, clarabelleGreeting, 'clarabelleGreeting')
|
|
taskMgr.doMethodLater(12.0, clarabelleHelpText1, 'clarabelleHelpText1')
|
|
if hasattr(self, 'giftToggle'):
|
|
self.giftToggle['state'] = DGG.DISABLED
|
|
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleWait
|
|
base.cr.deliveryManager.sendAck()
|
|
self.accept('DeliveryManagerAck', self.__handleUDack)
|
|
taskMgr.doMethodLater(10.0, self.__handleNoAck, 'ackTimeOut')
|
|
|
|
def hide(self):
|
|
self.ignore('CatalogItemPurchaseRequest')
|
|
self.ignore('CatalogItemGiftPurchaseRequest')
|
|
self.ignore('DeliveryManagerAck')
|
|
taskMgr.remove('ackTimeOut')
|
|
self.ignore(localAvatar.uniqueName('moneyChange'))
|
|
self.ignore(localAvatar.uniqueName('bankMoneyChange'))
|
|
self.ignore(localAvatar.uniqueName('emblemsChange'))
|
|
deliveryText = 'setDeliverySchedule-%s' % base.localAvatar.doId
|
|
self.ignore(deliveryText)
|
|
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
|
|
render.show()
|
|
DirectFrame.hide(self)
|
|
|
|
def setNumNewPages(self, numNewPages):
|
|
self.numNewPages = numNewPages
|
|
|
|
def setNumBackPages(self, numBackPages):
|
|
self.numBackPages = numBackPages
|
|
|
|
def setNumLoyaltyPages(self, numLoyaltyPages):
|
|
self.numLoyaltyPages = numLoyaltyPages
|
|
|
|
def setNumEmblemPages(self, numEmblemPages):
|
|
self.numEmblemPages = numEmblemPages
|
|
|
|
def setPageIndex(self, index):
|
|
self.pageIndex = index
|
|
|
|
def setMaxPageIndex(self, numPages):
|
|
self.maxPageIndex = max(numPages - 1, -1)
|
|
|
|
def enableBackorderCatalogButton(self):
|
|
self.backCatalogButton['state'] = DGG.NORMAL
|
|
self.newCatalogButton['state'] = DGG.DISABLED
|
|
self.loyaltyCatalogButton['state'] = DGG.DISABLED
|
|
self.emblemCatalogButton['state'] = DGG.DISABLED
|
|
|
|
def enableNewCatalogButton(self):
|
|
self.backCatalogButton['state'] = DGG.DISABLED
|
|
self.newCatalogButton['state'] = DGG.NORMAL
|
|
self.loyaltyCatalogButton['state'] = DGG.DISABLED
|
|
self.emblemCatalogButton['state'] = DGG.DISABLED
|
|
|
|
def enableLoyaltyCatalogButton(self):
|
|
self.backCatalogButton['state'] = DGG.DISABLED
|
|
self.newCatalogButton['state'] = DGG.DISABLED
|
|
self.loyaltyCatalogButton['state'] = DGG.NORMAL
|
|
self.emblemCatalogButton['state'] = DGG.DISABLED
|
|
|
|
def enableEmblemCatalogButton(self):
|
|
self.backCatalogButton['state'] = DGG.DISABLED
|
|
self.newCatalogButton['state'] = DGG.DISABLED
|
|
self.loyaltyCatalogButton['state'] = DGG.DISABLED
|
|
self.emblemCatalogButton['state'] = DGG.NORMAL
|
|
|
|
def modeBackorderCatalog(self):
|
|
self.backCatalogButton['state'] = DGG.DISABLED
|
|
self.newCatalogButton['state'] = DGG.NORMAL
|
|
self.loyaltyCatalogButton['state'] = DGG.NORMAL
|
|
self.emblemCatalogButton['state'] = DGG.NORMAL
|
|
|
|
def modeNewCatalog(self):
|
|
self.backCatalogButton['state'] = DGG.NORMAL
|
|
self.newCatalogButton['state'] = DGG.DISABLED
|
|
self.loyaltyCatalogButton['state'] = DGG.NORMAL
|
|
self.emblemCatalogButton['state'] = DGG.NORMAL
|
|
|
|
def modeLoyaltyCatalog(self):
|
|
self.backCatalogButton['state'] = DGG.NORMAL
|
|
self.newCatalogButton['state'] = DGG.NORMAL
|
|
self.loyaltyCatalogButton['state'] = DGG.DISABLED
|
|
self.emblemCatalogButton['state'] = DGG.NORMAL
|
|
|
|
def modeEmblemCatalog(self):
|
|
self.backCatalogButton['state'] = DGG.NORMAL
|
|
self.newCatalogButton['state'] = DGG.NORMAL
|
|
self.loyaltyCatalogButton['state'] = DGG.NORMAL
|
|
self.emblemCatalogButton['state'] = DGG.DISABLED
|
|
|
|
def showNewItems(self, index = None):
|
|
if config.GetBool('want-qa-regression', 0):
|
|
self.notify.info('QA-REGRESSION: CATALOG: New item')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.viewing = 'New'
|
|
self.modeNewCatalog()
|
|
self.setMaxPageIndex(self.numNewPages)
|
|
if self.numNewPages == 0:
|
|
self.setPageIndex(-1)
|
|
elif index is not None:
|
|
self.setPageIndex(index)
|
|
else:
|
|
self.setPageIndex(0)
|
|
self.showPageItems()
|
|
return
|
|
|
|
def showBackorderItems(self, index = None):
|
|
if config.GetBool('want-qa-regression', 0):
|
|
self.notify.info('QA-REGRESSION: CATALOG: Backorder item')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.viewing = 'Backorder'
|
|
self.modeBackorderCatalog()
|
|
self.setMaxPageIndex(self.numBackPages)
|
|
if self.numBackPages == 0:
|
|
self.setPageIndex(-1)
|
|
elif index is not None:
|
|
self.setPageIndex(index)
|
|
else:
|
|
self.setPageIndex(0)
|
|
self.showPageItems()
|
|
return
|
|
|
|
def showLoyaltyItems(self, index = None):
|
|
if config.GetBool('want-qa-regression', 0):
|
|
self.notify.info('QA-REGRESSION: CATALOG: Special item')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.viewing = 'Loyalty'
|
|
self.modeLoyaltyCatalog()
|
|
self.setMaxPageIndex(self.numLoyaltyPages)
|
|
if self.numLoyaltyPages == 0:
|
|
self.setPageIndex(-1)
|
|
elif index is not None:
|
|
self.setPageIndex(index)
|
|
else:
|
|
self.setPageIndex(0)
|
|
self.showPageItems()
|
|
return
|
|
|
|
def showEmblemItems(self, index = None):
|
|
if config.GetBool('want-qa-regression', 0):
|
|
self.notify.info('QA-REGRESSION: CATALOG: Emblem item')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.viewing = 'Emblem'
|
|
self.modeEmblemCatalog()
|
|
self.setMaxPageIndex(self.numEmblemPages)
|
|
if self.numEmblemPages == 0:
|
|
self.setPageIndex(-1)
|
|
elif index is not None:
|
|
self.setPageIndex(index)
|
|
else:
|
|
self.setPageIndex(0)
|
|
self.showPageItems()
|
|
return
|
|
|
|
def showNextPage(self):
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.pageIndex = self.pageIndex + 1
|
|
if self.viewing == None:
|
|
self.modeNewCatalog()
|
|
self.viewing == 'New'
|
|
if self.viewing == 'New' and self.pageIndex > self.maxPageIndex and self.numBackPages > 0:
|
|
self.showBackorderItems()
|
|
if self.viewing == 'New' and self.pageIndex > self.maxPageIndex and self.numLoyaltyPages > 0:
|
|
self.showLoyaltyItems()
|
|
elif self.viewing == 'Backorder' and self.pageIndex > self.maxPageIndex and self.numLoyaltyPages > 0:
|
|
self.showLoyaltyItems()
|
|
elif self.viewing == 'Loyalty' and self.pageIndex > self.maxPageIndex and self.numEmblemPages > 0:
|
|
self.showEmblemItems()
|
|
else:
|
|
self.pageIndex = min(self.pageIndex, self.maxPageIndex)
|
|
self.showPageItems()
|
|
return
|
|
|
|
def showBackPage(self):
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
messenger.send('wakeup')
|
|
self.pageIndex = self.pageIndex - 1
|
|
if self.viewing == 'Backorder' and self.pageIndex < 0 and self.numNewPages > 0:
|
|
self.showNewItems(self.numNewPages - 1)
|
|
elif self.viewing == 'Loyalty' and self.pageIndex < 0 and self.numBackPages > 0:
|
|
self.showBackorderItems(self.numBackPages - 1)
|
|
elif self.viewing == 'Emblem' and self.pageIndex < 0 and self.numLoyaltyPages > 0:
|
|
self.showLoyaltyItems(self.numLoyaltyPages - 1)
|
|
else:
|
|
self.pageIndex = max(self.pageIndex, -1)
|
|
self.showPageItems()
|
|
|
|
def showPageItems(self):
|
|
self.hidePages()
|
|
if self.viewing == None:
|
|
self.viewing = 'New'
|
|
if self.pageIndex < 0:
|
|
self.closeCover()
|
|
else:
|
|
if self.pageIndex == 0:
|
|
self.openCover()
|
|
if self.viewing == 'New':
|
|
page = self.pageList[self.pageIndex]
|
|
newOrBackOrLoyalty = 0
|
|
elif self.viewing == 'Backorder':
|
|
page = self.backPageList[self.pageIndex]
|
|
newOrBackOrLoyalty = 1
|
|
elif self.viewing == 'Loyalty':
|
|
page = self.loyaltyPageList[self.pageIndex]
|
|
newOrBackOrLoyalty = 2
|
|
elif self.viewing == 'Emblem':
|
|
page = self.emblemPageList[self.pageIndex]
|
|
newOrBackOrLoyalty = 3
|
|
page.show()
|
|
for panel in self.panelDict[page.get_key()]:
|
|
panel.load()
|
|
if panel.ival:
|
|
panel.ival.loop()
|
|
self.visiblePanels.append(panel)
|
|
|
|
pIndex = 0
|
|
randGen = random.Random()
|
|
randGen.seed(base.localAvatar.catalogScheduleCurrentWeek + (self.pageIndex << 8) + (newOrBackOrLoyalty << 16))
|
|
for i in range(NUM_CATALOG_ROWS):
|
|
for j in range(NUM_CATALOG_COLS):
|
|
if pIndex < len(self.visiblePanels):
|
|
type = self.visiblePanels[pIndex]['item'].getTypeCode()
|
|
self.squares[i][j].setColor(CatalogPanelColors.values()[randGen.randint(0, len(CatalogPanelColors) - 1)])
|
|
cs = 0.7 + 0.3 * randGen.random()
|
|
self.squares[i][j].setColorScale(0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 1)
|
|
else:
|
|
self.squares[i][j].setColor(CatalogPanelColors[CatalogItemTypes.CHAT_ITEM])
|
|
self.squares[i][j].clearColorScale()
|
|
pIndex += 1
|
|
|
|
if self.viewing == 'New':
|
|
text = TTLocalizer.CatalogNew
|
|
elif self.viewing == 'Loyalty':
|
|
text = TTLocalizer.CatalogLoyalty
|
|
elif self.viewing == 'Backorder':
|
|
text = TTLocalizer.CatalogBackorder
|
|
elif self.viewing == 'Emblem':
|
|
text = TTLocalizer.CatalogEmblem
|
|
self.pageLabel['text'] = text + ' - %d' % (self.pageIndex + 1)
|
|
if self.pageIndex < self.maxPageIndex:
|
|
self.nextPageButton.show()
|
|
elif self.viewing == 'New' and self.numBackPages == 0 and self.numLoyaltyPages == 0:
|
|
self.nextPageButton.hide()
|
|
elif self.viewing == 'Backorder' and self.numLoyaltyPages == 0:
|
|
self.nextPageButton.hide()
|
|
elif self.viewing == 'Loyalty' and self.numEmblemPages == 0:
|
|
self.nextPageButton.hide()
|
|
elif self.viewing == 'Loyalty' and self.numEmblemPages > 0:
|
|
self.nextPageButton.show()
|
|
elif self.viewing == 'Emblem':
|
|
self.nextPageButton.hide()
|
|
self.adjustForSound()
|
|
self.update()
|
|
return
|
|
|
|
def adjustForSound(self):
|
|
numEmoteItems = 0
|
|
emotePanels = []
|
|
for visIndex in xrange(len(self.visiblePanels)):
|
|
panel = self.visiblePanels[visIndex]
|
|
item = panel['item']
|
|
catalogType = item.getTypeCode()
|
|
if catalogType == CatalogItemTypes.EMOTE_ITEM:
|
|
numEmoteItems += 1
|
|
emotePanels.append(panel)
|
|
else:
|
|
panel.soundOnButton.hide()
|
|
panel.soundOffButton.hide()
|
|
|
|
if numEmoteItems == 1:
|
|
emotePanels[0].handleSoundOnButton()
|
|
elif numEmoteItems > 1:
|
|
for panel in emotePanels:
|
|
panel.handleSoundOffButton()
|
|
|
|
def hidePages(self):
|
|
for page in self.pageList:
|
|
page.hide()
|
|
|
|
for page in self.backPageList:
|
|
page.hide()
|
|
|
|
for page in self.loyaltyPageList:
|
|
page.hide()
|
|
|
|
for page in self.emblemPageList:
|
|
page.hide()
|
|
|
|
for panel in self.visiblePanels:
|
|
if panel.ival:
|
|
panel.ival.finish()
|
|
|
|
self.visiblePanels = []
|
|
|
|
def openCover(self):
|
|
self.cover.hide()
|
|
self.hideDummyTabs()
|
|
self.backPageButton.show()
|
|
self.pageLabel.show()
|
|
|
|
def closeCover(self):
|
|
self.cover.show()
|
|
self.showDummyTabs()
|
|
self.nextPageButton.show()
|
|
self.backPageButton.hide()
|
|
self.pageLabel.hide()
|
|
self.hidePages()
|
|
|
|
def showDummyTabs(self):
|
|
if self.numNewPages > 0:
|
|
self.newCatalogButton2.show()
|
|
if self.numBackPages > 0:
|
|
self.backCatalogButton2.show()
|
|
if self.numLoyaltyPages > 0:
|
|
self.loyaltyCatalogButton2.show()
|
|
if self.numEmblemPages > 0:
|
|
self.emblemCatalogButton2.show()
|
|
self.newCatalogButton.hide()
|
|
self.backCatalogButton.hide()
|
|
self.loyaltyCatalogButton.hide()
|
|
self.emblemCatalogButton.hide()
|
|
|
|
def hideDummyTabs(self):
|
|
self.newCatalogButton2.hide()
|
|
self.backCatalogButton2.hide()
|
|
self.loyaltyCatalogButton2.hide()
|
|
self.emblemCatalogButton2.hide()
|
|
if self.numNewPages > 0:
|
|
self.newCatalogButton.show()
|
|
if self.numBackPages > 0:
|
|
self.backCatalogButton.show()
|
|
if self.numLoyaltyPages > 0:
|
|
self.loyaltyCatalogButton.show()
|
|
if self.numEmblemPages > 0:
|
|
self.emblemCatalogButton.show()
|
|
|
|
def packPages(self, panelList, pageList, prefix):
|
|
i = 0
|
|
j = 0
|
|
numPages = 0
|
|
pageName = prefix + '_page%d' % numPages
|
|
for item in panelList:
|
|
if i == 0 and j == 0:
|
|
numPages += 1
|
|
pageName = prefix + '_page%d' % numPages
|
|
page = self.base.attachNewNode(pageName)
|
|
pageList.append(page)
|
|
item.reparentTo(page)
|
|
item.setPos(CatalogPanelCenters[i][j])
|
|
itemList = self.panelDict.get(page.get_key(), [])
|
|
itemList.append(item)
|
|
self.panelDict[page.get_key()] = itemList
|
|
j += 1
|
|
if j == NUM_CATALOG_COLS:
|
|
j = 0
|
|
i += 1
|
|
if i == NUM_CATALOG_ROWS:
|
|
i = 0
|
|
|
|
return numPages
|
|
|
|
def load(self, guiItems, guiButton, guiBack):
|
|
self.pageIndex = -1
|
|
self.maxPageIndex = 0
|
|
self.numNewPages = 0
|
|
self.numBackPages = 5
|
|
self.numLoyaltyPages = 0
|
|
self.viewing = 'New'
|
|
self.panelList = []
|
|
self.backPanelList = []
|
|
self.pageList = []
|
|
self.backPageList = []
|
|
self.loyaltyPanelList = []
|
|
self.loyaltyPageList = []
|
|
self.emblemPanelList = []
|
|
self.emblemPageList = []
|
|
self.panelDict = {}
|
|
self.visiblePanels = []
|
|
self.responseDialog = None
|
|
catalogBase = guiItems.find('**/catalog_base')
|
|
self.base = DirectLabel(self, relief=None, image=catalogBase)
|
|
newDown = guiItems.find('**/new1')
|
|
newUp = guiItems.find('**/new2')
|
|
backDown = guiItems.find('**/previous2')
|
|
backUp = guiItems.find('**/previous1')
|
|
giftToggleUp = guiItems.find('**/giftButtonUp')
|
|
giftToggleDown = guiItems.find('**/giftButtonDown')
|
|
giftFriends = guiItems.find('**/gift_names')
|
|
oldLift = 0.4
|
|
lift = 0.4
|
|
liftDiff = lift - oldLift
|
|
lift2 = 0.05
|
|
smash = 0.75
|
|
priceScale = 0.15
|
|
emblemIcon = loader.loadModel('phase_3.5/models/gui/tt_m_gui_gen_emblemIcons')
|
|
silverModel = emblemIcon.find('**/tt_t_gui_gen_emblemSilver')
|
|
goldModel = emblemIcon.find('**/tt_t_gui_gen_emblemGold')
|
|
self.silverLabel = DirectLabel(parent=self, relief=None, pos=(1.05, 0, -0.6), scale=priceScale, image=silverModel, image_pos=(-0.4, 0, 0.4), text=str(localAvatar.emblems[ToontownGlobals.EmblemTypes.Silver]), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
|
|
base.silverLabel = self.silverLabel
|
|
self.goldLabel = DirectLabel(parent=self, relief=None, pos=(1.05, 0, -0.8), scale=priceScale, image=goldModel, image_pos=(-0.4, 0, 0.4), text=str(localAvatar.emblems[ToontownGlobals.EmblemTypes.Gold]), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
|
|
base.goldLabel = self.goldLabel
|
|
if not base.cr.wantEmblems:
|
|
self.hideEmblems()
|
|
self.newCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.17), frameSize=(-0.2,
|
|
0.25,
|
|
0.45,
|
|
1.2), image=[newDown,
|
|
newDown,
|
|
newDown,
|
|
newUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.4 - lift, 0.13), text3_pos=(-0.4 - lift, 0.1), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.newCatalogButton.hide()
|
|
self.newCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.17), frameSize=(-0.2,
|
|
0.25,
|
|
0.45,
|
|
1.2), image=newDown, image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.4 - lift, 0.13), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.newCatalogButton2.hide()
|
|
self.backCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.269), frameSize=(-0.2,
|
|
0.25,
|
|
-0.2,
|
|
0.4), image=[backDown,
|
|
backDown,
|
|
backDown,
|
|
backUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.25 - lift, 0.132), text3_pos=(0.25 - lift, 0.112), text_scale=TTLocalizer.CSbackCatalogButton, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0))
|
|
self.backCatalogButton.hide()
|
|
self.backCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.269), frameSize=(-0.2,
|
|
0.25,
|
|
-0.2,
|
|
0.4), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), image=backDown, pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.25 - lift, 0.132), text_scale=TTLocalizer.CSbackCatalogButton, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0))
|
|
self.backCatalogButton2.hide()
|
|
self.loyaltyCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.469), frameSize=(-0.2,
|
|
0.25,
|
|
-0.85,
|
|
-0.3), image=[newDown,
|
|
newDown,
|
|
newDown,
|
|
newUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.4 + lift), pressEffect=0, command=self.showLoyaltyItems, text=TTLocalizer.CatalogLoyalty, text_font=ToontownGlobals.getSignFont(), text_pos=(1.0 - lift, 0.132), text3_pos=(1.0 - lift, 0.112), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.loyaltyCatalogButton.hide()
|
|
self.loyaltyCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.469), frameSize=(-0.2,
|
|
0.25,
|
|
-0.85,
|
|
-0.3), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.4 + lift), image=newDown, pressEffect=0, command=self.showLoyaltyItems, text=TTLocalizer.CatalogLoyalty, text_font=ToontownGlobals.getSignFont(), text_pos=(1.0 - lift, 0.132), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.loyaltyCatalogButton2.hide()
|
|
self.emblemCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 1.05), frameSize=(-0.2,
|
|
0.25,
|
|
-2.0,
|
|
-1.45), image=[backDown,
|
|
backDown,
|
|
backDown,
|
|
backUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.9 + lift), pressEffect=0, command=self.showEmblemItems, text=TTLocalizer.CatalogEmblem, text_font=ToontownGlobals.getSignFont(), text_pos=(1.75, 0.132), text3_pos=(1.75, 0.112), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.emblemCatalogButton.hide()
|
|
self.emblemCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 1.05), frameSize=(-0.2,
|
|
0.25,
|
|
-2.0,
|
|
-1.45), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.9 + lift), image=backDown, pressEffect=0, command=self.showEmblemItems, text=TTLocalizer.CatalogEmblem, text_font=ToontownGlobals.getSignFont(), text_pos=(1.75, 0.132), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
|
|
self.emblemCatalogButton2.hide()
|
|
self.__makeFFlist()
|
|
if len(self.ffList) > 0:
|
|
if config.GetBool('want-gifting', True):
|
|
self.giftToggle = DirectButton(self.base, relief=None, pressEffect=0, image=(giftToggleUp, giftToggleDown, giftToggleUp), image_scale=(1.0, 1, 0.7), command=self.__giftToggle, text=TTLocalizer.CatalogGiftToggleOff, text_font=ToontownGlobals.getSignFont(), text_pos=TTLocalizer.CSgiftTogglePos, text_scale=TTLocalizer.CSgiftToggle, text_fg=(0.353, 0.627, 0.627, 1.0), text3_fg=(0.15, 0.3, 0.3, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0), image_color=Vec4(1.0, 1.0, 0.2, 1.0), image1_color=Vec4(0.9, 0.85, 0.2, 1.0), image2_color=Vec4(0.9, 0.85, 0.2, 1.0), image3_color=Vec4(0.5, 0.45, 0.2, 1.0))
|
|
self.giftToggle.setPos(0.0, 0, -0.035)
|
|
self.giftLabel = DirectLabel(self.base, relief=None, image=giftFriends, image_scale=(1.15, 1, 1.14), text=' ', text_font=ToontownGlobals.getSignFont(), text_pos=(1.2, -0.97), text_scale=0.07, text_fg=(0.392, 0.549, 0.627, 1.0), sortOrder=100, textMayChange=1)
|
|
self.giftLabel.setPos(-0.15, 0, 0.08)
|
|
self.giftLabel.hide()
|
|
self.friendLabel = DirectLabel(self.base, relief=None, text='Friend Name', text_font=ToontownGlobals.getSignFont(), text_pos=(-0.25, 0.132), text_scale=0.068, text_align=TextNode.ALeft, text_fg=(0.992, 0.949, 0.327, 1.0), sortOrder=100, textMayChange=1)
|
|
self.friendLabel.setPos(0.5, 0, -0.42)
|
|
self.friendLabel.hide()
|
|
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=None, numItemsVisible=8, items=[])
|
|
self.scrollList.setPos(1.2, 0, -0.58)
|
|
self.scrollList.setScale(1.5)
|
|
self.scrollList.hide()
|
|
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()
|
|
friendId = self.ffList[0]
|
|
self.__chooseFriend(self.ffList[0][0], self.ffList[0][1])
|
|
self.update()
|
|
self.createdGiftGui = 1
|
|
for i in range(4):
|
|
self.newCatalogButton.component('text%d' % i).setR(90)
|
|
self.newCatalogButton2.component('text%d' % i).setR(90)
|
|
self.backCatalogButton.component('text%d' % i).setR(90)
|
|
self.backCatalogButton2.component('text%d' % i).setR(90)
|
|
self.loyaltyCatalogButton.component('text%d' % i).setR(90)
|
|
self.loyaltyCatalogButton2.component('text%d' % i).setR(90)
|
|
self.emblemCatalogButton.component('text%d' % i).setR(90)
|
|
self.emblemCatalogButton2.component('text%d' % i).setR(90)
|
|
|
|
self.squares = [[],
|
|
[],
|
|
[],
|
|
[]]
|
|
for i in range(NUM_CATALOG_ROWS):
|
|
for j in range(NUM_CATALOG_COLS):
|
|
square = guiItems.find('**/square%d%db' % (i + 1, j + 1))
|
|
label = DirectLabel(self.base, image=square, relief=None, state='normal')
|
|
self.squares[i].append(label)
|
|
|
|
def priceSort(a, b, type):
|
|
priceA = a.getPrice(type)
|
|
priceB = b.getPrice(type)
|
|
return priceB - priceA
|
|
|
|
itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog
|
|
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly))
|
|
itemList.reverse()
|
|
allClosetItems = CatalogFurnitureItem.getAllClosets()
|
|
isMaxClosetOfferred = False
|
|
for item in itemList:
|
|
if item in allClosetItems and item.furnitureType in CatalogFurnitureItem.MaxClosetIds:
|
|
isMaxClosetOfferred = True
|
|
break
|
|
|
|
for item in itemList:
|
|
if isinstance(item, CatalogInvalidItem.CatalogInvalidItem):
|
|
self.notify.warning('skipping catalog invalid item %s' % item)
|
|
continue
|
|
if isMaxClosetOfferred and item in allClosetItems and item.furnitureType not in CatalogFurnitureItem.MaxClosetIds:
|
|
continue
|
|
if item.loyaltyRequirement() != 0:
|
|
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
|
|
elif item.getEmblemPrices():
|
|
self.emblemPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly, parentCatalogScreen=self))
|
|
else:
|
|
self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly, parentCatalogScreen=self))
|
|
|
|
itemList = base.localAvatar.backCatalog
|
|
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder))
|
|
itemList.reverse()
|
|
for item in itemList:
|
|
if isinstance(item, CatalogInvalidItem.CatalogInvalidItem):
|
|
self.notify.warning('skipping catalog invalid item %s' % item)
|
|
continue
|
|
if isMaxClosetOfferred and item in allClosetItems and item.furnitureType not in CatalogFurnitureItem.MaxClosetIds:
|
|
continue
|
|
if item.loyaltyRequirement() != 0:
|
|
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
|
|
elif item.getEmblemPrices():
|
|
self.emblemPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackOrder, parentCatalogScreen=self))
|
|
else:
|
|
self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder, parentCatalogScreen=self))
|
|
|
|
numPages = self.packPages(self.panelList, self.pageList, 'new')
|
|
self.setNumNewPages(numPages)
|
|
numPages = self.packPages(self.backPanelList, self.backPageList, 'back')
|
|
self.setNumBackPages(numPages)
|
|
numPages = self.packPages(self.loyaltyPanelList, self.loyaltyPageList, 'loyalty')
|
|
self.setNumLoyaltyPages(numPages)
|
|
numPages = self.packPages(self.emblemPanelList, self.emblemPageList, 'emblem')
|
|
self.setNumEmblemPages(numPages)
|
|
currentWeek = base.localAvatar.catalogScheduleCurrentWeek - 1
|
|
if currentWeek < 57:
|
|
seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
elif currentWeek < 65:
|
|
seriesNumber = 6
|
|
weekNumber = currentWeek - 56
|
|
else:
|
|
seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 2
|
|
weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
geom = NodePath('cover')
|
|
cover = guiItems.find('**/cover')
|
|
maxSeries = ToontownGlobals.CatalogNumWeeks / ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
coverSeries = (seriesNumber - 1) % maxSeries + 1
|
|
coverPicture = cover.find('**/cover_picture%s' % coverSeries)
|
|
if not coverPicture.isEmpty():
|
|
coverPicture.reparentTo(geom)
|
|
bottomSquare = cover.find('**/cover_bottom')
|
|
topSquare = guiItems.find('**/square12b2')
|
|
if seriesNumber == 1:
|
|
topSquare.setColor(0.651, 0.404, 0.322, 1.0)
|
|
bottomSquare.setColor(0.655, 0.522, 0.263, 1.0)
|
|
else:
|
|
topSquare.setColor(0.651, 0.404, 0.322, 1.0)
|
|
bottomSquare.setColor(0.655, 0.522, 0.263, 1.0)
|
|
bottomSquare.reparentTo(geom)
|
|
topSquare.reparentTo(geom)
|
|
cover.find('**/clarabelle_text').reparentTo(geom)
|
|
cover.find('**/blue_circle').reparentTo(geom)
|
|
cover.find('**/clarabelle').reparentTo(geom)
|
|
cover.find('**/circle_green').reparentTo(geom)
|
|
self.cover = DirectLabel(self.base, relief=None, geom=geom)
|
|
self.catalogNumber = DirectLabel(self.cover, relief=None, scale=0.2, pos=(-0.22, 0, -0.33), text='#%d' % weekNumber, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont())
|
|
self.catalogSeries = DirectLabel(self.cover, relief=None, scale=(0.22, 1, 0.18), pos=(-0.76, 0, -0.9), text=TTLocalizer.CatalogSeriesLabel % seriesNumber, text_fg=(0.9, 0.9, 0.4, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont())
|
|
self.catalogSeries.setShxz(0.4)
|
|
self.rings = DirectLabel(self.base, relief=None, geom=guiItems.find('**/rings'))
|
|
self.clarabelleFrame = DirectLabel(self, relief=None, image=guiItems.find('**/clarabelle_frame'))
|
|
hangupGui = guiItems.find('**/hangup')
|
|
hangupRolloverGui = guiItems.find('**/hangup_rollover')
|
|
self.hangup = DirectButton(base.a2dBottomRight, relief=None, pos=(-0.158, 0, 0.14), scale=(0.7, 0.7, 0.7), image=[hangupGui,
|
|
hangupRolloverGui,
|
|
hangupRolloverGui,
|
|
hangupGui], text=['', TTLocalizer.CatalogHangUp, TTLocalizer.CatalogHangUp], text_fg=Vec4(1), text_scale=0.07, text_pos=(0.0, 0.14), command=self.hangUp)
|
|
self.beanBank = DirectLabel(self, relief=None, image=guiItems.find('**/bean_bank'), text=str(base.localAvatar.getMoney() + base.localAvatar.getBankMoney()), text_align=TextNode.ARight, text_scale=0.11, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.75, -0.81), text_font=ToontownGlobals.getSignFont())
|
|
nextUp = guiItems.find('**/arrow_up')
|
|
nextRollover = guiItems.find('**/arrow_Rollover')
|
|
nextDown = guiItems.find('**/arrow_Down')
|
|
prevUp = guiItems.find('**/arrowUp')
|
|
prevDown = guiItems.find('**/arrowDown1')
|
|
prevRollover = guiItems.find('**/arrowRollover')
|
|
self.nextPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[nextUp,
|
|
nextDown,
|
|
nextRollover,
|
|
nextUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showNextPage)
|
|
self.backPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[prevUp,
|
|
prevDown,
|
|
prevRollover,
|
|
prevUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showBackPage)
|
|
self.backPageButton.hide()
|
|
self.pageLabel = DirectLabel(self.base, relief=None, pos=(-1.33, 0, -0.9), scale=0.06, text=TTLocalizer.CatalogPagePrefix, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
|
|
self.loadClarabelle()
|
|
return
|
|
|
|
def loadClarabelle(self):
|
|
self.cRender = NodePath('cRender')
|
|
self.cCamera = self.cRender.attachNewNode('cCamera')
|
|
self.cCamNode = Camera('cCam')
|
|
self.cLens = PerspectiveLens()
|
|
self.cLens.setFov(40, 40)
|
|
self.cLens.setNear(0.1)
|
|
self.cLens.setFar(100.0)
|
|
self.cCamNode.setLens(self.cLens)
|
|
self.cCamNode.setScene(self.cRender)
|
|
self.cCam = self.cCamera.attachNewNode(self.cCamNode)
|
|
self.cDr = base.win.makeDisplayRegion(0.56, 0.81, 0.52, 0.85)
|
|
self.cDr.setSort(1)
|
|
self.cDr.setClearDepthActive(1)
|
|
self.cDr.setClearColorActive(1)
|
|
self.cDr.setClearColor(Vec4(0.3, 0.3, 0.3, 1))
|
|
self.cDr.setCamera(self.cCam)
|
|
self.clarabelle = Actor.Actor('phase_5.5/models/char/Clarabelle-zero', {'listen': 'phase_5.5/models/char/Clarabelle-listens'})
|
|
self.clarabelle.loop('listen')
|
|
self.clarabelle.find('**/eyes').setBin('fixed', 0)
|
|
self.clarabelle.find('**/pupilL').setBin('fixed', 1)
|
|
self.clarabelle.find('**/pupilR').setBin('fixed', 1)
|
|
self.clarabelle.find('**/glassL').setBin('fixed', 2)
|
|
self.clarabelle.find('**/glassR').setBin('fixed', 2)
|
|
switchboard = loader.loadModel('phase_5.5/models/estate/switchboard')
|
|
switchboard.reparentTo(self.clarabelle)
|
|
switchboard.setPos(1, -1.6, 0)
|
|
switchboard.setH(30)
|
|
room = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room.bam')
|
|
room.reparentTo(self.clarabelle)
|
|
room.find('**/genderProps').removeNode()
|
|
room.find('**/bodyWalls').removeNode()
|
|
room.find('**/bodyProps').removeNode()
|
|
room.find('**/colorWalls').removeNode()
|
|
room.find('**/colorProps').removeNode()
|
|
room.find('**/clothWalls').removeNode()
|
|
room.find('**/nameWalls').removeNode()
|
|
room.find('**/nameProps').removeNode()
|
|
room.find('**/spotlight').removeNode()
|
|
room.setPos(5.5, 1.25, 0)
|
|
room.setH(330)
|
|
self.clarabelle.reparentTo(self.cRender)
|
|
self.clarabelle.setPosHprScale(-0.52, 6.13, -3.81, 85, 0.0, 0.0, 1.0, 1.0, 1.0)
|
|
self.clarabelleFrame.setPosHprScale(-0.01, 0.0, -0.01, 0.0, 0.0, 0.0, 1.02, 1.0, 1.02)
|
|
|
|
def reload(self):
|
|
for panel in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
|
|
panel.destroy()
|
|
|
|
def priceSort(a, b, type):
|
|
priceA = a.getPrice(type)
|
|
priceB = b.getPrice(type)
|
|
return priceB - priceA
|
|
|
|
self.pageIndex = -1
|
|
self.maxPageIndex = 0
|
|
self.numNewPages = 0
|
|
self.numBackPages = 5
|
|
self.numLoyaltyPages = 0
|
|
self.viewing = 'New'
|
|
self.panelList = []
|
|
self.backPanelList = []
|
|
self.loyaltyList = []
|
|
self.pageList = []
|
|
self.backPageList = []
|
|
self.loyaltyPanelList = []
|
|
self.loyaltyPageList = []
|
|
self.panelDict = {}
|
|
self.visiblePanels = []
|
|
itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog
|
|
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly))
|
|
itemList.reverse()
|
|
for item in itemList:
|
|
if item.loyaltyRequirement() != 0:
|
|
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
|
|
else:
|
|
self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly))
|
|
|
|
itemList = base.localAvatar.backCatalog
|
|
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder))
|
|
itemList.reverse()
|
|
for item in itemList:
|
|
if item.loyaltyRequirement() != 0:
|
|
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
|
|
else:
|
|
self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder))
|
|
|
|
numPages = self.packPages(self.panelList, self.pageList, 'new')
|
|
self.setNumNewPages(numPages)
|
|
numPages = self.packPages(self.backPanelList, self.backPageList, 'back')
|
|
self.setNumBackPages(numPages)
|
|
numPages = self.packPages(self.loyaltyPanelList, self.loyaltyPageList, 'loyalty')
|
|
self.setNumLoyaltyPages(numPages)
|
|
seriesNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) / ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
self.catalogSeries['text'] = Localizer.CatalogSeriesLabel % seriesNumber
|
|
weekNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) % ToontownGlobals.CatalogNumWeeksPerSeries + 1
|
|
self.catalogNumber['text'] = '#%d' % weekNumber
|
|
self.enableBackorderCatalogButton()
|
|
self.setMaxPageIndex(self.numNewPages)
|
|
self.setPageIndex(-1)
|
|
self.showPageItems()
|
|
|
|
def unload(self):
|
|
taskMgr.remove('clearClarabelleChat')
|
|
taskMgr.remove('postGoodbyeHangUp')
|
|
taskMgr.remove('clarabelleGreeting')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
taskMgr.remove('clarabelleAskAnythingElse')
|
|
if self.giftAvatar:
|
|
base.cr.cancelAvatarDetailsRequest(self.giftAvatar)
|
|
self.hide()
|
|
self.hangup.hide()
|
|
self.destroy()
|
|
del self.base
|
|
del self.squares
|
|
for panel in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
|
|
panel.destroy()
|
|
|
|
del self.panelList
|
|
del self.backPanelList
|
|
del self.cover
|
|
del self.rings
|
|
del self.clarabelleFrame
|
|
del self.hangup
|
|
del self.beanBank
|
|
del self.silverLabel
|
|
del self.goldLabel
|
|
del self.nextPageButton
|
|
del self.backPageButton
|
|
del self.newCatalogButton
|
|
del self.newCatalogButton2
|
|
del self.backCatalogButton
|
|
del self.backCatalogButton2
|
|
del self.loyaltyCatalogButton
|
|
del self.loyaltyCatalogButton2
|
|
del self.pageLabel
|
|
if self.createdGiftGui:
|
|
del self.giftToggle
|
|
del self.giftLabel
|
|
del self.friendLabel
|
|
del self.scrollList
|
|
self.unloadClarabelle()
|
|
if self.responseDialog:
|
|
self.responseDialog.cleanup()
|
|
self.responseDialog = None
|
|
if self.giftAvatar:
|
|
if hasattr(self.giftAvatar, 'doId'):
|
|
self.giftAvatar.delete()
|
|
else:
|
|
self.giftAvatar = None
|
|
return
|
|
|
|
def unloadClarabelle(self):
|
|
base.win.removeDisplayRegion(self.cDr)
|
|
del self.cRender
|
|
del self.cCamera
|
|
del self.cCamNode
|
|
del self.cLens
|
|
del self.cCam
|
|
del self.cDr
|
|
self.clarabelle.cleanup()
|
|
del self.clarabelle
|
|
|
|
if self.clarabelleChatBalloon:
|
|
self.clarabelleChatBalloon.removeNode()
|
|
del self.clarabelleChatBalloon
|
|
if self.clarabelleGreetingSfx:
|
|
for sound in self.clarabelleGreetingSfx:
|
|
del sound
|
|
del self.clarabelleGreetingSfx
|
|
if self.clarabelleGoodbyeSfx:
|
|
for sound in self.clarabelleGoodbyeSfx:
|
|
del sound
|
|
del self.clarabelleGoodbyeSfx
|
|
if self.clarabelleErrorSfx:
|
|
for sound in self.clarabelleGoodbyeSfx:
|
|
del sound
|
|
del self.clarabelleGoodbyeSfx
|
|
if self.clarabelleChatterSfx:
|
|
for sound in self.clarabelleChatterSfx:
|
|
del sound
|
|
del self.clarabelleChatterSfx
|
|
|
|
def hangUp(self):
|
|
if hasattr(self, 'giftAvatar') and self.giftAvatar:
|
|
self.giftAvatar.disable()
|
|
self.setClarabelleChat(random.choice(TTLocalizer.CatalogGoodbyeList), type='goodbye')
|
|
self.setPageIndex(-1)
|
|
self.showPageItems()
|
|
self.nextPageButton.hide()
|
|
self.backPageButton.hide()
|
|
self.newCatalogButton.hide()
|
|
self.newCatalogButton2.hide()
|
|
self.backCatalogButton.hide()
|
|
self.backCatalogButton2.hide()
|
|
self.loyaltyCatalogButton.hide()
|
|
self.loyaltyCatalogButton2.hide()
|
|
self.emblemCatalogButton.hide()
|
|
self.emblemCatalogButton2.hide()
|
|
self.hangup.hide()
|
|
taskMgr.remove('clarabelleGreeting')
|
|
taskMgr.remove('clarabelleHelpText1')
|
|
taskMgr.remove('clarabelleAskAnythingElse')
|
|
|
|
def postGoodbyeHangUp(task):
|
|
messenger.send(self['doneEvent'])
|
|
self.unload()
|
|
|
|
taskMgr.doMethodLater(1.5, postGoodbyeHangUp, 'postGoodbyeHangUp')
|
|
|
|
def remoteUpdate(self):
|
|
self.update()
|
|
|
|
def update(self, lock = 0):
|
|
if not hasattr(self.giftAvatar, 'doId'):
|
|
if self.gifting == 1:
|
|
self.__giftToggle()
|
|
if hasattr(self, 'beanBank'):
|
|
self.beanBank['text'] = str(base.localAvatar.getTotalMoney())
|
|
if lock == 0:
|
|
for item in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
|
|
if type(item) != type(''):
|
|
item.updateButtons(self.gifting)
|
|
|
|
def __handlePurchaseRequest(self, item):
|
|
item.requestPurchase(self['phone'], self.__handlePurchaseResponse)
|
|
taskMgr.remove('clarabelleAskAnythingElse')
|
|
|
|
def __handleGiftPurchaseRequest(self, item):
|
|
item.requestGiftPurchase(self['phone'], self.frienddoId, self.__handleGiftPurchaseResponse)
|
|
taskMgr.remove('clarabelleAskAnythingElse')
|
|
|
|
def __handlePurchaseResponse(self, retCode, item):
|
|
if retCode == ToontownGlobals.P_UserCancelled:
|
|
self.update()
|
|
return
|
|
self.setClarabelleChat(item.getRequestPurchaseErrorText(retCode), item.getRequestPurchaseErrorTextTimeout())
|
|
|
|
def __handleGiftPurchaseResponse(self, retCode, item):
|
|
if retCode == ToontownGlobals.P_UserCancelled:
|
|
return
|
|
if self.isEmpty() or self.isHidden():
|
|
return
|
|
self.setClarabelleChat(item.getRequestGiftPurchaseErrorText(retCode) % self.receiverName)
|
|
self.__loadFriend()
|
|
|
|
def askAnythingElse(task):
|
|
self.setClarabelleChat(TTLocalizer.CatalogAnythingElse)
|
|
|
|
if retCode >= 0:
|
|
taskMgr.doMethodLater(8, askAnythingElse, 'clarabelleAskAnythingElse')
|
|
|
|
def __clearDialog(self, event):
|
|
self.responseDialog.cleanup()
|
|
self.responseDialog = None
|
|
return
|
|
|
|
def setClarabelleChat(self, str, timeout = 6, type = None):
|
|
self.clearClarabelleChat()
|
|
|
|
# Clarabelle can talk now! Let's give her some variation.
|
|
if type == 'greeting':
|
|
if not self.clarabelleGreetingSfx:
|
|
clarabelleGreeting1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_1.ogg')
|
|
clarabelleGreeting2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
|
|
self.clarabelleGreetingSfx = [clarabelleGreeting1, clarabelleGreeting2]
|
|
base.playSfx(random.choice(self.clarabelleGreetingSfx))
|
|
elif type == 'goodbye':
|
|
if not self.clarabelleGoodbyeSfx:
|
|
clarabelleGoodbye1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_2.ogg')
|
|
clarabelleGoodbye2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_3.ogg')
|
|
clarabelleGoodbye3 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_4.ogg')
|
|
self.clarabelleGoodbyeSfx = [clarabelleGoodbye1, clarabelleGoodbye2, clarabelleGoodbye3]
|
|
base.playSfx(random.choice(self.clarabelleGoodbyeSfx))
|
|
elif type == 'error':
|
|
if not self.clarabelleErrorSfx:
|
|
clarabelleError1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
|
|
self.clarabelleChatterSfx = [clarabelleError1]
|
|
base.playSfx(random.choice(self.clarabelleErrorSfx))
|
|
else:
|
|
# These are currently placeholders.
|
|
if not self.clarabelleChatterSfx:
|
|
clarabelleChatter1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
|
|
clarabelleChatter2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_gen_2.ogg')
|
|
self.clarabelleChatterSfx = [clarabelleChatter1, clarabelleChatter2]
|
|
base.playSfx(random.choice(self.clarabelleChatterSfx))
|
|
|
|
if not self.clarabelleChatBalloon:
|
|
self.clarabelleChatBalloon = loader.loadModel('phase_3/models/props/chatbox')
|
|
self.clarabelleChat = ChatBalloon(self.clarabelleChatBalloon)
|
|
chatNode = self.clarabelleChat.generate(str, ToontownGlobals.getInterfaceFont())[0]
|
|
self.clarabelleChatNP = self.attachNewNode(chatNode.node(), 1000)
|
|
self.clarabelleChatNP.setScale(0.08)
|
|
self.clarabelleChatNP.setPos(0.7, 0, 0.6)
|
|
if timeout:
|
|
taskMgr.doMethodLater(timeout, self.clearClarabelleChat, 'clearClarabelleChat')
|
|
|
|
def clearClarabelleChat(self, task = None):
|
|
taskMgr.remove('clearClarabelleChat')
|
|
if self.clarabelleChatNP:
|
|
self.clarabelleChatNP.removeNode()
|
|
self.clarabelleChatNP = None
|
|
del self.clarabelleChat
|
|
return
|
|
|
|
def __moneyChange(self, money):
|
|
if self.gifting > 0:
|
|
self.update(1)
|
|
else:
|
|
self.update(0)
|
|
|
|
def __bankMoneyChange(self, bankMoney):
|
|
if self.gifting > 0:
|
|
self.update(1)
|
|
else:
|
|
self.update(0)
|
|
|
|
def __emblemChange(self, newEmblems):
|
|
self.silverLabel['text'] = str(newEmblems[0])
|
|
self.goldLabel['text'] = str(newEmblems[1])
|
|
|
|
def showEmblems(self):
|
|
if base.cr.wantEmblems:
|
|
self.silverLabel.show()
|
|
self.goldLabel.show()
|
|
|
|
def hideEmblems(self):
|
|
self.silverLabel.hide()
|
|
self.goldLabel.hide()
|
|
|
|
def checkFamily(self, doId):
|
|
test = 0
|
|
for familyMember in base.cr.avList:
|
|
if familyMember.id == doId:
|
|
test = 1
|
|
|
|
return test
|
|
|
|
def __makeFFlist(self):
|
|
for familyMember in base.cr.avList:
|
|
if familyMember.id != base.localAvatar.doId:
|
|
newFF = (familyMember.id, familyMember.name, NametagGroup.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 = NametagGroup.CCSpeedChat
|
|
if flags & ToontownGlobals.FriendChat:
|
|
colorCode = NametagGroup.CCFreeChat
|
|
newFF = (friendPair[0], handle.getName(), colorCode)
|
|
self.ffList.append(newFF)
|
|
else:
|
|
self.notify.warning('Bad Handle for getName in makeFFlist')
|
|
|
|
hasManager = hasattr(base.cr, 'playerFriendsManager')
|
|
if hasManager:
|
|
for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars():
|
|
handle = base.cr.playerFriendsManager.getAvHandleFromId(avatarId)
|
|
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId)
|
|
playerInfo = base.cr.playerFriendsManager.getFriendInfo(playerId)
|
|
freeChat = playerInfo.understandableYesNo
|
|
if handle and not self.checkFamily(avatarId):
|
|
if hasattr(handle, 'getName'):
|
|
colorCode = NametagGroup.CCSpeedChat
|
|
if freeChat:
|
|
colorCode = NametagGroup.CCFreeChat
|
|
newFF = (avatarId, 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.getNameFg(colorCode, PGButton.SInactive)
|
|
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')
|
|
self.frienddoId = friendId
|
|
self.receiverName = friendName
|
|
self.friendLabel['text'] = TTLocalizer.CatalogGiftTo % self.receiverName
|
|
self.__loadFriend()
|
|
|
|
def __loadFriend(self):
|
|
if self.allowGetDetails == 0:
|
|
CatalogScreen.notify.warning('smashing requests')
|
|
if self.frienddoId and self.allowGetDetails:
|
|
if self.giftAvatar:
|
|
if hasattr(self.giftAvatar, 'doId'):
|
|
self.giftAvatar.disable()
|
|
self.giftAvatar.delete()
|
|
self.giftAvatar = None
|
|
self.giftAvatar = DistributedToon.DistributedToon(base.cr)
|
|
self.giftAvatar.doId = self.frienddoId
|
|
self.giftAvatar.forceAllowDelayDelete()
|
|
self.giftAvatar.generate()
|
|
base.cr.getAvatarDetails(self.giftAvatar, self.__handleAvatarDetails, 'DistributedToon')
|
|
self.gotAvatar = 0
|
|
self.allowGetDetails = 0
|
|
self.scrollList['state'] = DGG.DISABLED
|
|
return
|
|
|
|
def __handleAvatarDetails(self, gotData, avatar, dclass):
|
|
if self.giftAvatar.doId != avatar.doId or gotData == 0:
|
|
CatalogScreen.notify.error('Get Gift Avatar Failed')
|
|
self.gotAvatar = 0
|
|
return
|
|
else:
|
|
self.gotAvatar = 1
|
|
self.giftAvatar = avatar
|
|
self.scrollList['state'] = DGG.NORMAL
|
|
self.allowGetDetails = 1
|
|
self.update()
|
|
|
|
def __giftToggle(self):
|
|
messenger.send('wakeup')
|
|
if self.gifting == -1:
|
|
self.gifting = 1
|
|
self.giftLabel.show()
|
|
self.friendLabel.show()
|
|
self.scrollList.show()
|
|
self.hideEmblems()
|
|
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOn
|
|
self.__loadFriend()
|
|
else:
|
|
self.gifting = -1
|
|
self.giftLabel.hide()
|
|
self.friendLabel.hide()
|
|
self.scrollList.hide()
|
|
self.showEmblems()
|
|
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff
|
|
self.update()
|
|
|
|
def __handleUDack(self, caller = None):
|
|
taskMgr.remove('ackTimeOut')
|
|
if hasattr(self, 'giftToggle') and self.giftToggle:
|
|
self.giftToggle['state'] = DGG.NORMAL
|
|
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff
|
|
|
|
def __handleNoAck(self, caller = None):
|
|
if hasattr(self, 'giftToggle') and self.giftToggle:
|
|
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleNoAck
|