from panda3d.core import * from direct.directnotify import DirectNotifyGlobal from direct.interval.IntervalGlobal import * from direct.distributed import DistributedObject from direct.gui.DirectGui import * from otp.otpbase import PythonUtil from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.toon import Toon from toontown.toon import ToonDNA from toontown.spellbook.MagicWordIndex import * import ShtikerPage PageMode = PythonUtil.Enum('Words, IDs, Acc1, Acc2') class WordPage(ShtikerPage.ShtikerPage): notify = DirectNotifyGlobal.directNotify.newCategory('WordPage') def __init__(self): ShtikerPage.ShtikerPage.__init__(self) def load(self): ShtikerPage.ShtikerPage.load(self) self.wordsTabPage = WordsTabPage(self) self.wordsTabPage.hide() self.clothingTabPage = ClothingTabPage(self) self.clothingTabPage.hide() self.acc1Page = AccTabPage1(self) self.acc1Page.hide() self.acc2Page = AccTabPage2(self) self.acc2Page.hide() titleHeight = 0.61 self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.SpellbookPageTitle, text_scale=0.12, pos=(0, 0, titleHeight)) normalColor = (1, 1, 1, 1) clickColor = (0.8, 0.8, 0, 1) rolloverColor = (0.15, 0.82, 1.0, 1) diabledColor = (1.0, 0.98, 0.15, 1) gui = loader.loadModel('phase_3.5/models/gui/fishingBook') self.wordsTab = DirectButton(parent=self, relief=None, text=TTLocalizer.WordPageTabTitle, text_scale=0.063, text_align=TextNode.ALeft, text_pos=(0.0, 0.0, 0.0), image=gui.find('**/tabs/polySurface1'), image_pos=(0.55, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[PageMode.Words], pos=(-0.83, 0, 0.77)) self.idsTab = DirectButton(parent=self, relief=None, text=TTLocalizer.ClothingPageTitle, text_scale=0.065, text_align=TextNode.ALeft, text_pos=(0.0, 0.0, 0.0), image=gui.find('**/tabs/polySurface2'), image_pos=(0.12, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[PageMode.IDs], pos=(-0.36, 0, 0.77)) self.acc1Tab = DirectButton(parent=self, relief=None, text=TTLocalizer.AccessoriesPageHeadTab, text_scale=0.045, text_align=TextNode.ACenter, text_pos=(0.125, 0.035, 0.0), image=gui.find('**/tabs/polySurface2'), image_pos=(0.12, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[PageMode.Acc1], pos=(0.11, 0, 0.77)) self.acc2Tab = DirectButton(parent=self, relief=None, text=TTLocalizer.AccessoriesPageBodyTab, text_scale=0.045, text_align=TextNode.ACenter, text_pos=(0.125, 0.035, 0.0), image=gui.find('**/tabs/polySurface2'), image_pos=(0.12, 1, -0.91), image_hpr=(0, 0, -90), image_scale=(0.033, 0.033, 0.035), image_color=normalColor, image1_color=clickColor, image2_color=rolloverColor, image3_color=diabledColor, text_fg=Vec4(0.2, 0.1, 0, 1), command=self.setMode, extraArgs=[PageMode.Acc2], pos=(0.58, 0, 0.77)) return def enter(self): self.setMode(PageMode.Words, updateAnyways=1) ShtikerPage.ShtikerPage.enter(self) def exit(self): self.clothingTabPage.exit() self.wordsTabPage.exit() self.acc1Page.exit() self.acc2Page.exit() ShtikerPage.ShtikerPage.exit(self) def unload(self): self.wordsTabPage.unload() self.clothingTabPage.unload() self.acc1Page.unload() self.acc2Page.unload() del self.title ShtikerPage.ShtikerPage.unload(self) def setMode(self, mode, updateAnyways = 0): messenger.send('wakeup') if not updateAnyways: if self.mode == mode: return else: self.mode = mode if mode == PageMode.Words: self.mode = PageMode.Words self.title['text'] = TTLocalizer.WordPageTabTitle self.wordsTab['state'] = DGG.DISABLED self.wordsTabPage.enter() self.idsTab['state'] = DGG.NORMAL self.clothingTabPage.exit() self.acc1Tab['state'] = DGG.NORMAL self.acc1Page.exit() self.acc2Tab['state'] = DGG.NORMAL self.acc2Page.exit() elif mode == PageMode.IDs: self.mode = PageMode.IDs self.title['text'] = TTLocalizer.ClothingPageTitle self.wordsTab['state'] = DGG.NORMAL self.wordsTabPage.exit() self.idsTab['state'] = DGG.DISABLED self.clothingTabPage.enter() self.acc1Tab['state'] = DGG.NORMAL self.acc1Page.exit() self.acc2Tab['state'] = DGG.NORMAL self.acc2Page.exit() elif mode == PageMode.Acc1: self.mode = PageMode.Acc1 self.title['text'] = TTLocalizer.AccessoriesPageHead self.wordsTab['state'] = DGG.NORMAL self.wordsTabPage.exit() self.idsTab['state'] = DGG.NORMAL self.clothingTabPage.exit() self.acc1Tab['state'] = DGG.DISABLED self.acc1Page.enter() self.acc2Tab['state'] = DGG.NORMAL self.acc2Page.exit() elif mode == PageMode.Acc2: self.mode = PageMode.Acc2 self.title['text'] = TTLocalizer.AccessoriesPageBody self.wordsTab['state'] = DGG.NORMAL self.wordsTabPage.exit() self.idsTab['state'] = DGG.NORMAL self.clothingTabPage.exit() self.acc1Tab['state'] = DGG.NORMAL self.acc1Page.exit() self.acc2Tab['state'] = DGG.DISABLED self.acc2Page.enter() else: raise StandardError, 'WordPage::setMode - Invalid Mode %s' % mode class WordsTabPage(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory('WordsTabPage') def __init__(self, parent = aspect2d): self._parent = parent self.currentSizeIndex = None DirectFrame.__init__(self, parent=self._parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0)) self.load() def load(self): self.magicWords = [] self.hiddenMagicWords = [] self.shownMagicWords = [] self.setupWords() gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui') coolbutton = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') guiButton = loader.loadModel('phase_3/models/gui/quit_button') cdrGui = loader.loadModel('phase_3.5/models/gui/tt_m_gui_sbk_codeRedemptionGui') guiClose = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui') self.helpLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.WordPageHelp, text_scale=0.06, text_wordwrap=12, text_align=TextNode.ALeft, textMayChange=1, pos=(0.058, 0, 0.403)) self.searchLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.WordPageSearch, text_scale=0.06, text_wordwrap=12, text_align=TextNode.ACenter, textMayChange=1, pos=(0.439, 0, -0.2)) self.searchBarFrame = DirectFrame(parent=self, relief=None, image=cdrGui.find('**/tt_t_gui_sbk_cdrCodeBox'), pos=(0.439, 0.0, -0.3225), scale=0.7) self.searchBarEntry = DirectEntry(parent=self, relief=None, text_scale=0.06, width=7.75, textMayChange=1, pos=(0.209, 0, -0.3325), text_align=TextNode.ALeft, backgroundFocus=0, focusInCommand=self.toggleEntryFocus) self.searchBarEntry.bind(DGG.TYPE, self.updateWordSearch) self.searchBarEntry.bind(DGG.ERASE, self.updateWordSearch) self.activatorLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.WordPageActivator + TTLocalizer.WordPageNA, text_scale=0.06, text_wordwrap=12, text_align=TextNode.ALeft, textMayChange=1, pos=(0.058, 0, 0.15)) self.totalLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.WordPageTotal + str(len(self.shownMagicWords)), text_scale=0.06, text_wordwrap=12, text_align=TextNode.ALeft, textMayChange=1, pos=(0.058, 0, 0.05)) self.currentLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.WordPageCurrent + TTLocalizer.WordPageNA, text_scale=0.06, text_wordwrap=12, text_align=TextNode.ALeft, textMayChange=1, pos=(0.058, 0, -0.05)) self.copyToChatButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.WordPageCopyToChat, text_scale=0.04, text_pos=(0, -0.01), pos=(0.629, 0.0, -0.5325), command=self.copyToChat) self.infoButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.WordPageMoreInfo, text_scale=0.04, text_pos=(0, -0.01), pos=(0.249, 0.0, -0.5325), command=self.showInfoPanel) self.scrollList = DirectScrolledList(parent=self, forceHeight=0.07, pos=(-0.5, 0, 0), incButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(1.3, 1.3, -1.3), incButton_pos=(0.08, 0, -0.60), incButton_image3_color=Vec4(1, 1, 1, 0.2), decButton_image=(gui.find('**/FndsLst_ScrollUp'), gui.find('**/FndsLst_ScrollDN'), gui.find('**/FndsLst_ScrollUp_Rllvr'), gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(1.3, 1.3, 1.3), decButton_pos=(0.08, 0, 0.52), decButton_image3_color=Vec4(1, 1, 1, 0.2), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.98, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=14, items=self.shownMagicWords) self.slider = DirectSlider(parent=self, range=(len(self.shownMagicWords), 0), scale=(0.7, 0.7, 0.515), pos=(-0.1, 0, -0.045), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) self.magicWordInfo = DirectFrame(parent=self, relief=None, pos=(0.0, 0.0, -0.05), scale=0.9, geom=DGG.getDefaultDialogGeom(), geom_scale=(1.4, 1, 1), geom_color=ToontownGlobals.GlobalDialogColor) self.magicWordTitle = DirectLabel(parent=self.magicWordInfo, relief=None, text=TTLocalizer.WordPageNA, text_scale=0.12, textMayChange=1, pos=(0, 0, 0.3500)) self.magicWordInfoLabel = DirectLabel(parent=self.magicWordInfo, relief=None, text=TTLocalizer.WordPageNA, text_scale=0.06, text_wordwrap=20, text_align=TextNode.ALeft, textMayChange=1, pos=(-0.6, 0, 0.2)) self.magicWordQuitButton = DirectButton(parent=self.magicWordInfo, image=(guiClose.find('**/CloseBtn_UP'), guiClose.find('**/CloseBtn_DN'), guiClose.find('**/CloseBtn_Rllvr'), guiClose.find('**/CloseBtn_UP')), relief=None, scale=1.5, pos=(0.6, 0, -0.4), command=self.hideInfoPanel) self.magicWordInfo.hide() gui.removeNode() coolbutton.removeNode() guiButton.removeNode() cdrGui.removeNode() guiClose.removeNode() def unload(self): for word in self.magicWords + self.hiddenMagicWords + self.shownMagicWords: word.destroy() del word gui = [self.helpLabel, self.searchLabel, self.searchBarFrame, self.searchBarEntry, self.activatorLabel, self.totalLabel, self.currentLabel, self.copyToChatButton, self.infoButton, self.scrollList, self.slider, self.magicWordTitle, self.magicWordInfoLabel, self.magicWordQuitButton, self.magicWordInfo] for dgui in gui: dgui.destroy() del dgui def exit(self): for word in self.magicWords: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL self.activatorLabel['text'] = TTLocalizer.WordPageActivator + base.cr.magicWordManager.chatPrefix + ' (' + str(MagicWordConfig.PREFIX_ALLOWED.index(base.cr.magicWordManager.chatPrefix)) + ')' self.currentLabel['text'] = TTLocalizer.WordPageCurrent + TTLocalizer.WordPageNA self.ignore('mouse1') self.toggleEntryFocus(True) self.searchBarEntry.set('') self.updateWordSearch() self.hideInfoPanel() self.hide() def enter(self): for word in self.magicWords: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL self.activatorLabel['text'] = TTLocalizer.WordPageActivator + base.cr.magicWordManager.chatPrefix + ' (' + str(MagicWordConfig.PREFIX_ALLOWED.index(base.cr.magicWordManager.chatPrefix)) + ')' self.currentLabel['text'] = TTLocalizer.WordPageCurrent + TTLocalizer.WordPageNA self.accept('mouse1', self.toggleEntryFocus, extraArgs=[True]) self.searchBarEntry.set('') self.updateWordSearch() self.hideInfoPanel() self.show() def scrollListTo(self): self.scrollList.scrollTo(int(self.slider['value'])) def toggleEntryFocus(self, lose=False): if lose: self.searchBarEntry['focus'] = 0 base.localAvatar.chatMgr.fsm.request('mainMenu') else: base.localAvatar.chatMgr.fsm.request('otherDialog') def setupWords(self, returnWords=False): words = [] for wordName in magicWordIndex: word = magicWordIndex[wordName] if word['classname'] not in words: if not word['hidden']: words.append(word['classname']) sortedWords = sorted(words) numWords = len(sortedWords) if returnWords: return numWords currentWordIndex = 0 while currentWordIndex < numWords: newWordButton = DirectButton(parent=self, relief=None, text=sortedWords[currentWordIndex], text_align=TextNode.ALeft, text_scale=0.05, text1_bg=Vec4(0.5, 0.9, 1, 1), text2_bg=Vec4(1, 1, 0, 1), text3_fg=Vec4(0.4, 0.8, 0.4, 1), textMayChange=0, command=self.showWordInfo, extraArgs=[currentWordIndex]) self.magicWords.append(newWordButton) self.shownMagicWords.append(newWordButton) currentWordIndex += 1 def showWordInfo(self, wordNum): for word in self.magicWords: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL wordName = self.magicWords[wordNum] wordName['state'] = DGG.DISABLED self.currentLabel['text'] = TTLocalizer.WordPageCurrent + wordName['text'] def updateWordSearch(self, extraArgs=None): self.hiddenMagicWords = [] searchTerm = self.searchBarEntry.get().lower() for word in self.magicWords + self.hiddenMagicWords: wordLabel = word['text'].lower() if searchTerm not in wordLabel and word in self.magicWords: self.hiddenMagicWords.append(word) if word['state'] != DGG.NORMAL: self.currentLabel['text'] = TTLocalizer.WordPageCurrent + TTLocalizer.WordPageNA word['state'] = DGG.NORMAL word.hide() elif searchTerm in wordLabel and word in self.hiddenMagicWords: self.hiddenMagicWords.remove(word) word.show() self.shownMagicWords = [] for word in self.magicWords: if word not in self.hiddenMagicWords: self.shownMagicWords.append(word) magicWordCount = len(self.shownMagicWords) if magicWordCount == 0: magicWordCount = 1 self.totalLabel['text'] = TTLocalizer.WordPageTotal + str(len(self.shownMagicWords)) self.scrollList['items'] = self.shownMagicWords self.slider['range'] = (magicWordCount, 0) def copyToChat(self): wordName = None for word in self.magicWords: if word['state'] != DGG.NORMAL: wordName = word['text'] break if not wordName: return phrase = base.cr.magicWordManager.chatPrefix + wordName + ' ' localAvatar.book.closeBook() localAvatar.chatMgr.fsm.request('mainMenu') localAvatar.chatMgr.chatInputNormal.typeCallback(None) localAvatar.chatMgr.chatInputNormal.chatEntry.enterText(phrase) def showInfoPanel(self): wordName = None for word in self.magicWords: if word['state'] != DGG.NORMAL: wordName = word['text'] break if not wordName: return wordInfo = magicWordIndex[wordName.lower()] wordText = TTLocalizer.WordPageDescription + wordInfo['desc'] prefix = base.cr.magicWordManager.chatPrefix if not wordInfo['example']: exampleText = TTLocalizer.WordPageExample + prefix + wordName.lower() else: exampleText = TTLocalizer.WordPageExample + prefix + wordName.lower() + ' ' + wordInfo['example'] aliasText = TTLocalizer.WordPageAliases for alias in wordInfo['aliases']: aliasText += alias if wordInfo['aliases'].index(alias) != len(wordInfo['aliases']) - 1: aliasText += ', ' accessLevelText = TTLocalizer.WordPageAccessLevel + wordInfo['access'] + ' (' + str(OTPGlobals.AccessLevelName2Int.get(wordInfo['access'])) + ')' lineBreak = '\n\n' infoText = wordText + lineBreak + exampleText + lineBreak + aliasText + lineBreak + accessLevelText self.magicWordTitle['text'] = wordName self.magicWordInfoLabel['text'] = infoText self.magicWordInfo.show() def hideInfoPanel(self): self.magicWordTitle['text'] = TTLocalizer.WordPageNA self.magicWordInfoLabel['text'] = TTLocalizer.WordPageNA self.magicWordInfo.hide() class ClothingTabPage(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory('ClothingTabPage') # TODO Clean Up if possible def __init__(self, parent = aspect2d): 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._parent = parent self.currentSizeIndex = None DirectFrame.__init__(self, parent=self._parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0)) self.load() def load(self): self.model = None self.turnSeq = Sequence() self.freakSeq = None self.word1Desc = DirectLabel(parent=hidden, relief=None, text='', text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.058, 0, 0)) self.shirtList = [] self.shirtIDs = [] self.sleeveList = [] self.sleeveIDs = [] self.boyPantList = [] self.boyPantIDs = [] self.girlPantList = [] self.girlPantIDs = [] self.girlPantTypes = [] self.colorList = [] self.colorIDs = [] av = base.cr.doId2do.get(base.localAvatar.doId) self.shirt = av.style.topTex self.shirtColor = av.style.topTexColor self.sleeve = av.style.sleeveTex self.sleeveColor = av.style.sleeveTexColor self.pant = av.style.botTex self.pantColor = av.style.botTexColor genderList = ['m', 'f'] self.gender = genderList.index(av.style.gender) self.color = 0 self.torsoSize = av.style.torso[0] self.torsoType = 's' if len(av.style.torso) > 1: self.torsoType = av.style.torso[1] self.l = locals() self.makeList() self.shirtWords = list(self.shirtList) self.sleeveWords = list(self.sleeveList) self.boyPantWords = list(self.boyPantList) self.girlPantWords = list(self.girlPantList) self.colorWords = list(self.colorIDs) self.rainbowEffect = Sequence() self.makeScrollLists() self.createModel() self.makeButtons() def scrollListTo(self, scrollList, slider): if slider == 'shirt': slider = self.shirtslider elif slider == 'sleeve': slider = self.sleeveslider elif slider == 'boypants': slider = self.pantslider1 elif slider == 'girlpants': slider = self.pantslider2 elif slider == 'color': slider = self.colorslider scrollList.scrollTo(int(slider['value'])) def makeList(self): for x in xrange(len(ToonDNA.Shirts)): self.l['self.shirts' + str(x)] = DirectButton(parent=self, relief=None, text=str(x) + " - " + ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", ""), text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'shirt']) #--disposing of long labels-- if ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('apparel/') or ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tiers/'): self.l['self.shirts' + str(x)]["text"] = str(x) + " - " + ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", "") elif ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tt_t_chr_'): self.l['self.shirts' + str(x)]["text"] = str(x) + " - " + ToonDNA.Shirts[x].split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].replace(".jpg", "") self.shirtList.append(self.l['self.shirts' + str(x)]) self.shirtIDs.append( x ) for x in xrange(len(ToonDNA.Sleeves)): self.l['self.sleeves' + str(x)] = DirectButton(parent=self, relief=None, text=str(x) + " - " + ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", ""), text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'sleeve']) if ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].startswith('apparel/') or ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tiers/'): self.l['self.sleeves' + str(x)]["text"] = str(x) + " - " + ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", "") elif ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tt_t_chr_'): self.l['self.sleeves' + str(x)]["text"] = str(x) + " - " + ToonDNA.Sleeves[x].split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].replace(".jpg", "") self.sleeveList.append(self.l['self.sleeves' + str(x)]) self.sleeveIDs.append( x ) for x in xrange(len(ToonDNA.BoyShorts)): self.l['self.boypants' + str(x)] = DirectButton(parent=self, relief=None, text=str(x) + " - " + ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", ""), text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'pants']) if ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('apparel/') or ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tiers/'): self.l['self.boypants' + str(x)]["text"] = str(x) + " - " + ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", "") elif ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].startswith('tt_t_chr_'): self.l['self.boypants' + str(x)]["text"] = str(x) + " - " + ToonDNA.BoyShorts[x].split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].replace(".jpg", "") self.boyPantList.append(self.l['self.boypants' + str(x)]) self.boyPantIDs.append( x ) for x in xrange(len(ToonDNA.GirlBottoms)): pantsTypes = ['s', 'd'] self.l['self.girlpants' + str(x)] = DirectButton(parent=self, relief=None, text=str(x) + " - " + ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", ""), text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'pants']) if ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].startswith('apparel/') or ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].startswith('tiers/'): self.l['self.girlpants' + str(x)]["text"] = str(x) + " - " + ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].split('/', 1)[-1].replace(".jpg", "") elif ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].startswith('tt_t_chr_'): self.l['self.girlpants' + str(x)]["text"] = str(x) + " - " + ToonDNA.GirlBottoms[x][0].split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].replace(".jpg", "") #--end of eye-bleeding code-- self.girlPantList.append(self.l['self.girlpants' + str(x)]) self.girlPantIDs.append( x ) self.girlPantTypes.append(pantsTypes[ToonDNA.GirlBottoms[x][1]]) for x in xrange(len(ToonDNA.ClothesColors)): self.l['self.colors' + str(x)] = DirectButton(parent=self, relief=None, text=str(x), text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=0, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'color']) self.colorList.append(self.l['self.colors' + str(x)]) self.colorIDs.append(x) self.shirtLabel = DirectLabel(parent=self, relief=None, text="Shirt ID: " + str(self.shirt) + ' / ' + str(self.shirtColor), text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(-0.75, 0, 0.5)) self.sleeveLabel = DirectLabel(parent=self, relief=None, text="Sleeve ID: " + str(self.sleeve) + ' / ' + str(self.sleeveColor), text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(-0.2, 0, 0.5)) self.pantLabel = DirectLabel(parent=self, relief=None, text="Pants ID: " + str(self.pant) + ' / ' + str(self.pantColor), text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.35, 0, 0.5)) self.colorSelectedLabel = DirectLabel(parent=self, relief=None, text="Color Selected: " + str(self.color), text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.35, 0, -0.65)) pickAToonGui = loader.loadModel('phase_3.5/models/gui/matching_game_gui') self.colorTest = DirectButton(parent=self, relief=None, image=pickAToonGui.find('**/minnieCircle'), image_scale=0.375, image2_scale=0.4375, pos=(0.3, 0, -0.635), text_scale=0.04, text_align=TextNode.ACenter, text_pos=(-0.00625, 0.00625), text="Color\nAll", text_fg=Vec4(0, 0, 0, 0), text1_fg=Vec4(0, 0, 0, 0), text2_fg=Vec4(0, 0, 0, 1), text3_fg=Vec4(0, 0, 0, 0), command=self.showWordInfo, extraArgs=[8008135, 'huh', 'all', True]) pickAToonGui.removeNode() self.colorTest.setColor(ToonDNA.ClothesColors[self.color]) self.colorTest['text2_fg'] = Vec4(0, 0, 0, 1) + Vec4(ToonDNA.ClothesColors[self.color][0], ToonDNA.ClothesColors[self.color][1], ToonDNA.ClothesColors[self.color][2], 1)/3 self.nakedLabel = DirectLabel(relief=None, text="Naked Toons\nDon't Wear Clothing!", text_font=ToontownGlobals.getSignFont(), pos=(0, 0, 0), text_fg=(1, 0, 0, 1), text_align=TextNode.ACenter, text_scale=0.2) self.freakSeq = Sequence(Func(self.nakedLabel.show), SoundInterval(loader.loadSfx('phase_9/audio/sfx/CHQ_GOON_tractor_beam_alarmed.ogg')), Func(self.nakedLabel.hide), Func(self.enableClothButton, 1)) self.nakedLabel.hide() def unload(self): for x in xrange(len(ToonDNA.Shirts)): del self.l['self.shirts' + str(x)] for x in xrange(len(ToonDNA.Sleeves)): del self.l['self.sleeves' + str(x)] for x in xrange(len(ToonDNA.BoyShorts)): del self.l['self.boypants' + str(x)] for x in xrange(len(ToonDNA.GirlBottoms)): del self.l['self.girlpants' + str(x)] for x in xrange(len(ToonDNA.ClothesColors)): del self.l['self.colors' + str(x)] del self.shirtLabel del self.sleeveLabel del self.pantLabel del self.colorSelectedLabel del self.colorTest if self.freakSeq.isPlaying(): self.freakSeq.finish() del self.nakedLabel self.shirtScrollList.destroy() del self.shirtScrollList self.sleeveScrollList.destroy() del self.sleeveScrollList self.pantScrollList1.destroy() del self.pantScrollList1 self.pantScrollList2.destroy() del self.pantScrollList2 self.colorScrollList.destroy() del self.colorScrollList self.shirtslider.destroy() del self.shirtslider self.sleeveslider.destroy() del self.sleeveslider self.pantslider1.destroy() del self.pantslider1 self.pantslider2.destroy() del self.pantslider2 self.colorslider.destroy() del self.colorslider self.toggleGender.destroy() del self.toggleGender self.toggleBody.destroy() del self.toggleBody self.toggleNude.destroy() del self.toggleNude self.colorShirt.destroy() del self.colorShirt self.colorSleeve.destroy() del self.colorSleeve self.colorPant.destroy() del self.colorPant self.setClothes.destroy() del self.setClothes if self.turnSeq.isPlaying(): self.turnSeq.finish() del self.turnSeq if self.rainbowEffect.isPlaying(): self.rainbowEffect.finish() del self.rainbowEffect self.model.removeNode() del self.model def exit(self): self.ignore('confirmDone') self.hide() def enter(self): self.ignore('confirmDone') self.show() def createModel(self): if self.turnSeq.isPlaying(): self.turnSeq.finish() if self.rainbowEffect.isPlaying(): self.rainbowEffect.finish() self.rainbowEffect = Sequence() magicParallel = Parallel() if self.model: self.model.removeNode() del self.model toon = Toon.Toon() dna = ToonDNA.ToonDNA() if self.gender == 1: gender = 'f' else: gender = 'm' dna.newToon(('dls', self.torsoSize + self.torsoType, 'm', gender)) if self.torsoType != '': dna.topTex = self.shirt dna.topTexColor = self.shirtColor dna.botTex = self.pant dna.botTexColor = self.pantColor dna.sleeveTex = self.sleeve dna.sleeveTexColor = self.sleeveColor dna.armColor = 27 toon.setDNA(dna) self.model = NodePath('clothing') if self.torsoType != '': pieceNames = ('**/1000/**/torso-top', '**/1000/**/sleeves', '**/1000/**/torso-bot',) for name in pieceNames: for piece in toon.findAllMatches(name): piece.wrtReparentTo(self.model) else: for piece in toon.findAllMatches('**/1000/**/torso'): piece.wrtReparentTo(self.model) magicParallel.append(Sequence( LerpColorInterval(piece, duration=1, color=VBase4(0.996094, 0.898438, 0.320312, 1.0)), LerpColorInterval(piece, duration=1, color=VBase4(0.304688, 0.96875, 0.402344, 1.0)), LerpColorInterval(piece, duration=1, color=VBase4(0.191406, 0.5625, 0.773438, 1.0)), LerpColorInterval(piece, duration=0.5, color=VBase4(0.546875, 0.28125, 0.75, 1.0)), LerpColorInterval(piece, duration=0.5, color=VBase4(0.933594, 0.265625, 0.28125, 1.0)) )) self.rainbowEffect.append(magicParallel) self.rainbowEffect.loop() toon.delete() self.model.setH(180) self.model.reparentTo(self) self.model.setScale(0.125) self.model.setPos(0.2, 0, -0.425) self.model.setBin('unsorted', 0, 1) self.model.setDepthTest(True) self.model.setDepthWrite(True) self.turnSeq = LerpHprInterval(self.model, duration=5, hpr=(540, 0, 0), startHpr=(180, 0, 0)) self.turnSeq.loop() def makeButtons(self): if self.torsoSize == 'l': b = "Long" elif self.torsoSize == 'm': b = "Med" else: b = "Short" if self.gender == 0: a = "Male" else: a = "Female" gui = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.toggleGender = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Gender (%s)' % a, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(0.2, 0, -0.4), command=self.changeBody, extraArgs=['gender']) self.toggleBody = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Body (%s)' % b, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(0.2, 0, -0.5), command=self.changeBody, extraArgs=['body']) self.toggleNude = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Streak', text_scale=0.065, text_pos=(0, -0.0125), scale=0.8, pos=(0.6, 0, -0.525), command=self.changeBody, extraArgs=['nude']) self.colorShirt = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Color Shirt', text_scale=0.065, text_pos=(0, -0.0125), scale=0.6, pos=(-0.7, 0, -0.55), command=self.showWordInfo, extraArgs=[self.color, 'huh', 'shirt', True]) self.colorSleeve = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Color Sleeve', text_scale=0.065, text_pos=(0, -0.0125), scale=0.6, pos=(-0.45, 0, -0.55), command=self.showWordInfo, extraArgs=[self.color, 'huh', 'sleeve', True]) self.colorPant = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Color Pants', text_scale=0.065, text_pos=(0, -0.0125), scale=0.6, pos=(-0.2, 0, -0.55), command=self.showWordInfo, extraArgs=[8008135, 'huh', 'pants', True]) self.setClothes = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR'), gui.find('**/QuitBtn_DN')), relief=None, text='Set As Outfit', text_scale=0.05, text_pos=(0, -0.0125), scale=0.8, pos=(0, 0, -0.65), command=self.setAsClothing) av = base.cr.doId2do.get(base.localAvatar.doId) if len(av.style.torso) == 1: self.changeBody("nude") def setAsClothing(self): av = base.cr.doId2do.get(base.localAvatar.doId) genderList = ['m', 'f'] if av.style.gender != genderList[self.gender] and self.torsoType != '': self.changeBody('gender') newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(av.style.makeNetString()) newDNA.torso = av.style.torso[0] + self.torsoType newDNA.topTex = self.shirt newDNA.topTexColor = self.shirtColor newDNA.botTex = self.pant newDNA.botTexColor = self.pantColor newDNA.sleeveTex = self.sleeve newDNA.sleeveTexColor = self.sleeveColor av.sendUpdate('setMagicDNA', [newDNA.makeNetString()]) def nakedDetect(self): self.enableClothButton(0) self.freakSeq.start() def enableClothButton(self, active): if active == 0: self.setClothes['state'] = DGG.DISABLED else: self.setClothes['state'] = DGG.NORMAL def changeBody(self, type): if type == 'gender': if self.gender == 0: self.gender = 1 try: self.torsoType = self.girlPantTypes[self.pant] except: self.torso = self.girlPantIDs[-1] self.torsoType = self.girlPantTypes[-1] self.pantScrollList1.hide() self.pantslider1.hide() self.pantScrollList2.show() self.pantslider2.show() self.toggleGender['text'] = 'Toggle Gender (Female)' else: self.gender = 0 self.torsoType = 's' self.pantScrollList2.hide() self.pantslider2.hide() self.pantScrollList1.show() self.pantslider1.show() self.toggleGender['text'] = 'Toggle Gender (Male)' elif type == 'body': if self.torsoSize == 'm': self.torsoSize = 'l' self.toggleBody['text'] = 'Toggle Body (Long)' elif self.torsoSize == 'l': self.torsoSize = 's' self.toggleBody['text'] = 'Toggle Body (Short)' else: self.torsoSize = 'm' self.toggleBody['text'] = 'Toggle Body (Med)' elif type == 'nude': if self.torsoType == '': self.torsoType = 's' if self.gender == 1: try: self.torsoType = self.girlPantTypes[self.pant] except: self.torso = self.girlPantIDs[-1] self.torsoType = self.girlPantTypes[-1] self.toggleGender['state'] = DGG.NORMAL self.colorShirt['state'] = DGG.NORMAL self.colorSleeve['state'] = DGG.NORMAL self.colorPant['state'] = DGG.NORMAL self.colorTest['state'] = DGG.NORMAL self.toggleNude['text'] = "Streak" else: self.torsoType = '' self.toggleGender['state'] = DGG.DISABLED self.colorShirt['state'] = DGG.DISABLED self.colorSleeve['state'] = DGG.DISABLED self.colorPant['state'] = DGG.DISABLED self.colorTest['state'] = DGG.DISABLED self.toggleNude['text'] = "Clothe" self.toggleAllWords() self.createModel() def toggleAllWords(self): i = 0 j = 0 currentEnabled = (self.shirt, self.sleeve, self.pant, self.pant, self.color) for list in (self.shirtList, self.sleeveList, self.boyPantList, self.girlPantList, self.colorList): for word in list: if self.torsoType == '': word['state'] = DGG.DISABLED else: if currentEnabled[i] == j: word['state'] = DGG.DISABLED else: word['state'] = DGG.NORMAL j += 1 i += 1 j = 0 def showWordInfo(self, wordNum, desc, clothType, isColorChange=False): if isColorChange: wordNum = self.color if clothType == 'sleeve': clothList = self.sleeveList elif clothType == 'pants' and self.gender == 0: clothList = self.boyPantList elif clothType == 'pants' and self.gender == 1: clothList = self.girlPantList elif clothType == 'color': clothList = self.colorList elif clothType == 'all': pass else: clothList = self.shirtList if not isColorChange: for word in clothList: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL wordName = clothList[wordNum] wordName['state'] = DGG.DISABLED if clothType == 'all': if isColorChange: self.sleeveColor = wordNum self.model.find('**/sleeves').setColor(ToonDNA.ClothesColors[wordNum], 1) self.pantColor = wordNum self.model.find('**/torso-bot').setColor(ToonDNA.ClothesColors[wordNum], 1) self.shirtColor = wordNum self.model.find('**/torso-top').setColor(ToonDNA.ClothesColors[wordNum], 1) self.shirtLabel['text'] = "Shirt ID: " + str(self.shirt) + ' / ' + str(self.shirtColor) self.sleeveLabel['text'] = "Sleeve ID: " + str(self.sleeve) + ' / ' + str(self.sleeveColor) self.pantLabel['text'] = "Pants ID: " + str(self.pant) + ' / ' + str(self.pantColor) if clothType == 'sleeve': if isColorChange: self.sleeveColor = wordNum self.model.find('**/sleeves').setColor(ToonDNA.ClothesColors[wordNum], 1) else: self.sleeve = wordNum self.model.find('**/sleeves').setTexture(loader.loadTexture(ToonDNA.Sleeves[wordNum]), 1) elif clothType == 'pants': if isColorChange: self.pantColor = wordNum else: self.pant = wordNum if self.gender == 1 and self.girlPantTypes[wordNum] != self.torsoType: self.torsoType = self.girlPantTypes[wordNum] self.createModel() elif self.gender == 0 and self.torsoType != 's': self.torsoType = 's' self.createModel() else: if isColorChange: self.model.find('**/torso-bot').setColor(ToonDNA.ClothesColors[wordNum], 1) else: if self.gender == 1: self.model.find('**/torso-bot').setTexture(loader.loadTexture(ToonDNA.GirlBottoms[wordNum][0]), 1) else: self.model.find('**/torso-bot').setTexture(loader.loadTexture(ToonDNA.BoyShorts[wordNum]), 1) elif clothType == 'color': self.color = wordNum else: if isColorChange: self.shirtColor = wordNum self.model.find('**/torso-top').setColor(ToonDNA.ClothesColors[wordNum], 1) else: self.shirt = wordNum self.model.find('**/torso-top').setTexture(loader.loadTexture(ToonDNA.Shirts[wordNum]), 1) if clothType == 'shirt': self.shirtLabel['text'] = "Shirt ID: " + str(self.shirt) + ' / ' + str(self.shirtColor) elif clothType == 'sleeve': self.sleeveLabel['text'] = "Sleeve ID: " + str(self.sleeve) + ' / ' + str(self.sleeveColor) elif clothType == 'pants': self.pantLabel['text'] = "Pants ID: " + str(self.pant) + ' / ' + str(self.pantColor) elif clothType == 'color': self.colorSelectedLabel['text'] = "Color Selected: " + str(self.color) self.colorTest.setColor(ToonDNA.ClothesColors[self.color]) self.colorTest['text2_fg'] = Vec4(0, 0, 0, 1) + Vec4(ToonDNA.ClothesColors[self.color][0], ToonDNA.ClothesColors[self.color][1], ToonDNA.ClothesColors[self.color][2], 1)/3 def makeScrollLists(self): gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui') coolbutton = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.shirtScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.shirtList)) self.shirtScrollList.incButton.reparentTo(hidden) self.shirtScrollList.decButton.reparentTo(hidden) self.shirtslider = DirectSlider(parent=self, range=(len(self.shirtIDs), 0), scale=(0.7, 0.7, 0.225), pos=(-0.1, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.shirtScrollList, 'shirt'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.35, 1, 0.5)) self.sleeveScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.35, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.sleeveList)) self.sleeveScrollList.incButton.reparentTo(hidden) self.sleeveScrollList.decButton.reparentTo(hidden) self.sleeveslider = DirectSlider(parent=self, range=(len(self.sleeveIDs), 0), scale=(0.7, 0.7, 0.225), pos=(0.75, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.sleeveScrollList, 'sleeve'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.35, 1, 0.5)) self.pantScrollList1 = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.boyPantList)) self.pantScrollList1.incButton.reparentTo(hidden) self.pantScrollList1.decButton.reparentTo(hidden) self.pantslider1 = DirectSlider(parent=self, range=(len(self.boyPantIDs), 0), scale=(0.7, 0.7, 0.225), pos=(-0.1, 0, -0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.pantScrollList1, 'boypants'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) if self.gender == 1: self.pantScrollList1.hide() self.pantslider1.hide() self.pantScrollList2 = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.girlPantList)) self.pantScrollList2.incButton.reparentTo(hidden) self.pantScrollList2.decButton.reparentTo(hidden) self.pantslider2 = DirectSlider(parent=self, range=(len(self.girlPantIDs), 0), scale=(0.7, 0.7, 0.225), pos=(-0.1, 0, -0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.pantScrollList2, 'girlpants'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) if self.gender == 0: self.pantScrollList2.hide() self.pantslider2.hide() self.colorScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.68, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.33, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.colorList)) self.colorScrollList.incButton.reparentTo(hidden) self.colorScrollList.decButton.reparentTo(hidden) self.colorslider = DirectSlider(parent=self, range=(len(self.colorIDs), 0), scale=(0.7, 0.7, 0.225), pos=(0.75, 0, -0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.colorScrollList, 'color'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.75, 1, 0.5)) gui.removeNode() coolbutton.removeNode() class AccTabPage1(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory('AccTabPage1') # TODO Clean Up if possible def __init__(self, parent = aspect2d): 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._parent = parent self.currentSizeIndex = None DirectFrame.__init__(self, parent=self._parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0)) self.load() def load(self): self.model = None self.turnSeq = Sequence() self.word1Desc = DirectLabel(parent=hidden, relief=None, text='', text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.058, 0, 0)) self.hatList = [] self.hatIDs = [] self.hatTexList = [] self.hatTexIDs = [] self.glassesList = [] self.glassesIDs = [] self.glassesTexList = [] self.glassesTexIDs = [] self.hat = 0 self.hatTex = 0 self.glasses = 0 self.glassesTex = 0 av = base.cr.doId2do.get(base.localAvatar.doId) self.headType = ToonDNA.toonHeadTypes.index(av.style.head) self.headName = ToonDNA.toonHeadTypes[self.headType] self.gender = av.style.gender self.l = locals() self.makeList() self.hatWords = list(self.hatList) self.hatTexWords = list(self.hatTexList) self.glassesWords = list(self.glassesList) self.glassesTexWords = list(self.glassesTexList) self.makeScrollLists() self.createModel() self.makeButtons() def scrollListTo(self, scrollList, slider): if slider == 'hat': slider = self.hatslider elif slider == 'hatTex': slider = self.hattexslider elif slider == 'glasses': slider = self.glassesslider elif slider == 'glassesTex': slider = self.glassestexslider scrollList.scrollTo(int(slider['value'])) def makeSplit(self, string): abble = string.split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_',1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1] return abble def makeList(self): for x in xrange(len(ToonDNA.HatModels)): text = str(x) + " - " if ToonDNA.HatModels[x] == None: text += "No Hat" else: text += self.makeSplit(ToonDNA.HatModels[x]) self.l['self.hats' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'hat']) self.l['self.hats' + str(x)]["text"] = text self.hatList.append(self.l['self.hats' + str(x)]) self.hatIDs.append(x) for x in xrange(len(ToonDNA.HatTextures)): text = str(x) + " - " if ToonDNA.HatTextures[x] == None: text += "Normal Texture" else: text += self.makeSplit(ToonDNA.HatTextures[x].replace(".jpg", "")) self.l['self.hatTexs' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'hatTex']) self.l['self.hatTexs' + str(x)]["text"] = text self.hatTexList.append(self.l['self.hatTexs' + str(x)]) self.hatTexIDs.append(x) for x in xrange(len(ToonDNA.GlassesModels)): text = str(x) + " - " if ToonDNA.GlassesModels[x] == None: text += "No Glasses" else: text += self.makeSplit(ToonDNA.GlassesModels[x]) self.l['self.glass' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'glasses']) self.l['self.glass' + str(x)]["text"] = text self.glassesList.append(self.l['self.glass' + str(x)]) self.glassesIDs.append(x) for x in xrange(len(ToonDNA.GlassesTextures)): text = str(x) + " - " if ToonDNA.GlassesTextures[x] == None: text += "Normal Texture" else: text += self.makeSplit(ToonDNA.GlassesTextures[x].replace(".jpg", "")) self.l['self.glassTexs' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'glassesTex']) self.l['self.glassTexs' + str(x)]["text"] = text self.glassesTexList.append(self.l['self.glassTexs' + str(x)]) self.glassesTexIDs.append(x) self.hatLabel = DirectLabel(parent=self, relief=None, text="Hat ID: (" + str(self.hat) + ', ' + str(self.hatTex) + ", 0)", text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(-0.65, 0, 0.5)) self.glassesLabel = DirectLabel(parent=self, relief=None, text="Glasses ID: (" + str(self.glasses) + ', ' + str(self.glassesTex) + ", 0)", text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.15, 0, 0.5)) def unload(self): for x in xrange(len(ToonDNA.HatModels)): del self.l['self.hats' + str(x)] for x in xrange(len(ToonDNA.HatTextures)): del self.l['self.hatTexs' + str(x)] for x in xrange(len(ToonDNA.GlassesModels)): del self.l['self.glass' + str(x)] for x in xrange(len(ToonDNA.GlassesTextures)): del self.l['self.glassTexs' + str(x)] del self.hatLabel del self.glassesLabel self.hatScrollList.destroy() del self.hatScrollList self.glassesScrollList.destroy() del self.glassesScrollList self.hatTexScrollList.destroy() del self.hatTexScrollList self.glassesTexScrollList.destroy() del self.glassesTexScrollList self.hatslider.destroy() del self.hatslider self.glassesslider.destroy() del self.glassesslider self.hattexslider.destroy() del self.hattexslider self.glassestexslider.destroy() del self.glassestexslider self.toggleGender.destroy() del self.toggleGender self.toggleBody.destroy() del self.toggleBody self.setClothes.destroy() del self.setClothes if self.turnSeq.isPlaying(): self.turnSeq.finish() del self.turnSeq self.model.removeNode() del self.model def exit(self): self.ignore('confirmDone') self.hide() def enter(self): self.ignore('confirmDone') self.show() def createModel(self): if self.turnSeq.isPlaying(): self.turnSeq.finish() if self.model: self.model.removeNode() del self.model frameGUI = loader.loadModel('phase_3.5/models/gui/fishingBook') toonFrame = DirectFrame(parent=self, relief=None, image=frameGUI.find('**/fram3'), pos=(0.7, 0, -0.45), scale=0.0225) toon = Toon.Toon() dna = ToonDNA.ToonDNA() dna.newToon((self.headName, 'ms', 'm', self.gender)) dna.headColor = 27 dna.armColor = 27 dna.legColor = 27 toon.setDNA(dna) toon.setHat(self.hat, self.hatTex, 0) toon.setGlasses(self.glasses, self.glassesTex, 0) self.model = NodePath('clothing') toon.getPart('head', '1000').reparentTo(self.model) toon.getGeomNode().hide() self.model.setH(180) self.model.reparentTo(self) self.model.setScale(0.125) self.model.setPos(0.4, 0, -0.525) self.model.setBin('unsorted', 0, 1) self.model.setDepthTest(True) self.model.setDepthWrite(True) self.turnSeq = LerpHprInterval(self.model, duration=5, hpr=(540, 0, 0), startHpr=(180, 0, 0)) self.turnSeq.loop() def makeButtons(self): if self.gender == 'm': a = "Male" else: a = "Female" gui = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.toggleGender = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Gender (%s)' % a, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(-0.45, 0, -0.4), command=self.changeBody, extraArgs=['gender']) self.toggleBody = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Head (%s)' % self.headName, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(-0.45, 0, -0.5), command=self.changeBody, extraArgs=['species']) self.setClothes = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Set Accessories', text_scale=0.05, text_pos=(0, -0.0125), scale=0.8, pos=(-0.45, 0, -0.6), command=self.setAsClothing) def setAsClothing(self): av = base.cr.doId2do.get(base.localAvatar.doId) av.sendUpdate('setMagicHeadAccessories', [self.hat, self.hatTex, self.glasses, self.glassesTex]) def changeBody(self, type): if type == 'gender': if self.gender == 'm': self.gender = 'f' self.toggleGender['text'] = 'Toggle Gender (Female)' else: self.gender = 'm' self.toggleGender['text'] = 'Toggle Gender (Male)' elif type == 'species': self.headType = self.headType + 1 if self.headType > 33: self.headType = 0 self.headName = ToonDNA.toonHeadTypes[self.headType] self.toggleBody['text'] = 'Toggle Head (%s)' % self.headName self.createModel() def showWordInfo(self, wordNum, desc, clothType): listNum = wordNum if clothType == 'hat': clothList = self.hatList elif clothType == 'hatTex': clothList = self.hatTexList elif clothType == 'glasses': clothList = self.glassesList elif clothType == 'glassesTex': clothList = self.glassesTexList for word in clothList: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL wordName = clothList[listNum] wordName['state'] = DGG.DISABLED if clothType == 'hat': self.hat = wordNum elif clothType == 'hatTex': self.hatTex = wordNum elif clothType == 'glasses': self.glasses = wordNum elif clothType == 'glassesTex': self.glassesTex = wordNum self.hatLabel['text'] = "Hat ID: (" + str(self.hat) + ', ' + str(self.hatTex) + ", 0)" self.glassesLabel['text'] = "Glasses ID: (" + str(self.glasses) + ', ' + str(self.glassesTex) + ", 0)" self.createModel() def makeScrollLists(self): gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui') coolbutton = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.hatScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.hatList)) self.hatScrollList.incButton.reparentTo(hidden) self.hatScrollList.decButton.reparentTo(hidden) self.hatslider = DirectSlider(parent=self, range=(len(self.hatIDs), 0), scale=(0.7, 0.7, 0.225), pos=(-0.1, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.hatScrollList, 'hat'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(-0.5, 1, 0.5)) self.hatTexScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.25, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=4, items=list(self.hatTexList)) self.hatTexScrollList.incButton.reparentTo(hidden) self.hatTexScrollList.decButton.reparentTo(hidden) self.hattexslider = DirectSlider(parent=self, range=(len(self.hatTexIDs), 0), scale=(0.7, 0.7, 0.15), pos=(-0.1, 0, -0.1685), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.hatTexScrollList, 'hatTex'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) self.glassesScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.35, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.glassesList)) self.glassesScrollList.incButton.reparentTo(hidden) self.glassesScrollList.decButton.reparentTo(hidden) self.glassesslider = DirectSlider(parent=self, range=(len(self.glassesIDs), 0), scale=(0.7, 0.7, 0.225), pos=(0.75, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.glassesScrollList, 'glasses'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) self.glassesTexScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.35, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.25, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=4, items=list(self.glassesTexList)) self.glassesTexScrollList.incButton.reparentTo(hidden) self.glassesTexScrollList.decButton.reparentTo(hidden) self.glassestexslider = DirectSlider(parent=self, range=(len(self.glassesTexIDs), 0), scale=(0.7, 0.7, 0.15), pos=(0.75, 0, -0.1685), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.glassesTexScrollList, 'glassesTex'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) gui.removeNode() coolbutton.removeNode() class AccTabPage2(DirectFrame): notify = DirectNotifyGlobal.directNotify.newCategory('AccTabPage2') # TODO Clean Up if possible def __init__(self, parent = aspect2d): 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._parent = parent self.currentSizeIndex = None DirectFrame.__init__(self, parent=self._parent, relief=None, pos=(0.0, 0.0, 0.0), scale=(1.0, 1.0, 1.0)) self.load() def load(self): self.model = None self.turnSeq = Sequence() self.word1Desc = DirectLabel(parent=hidden, relief=None, text='', text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.058, 0, 0)) self.backpackList = [] self.backpackIDs = [] self.backpackTexList = [] self.backpackTexIDs = [] self.shoesList = [] self.shoesIDs = [] self.shoesTexList = [] self.shoesTexIDs = [] self.backpack = 0 self.backpackTex = 0 self.shoes = 0 self.shoesTex = 0 self.headType = 0 av = base.cr.doId2do.get(base.localAvatar.doId) self.torsoType = av.style.torso[0] self.nudity = False if len(av.style.torso) == 1: self.nudity = True self.gender = 'f' else: if av.style.torso[1] == 'd': self.gender = 'f' else: self.gender = 'm' self.l = locals() self.makeList() self.backpackWords = list(self.backpackList) self.backpackTexWords = list(self.backpackTexList) self.shoesWords = list(self.shoesList) self.shoesTexWords = list(self.shoesTexList) self.makeScrollLists() self.createModel() self.makeButtons() def scrollListTo(self, scrollList, slider): if slider == 'backpack': slider = self.backpackslider elif slider == 'backpackTex': slider = self.backpacktexslider elif slider == 'shoes': slider = self.shoesslider elif slider == 'shoesTex': slider = self.shoestexslider scrollList.scrollTo(int(slider['value'])) def makeSplit(self, string): abble = string.split('/', 1)[-1].split('/', 1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_',1)[-1].split('_', 1)[-1].split('_', 1)[-1].split('_', 1)[-1] return abble def makeList(self): for x in xrange(len(ToonDNA.BackpackModels)): text = str(x) + " - " if ToonDNA.BackpackModels[x] == None: text += "No Backpack" else: text += self.makeSplit(ToonDNA.BackpackModels[x]) self.l['self.backpacks' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'backpack']) self.l['self.backpacks' + str(x)]["text"] = text self.backpackList.append(self.l['self.backpacks' + str(x)]) self.backpackIDs.append(x) for x in xrange(len(ToonDNA.BackpackTextures)): text = str(x) + " - " if ToonDNA.BackpackTextures[x] == None: text += "Normal Texture" else: text += self.makeSplit(ToonDNA.BackpackTextures[x].replace(".jpg", "")) self.l['self.backpackTexs' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'backpackTex']) self.l['self.backpackTexs' + str(x)]["text"] = text self.backpackTexList.append(self.l['self.backpackTexs' + str(x)]) self.backpackTexIDs.append(x) for x in xrange(len(ToonDNA.ShoesModels)): text = str(x) + " - " if ToonDNA.ShoesModels[x] == None: text += "FuckerA" else: text += ToonDNA.ShoesModels[x] self.l['self.shoe' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'shoes']) self.l['self.shoe' + str(x)]["text"] = text self.shoesList.append(self.l['self.shoe' + str(x)]) self.shoesIDs.append(x) for x in xrange(len(ToonDNA.ShoesTextures)): text = str(x) + " - " if ToonDNA.ShoesTextures[x] == None: text += "FuckerB" else: text += self.makeSplit(ToonDNA.ShoesTextures[x].replace(".jpg", "")) self.l['self.shoeTexs' + str(x)] = DirectButton(parent=self, relief=None, text=text, text_align=TextNode.ALeft, text_scale=0.05, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, text3_fg=self.textDisabledColor, textMayChange=1, command=self.showWordInfo, extraArgs=[x, self.word1Desc, 'shoesTex']) self.l['self.shoeTexs' + str(x)]["text"] = text self.shoesTexList.append(self.l['self.shoeTexs' + str(x)]) self.shoesTexIDs.append(x) self.backpackLabel = DirectLabel(parent=self, relief=None, text="Backpack ID: (" + str(self.backpack) + ', ' + str(self.backpackTex) + ", 0)", text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(-0.75, 0, 0.5)) self.shoesLabel = DirectLabel(parent=self, relief=None, text="Shoes ID: (" + str(self.shoes) + ', ' + str(self.shoesTex) + ", 0)", text_align=TextNode.ALeft, text_scale=0.06, text_wordwrap=12, pos=(0.15, 0, 0.5)) def unload(self): for x in xrange(len(ToonDNA.BackpackModels)): del self.l['self.backpacks' + str(x)] for x in xrange(len(ToonDNA.BackpackTextures)): del self.l['self.backpackTexs' + str(x)] for x in xrange(len(ToonDNA.ShoesModels)): del self.l['self.shoe' + str(x)] for x in xrange(len(ToonDNA.ShoesTextures)): del self.l['self.shoeTexs' + str(x)] del self.backpackLabel del self.shoesLabel self.backpackScrollList.destroy() del self.backpackScrollList self.shoesScrollList.destroy() del self.shoesScrollList self.backpackTexScrollList.destroy() del self.backpackTexScrollList self.shoesTexScrollList.destroy() del self.shoesTexScrollList self.backpackslider.destroy() del self.backpackslider self.shoesslider.destroy() del self.shoesslider self.backpacktexslider.destroy() del self.backpacktexslider self.shoestexslider.destroy() del self.shoestexslider self.toggleGender.destroy() del self.toggleGender self.toggleBody.destroy() del self.toggleBody self.setClothes.destroy() del self.setClothes if self.turnSeq.isPlaying(): self.turnSeq.finish() del self.turnSeq self.model.removeNode() del self.model def exit(self): self.ignore('confirmDone') self.hide() def enter(self): self.ignore('confirmDone') self.show() def createModel(self): if self.turnSeq.isPlaying(): self.turnSeq.finish() if self.model: self.model.removeNode() del self.model toon = Toon.Toon() dna = ToonDNA.ToonDNA() if self.headType > 33: self.headType = 0 bodyEnd = 's' if self.nudity: bodyEnd = '' elif self.gender == 'f': bodyEnd = 'd' dna.newToon(('dls', self.torsoType + bodyEnd, self.torsoType, self.gender)) dna.sleeveTexColor = 27 dna.topTexColor = 27 dna.botTexColor = 27 dna.headColor = 27 dna.armColor = 27 dna.legColor = 27 toon.setDNA(dna) toon.setBackpack(self.backpack, self.backpackTex, 0) toon.setShoes(self.shoes, self.shoesTex, 0) self.model = NodePath('clothing') toon.getPart('head', '1000').removeNode() toon.find('**/1000/**/neck').removeNode() toon.reparentTo(self.model) toon.loop('neutral') self.model.setH(180) self.model.reparentTo(self) self.model.setScale(0.1) self.model.setPos(0, 0, -0.525) self.model.setBin('unsorted', 0, 1) self.model.setDepthTest(True) self.model.setDepthWrite(True) self.turnSeq = LerpHprInterval(self.model, duration=5, hpr=(540, 0, 0), startHpr=(180, 0, 0)) self.turnSeq.loop() def makeButtons(self): if self.torsoType == 'l': b = "Long" elif self.torsoType == 'm': b = "Med" else: b = "Short" if self.nudity: a = "None" elif self.gender == 'f': a = "Skirt" else: a = "Shorts" gui = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.toggleGender = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Clothes (%s)' % a, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(-0.4, 0, -0.5), command=self.changeBody, extraArgs=['gender']) self.toggleBody = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Toggle Body (%s)' % b, text_scale=0.04, text_pos=(0, -0.0125), scale=0.8, pos=(0.4, 0, -0.5), command=self.changeBody, extraArgs=['body']) self.setClothes = DirectButton(parent=self, image=(gui.find('**/QuitBtn_UP'), gui.find('**/QuitBtn_DN'), gui.find('**/QuitBtn_RLVR')), relief=None, text='Set Accessories', text_scale=0.05, text_pos=(0, -0.0125), scale=0.8, pos=(0, 0, -0.65), command=self.setAsClothing) def setAsClothing(self): av = base.cr.doId2do.get(base.localAvatar.doId) av.sendUpdate('setMagicBodyAccessories', [self.backpack, self.backpackTex, self.shoes, self.shoesTex]) def changeBody(self, type): if type == 'gender': if self.nudity: self.nudity = False self.gender = 'm' self.toggleGender['text'] = 'Toggle Clothes (Shorts)' elif self.gender == 'f': self.nudity = True self.toggleGender['text'] = 'Toggle Clothes (None)' else: self.gender = 'f' self.toggleGender['text'] = 'Toggle Clothes (Skirt)' elif type == 'body': if self.torsoType == 'm': self.torsoType = 'l' self.toggleBody['text'] = 'Toggle Body (Long)' elif self.torsoType == 'l': self.torsoType = 's' self.toggleBody['text'] = 'Toggle Body (Short)' else: self.torsoType = 'm' self.toggleBody['text'] = 'Toggle Body (Med)' self.createModel() def showWordInfo(self, wordNum, desc, clothType): if clothType == 'backpack': clothList = self.backpackList elif clothType == 'backpackTex': clothList = self.backpackTexList elif clothType == 'shoes': clothList = self.shoesList elif clothType == 'shoesTex': clothList = self.shoesTexList for word in clothList: if word['state'] != DGG.NORMAL: word['state'] = DGG.NORMAL wordName = clothList[wordNum] wordName['state'] = DGG.DISABLED if clothType == 'backpack': self.backpack = wordNum elif clothType == 'backpackTex': self.backpackTex = wordNum elif clothType == 'shoes': self.shoes = wordNum elif clothType == 'shoesTex': self.shoesTex = wordNum self.backpackLabel['text'] = "Backpack ID: (" + str(self.backpack) + ', ' + str(self.backpackTex) + ", 0)" self.shoesLabel['text'] = "shoes ID: (" + str(self.shoes) + ', ' + str(self.shoesTex) + ", 0)" self.createModel() def makeScrollLists(self): gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui') coolbutton = loader.loadModel('phase_3/models/gui/pick_a_toon_gui') self.backpackScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.backpackList)) self.backpackScrollList.incButton.reparentTo(hidden) self.backpackScrollList.decButton.reparentTo(hidden) self.backpackslider = DirectSlider(parent=self, range=(len(self.backpackIDs), 0), scale=(0.7, 0.7, 0.225), pos=(-0.1, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.backpackScrollList, 'backpack'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(-0.5, 1, 0.5)) self.backpackTexScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(-0.5, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.25, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=4, items=list(self.backpackTexList)) self.backpackTexScrollList.incButton.reparentTo(hidden) self.backpackTexScrollList.decButton.reparentTo(hidden) self.backpacktexslider = DirectSlider(parent=self, range=(len(self.backpackTexIDs), 0), scale=(0.7, 0.7, 0.15), pos=(-0.1, 0, -0.1685), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.backpackTexScrollList, 'backpackTex'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) self.shoesScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.35, 0, 0), itemFrame_pos=(-0.237, 0, 0.41), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.4, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=6, items=list(self.shoesList)) self.shoesScrollList.incButton.reparentTo(hidden) self.shoesScrollList.decButton.reparentTo(hidden) self.shoesslider = DirectSlider(parent=self, range=(len(self.shoesIDs), 0), scale=(0.7, 0.7, 0.225), pos=(0.75, 0, 0.245), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.shoesScrollList, 'shoes'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) self.shoesTexScrollList = DirectScrolledList(parent=self, relief=None, forceHeight=0.07, pos=(0.35, 0, 0), itemFrame_pos=(-0.237, 0, -0.08), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(-0.05, 0.66, -0.25, 0.07), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=4, items=list(self.shoesTexList)) self.shoesTexScrollList.incButton.reparentTo(hidden) self.shoesTexScrollList.decButton.reparentTo(hidden) self.shoestexslider = DirectSlider(parent=self, range=(len(self.shoesTexIDs), 0), scale=(0.7, 0.7, 0.15), pos=(0.75, 0, -0.1685), pageSize=1, orientation=DGG.VERTICAL, command=self.scrollListTo, extraArgs=[self.shoesTexScrollList, 'shoesTex'], thumb_geom=(coolbutton.find('**/QuitBtn_UP'), coolbutton.find('**/QuitBtn_DN'), coolbutton.find('**/QuitBtn_RLVR'), coolbutton.find('**/QuitBtn_UP')), thumb_relief=None, thumb_geom_hpr=(0, 0, -90), thumb_geom_scale=(0.5, 1, 0.5)) gui.removeNode() coolbutton.removeNode()