mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-10-31 16:57:54 +00:00
232 lines
No EOL
9.2 KiB
Python
232 lines
No EOL
9.2 KiB
Python
from pandac.PandaModules import *
|
|
from toontown.toonbase import ToontownGlobals
|
|
from toontown.language import LanguageSelector
|
|
from direct.fsm import StateData
|
|
from direct.gui.DirectGui import *
|
|
from pandac.PandaModules import *
|
|
from toontown.toonbase import TTLocalizer
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.interval.IntervalGlobal import *
|
|
import random, AvatarChoice
|
|
|
|
MAX_AVATARS = 6
|
|
POSITIONS = (Vec3(-0.840167, 0, 0.359333),
|
|
Vec3(0.00933349, 0, 0.306533),
|
|
Vec3(0.862, 0, 0.3293),
|
|
Vec3(-0.863554, 0, -0.445659),
|
|
Vec3(0.00999999, 0, -0.5181),
|
|
Vec3(0.864907, 0, -0.445659))
|
|
COLORS = (Vec4(0.917, 0.164, 0.164, 1),
|
|
Vec4(0.152, 0.75, 0.258, 1),
|
|
Vec4(0.598, 0.402, 0.875, 1),
|
|
Vec4(0.133, 0.59, 0.977, 1),
|
|
Vec4(0.895, 0.348, 0.602, 1),
|
|
Vec4(0.977, 0.816, 0.133, 1))
|
|
chooser_notify = DirectNotifyGlobal.directNotify.newCategory('AvatarChooser')
|
|
|
|
class AvatarChooser(StateData.StateData):
|
|
|
|
def __init__(self, avatarList, doneEvent):
|
|
StateData.StateData.__init__(self, doneEvent)
|
|
self.choice = None
|
|
self.avatarList = avatarList
|
|
return
|
|
|
|
def enter(self):
|
|
self.notify.info('AvatarChooser.enter')
|
|
if self.isLoaded == 0:
|
|
self.load()
|
|
base.disableMouse()
|
|
self.title.reparentTo(aspect2d)
|
|
self.quitButton.show()
|
|
self.languageButton.show()
|
|
self.pickAToonBG.setBin('background', 1)
|
|
self.pickAToonBG.reparentTo(aspect2d)
|
|
base.setBackgroundColor(Vec4(0.145, 0.368, 0.78, 1))
|
|
choice = config.GetInt('auto-avatar-choice', -1)
|
|
for panel in self.panelList:
|
|
panel.show()
|
|
self.accept(panel.doneEvent, self.__handlePanelDone)
|
|
if panel.position == choice and panel.mode == AvatarChoice.AvatarChoice.MODE_CHOOSE:
|
|
self.__handlePanelDone('chose', panelChoice=choice)
|
|
|
|
def exit(self):
|
|
if self.isLoaded == 0:
|
|
return None
|
|
for panel in self.panelList:
|
|
panel.hide()
|
|
|
|
self.ignoreAll()
|
|
self.title.reparentTo(hidden)
|
|
self.quitButton.hide()
|
|
self.languageButton.hide()
|
|
self.pickAToonBG.reparentTo(hidden)
|
|
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
|
|
return None
|
|
|
|
def load(self):
|
|
if self.isLoaded == 1:
|
|
return None
|
|
gui = loader.loadModel('phase_3/models/gui/pick_a_toon_gui')
|
|
gui2 = loader.loadModel('phase_3/models/gui/quit_button')
|
|
newGui = loader.loadModel('phase_3/models/gui/tt_m_gui_pat_mainGui')
|
|
self.pickAToonBG = newGui.find('**/tt_t_gui_pat_background')
|
|
self.pickAToonBG.reparentTo(hidden)
|
|
self.pickAToonBG.setPos(0.0, 2.73, 0.0)
|
|
self.pickAToonBG.setScale(1, 1, 1)
|
|
self.title = OnscreenText(TTLocalizer.AvatarChooserPickAToon, scale=TTLocalizer.ACtitle, parent=hidden, font=ToontownGlobals.getSignFont(), fg=(1, 0.9, 0.1, 1), pos=(0.0, 0.82))
|
|
quitHover = gui.find('**/QuitBtn_RLVR')
|
|
self.quitButton = DirectButton(image=(quitHover, quitHover, quitHover), relief=None, text=TTLocalizer.AvatarChooserQuit, text_font=ToontownGlobals.getSignFont(), text_fg=(0.977, 0.816, 0.133, 1), text_pos=TTLocalizer.ACquitButtonPos, text_scale=TTLocalizer.ACquitButton, image_scale=1, image1_scale=1.05, image2_scale=1.05, scale=1.05, pos=(-0.25, 0, 0.075), command=self.__handleQuit)
|
|
self.quitButton.reparentTo(base.a2dBottomRight)
|
|
self.languageButton = DirectButton(relief=None, image=(quitHover, quitHover, quitHover), text=TTLocalizer.LanguageButtonText, text_font=ToontownGlobals.getSignFont(), text_fg=(0.977, 0.816, 0.133, 1), text_scale=TTLocalizer.AClanguageButton, text_pos=(0, -0.025), pos=(0.25, 0, 0.075), image_scale=1.05, image1_scale=1.05, image2_scale=1.05, scale=1.05, command=self.openLanguageGui)
|
|
self.languageButton.reparentTo(base.a2dBottomLeft)
|
|
gui.removeNode()
|
|
gui2.removeNode()
|
|
newGui.removeNode()
|
|
self.panelList = []
|
|
used_position_indexs = []
|
|
for av in self.avatarList:
|
|
panel = AvatarChoice.AvatarChoice(av, position=av.position)
|
|
panel.setPos(POSITIONS[av.position])
|
|
used_position_indexs.append(av.position)
|
|
self.panelList.append(panel)
|
|
|
|
for panelNum in range(0, MAX_AVATARS):
|
|
if panelNum not in used_position_indexs:
|
|
panel = AvatarChoice.AvatarChoice(position=panelNum)
|
|
panel.setPos(POSITIONS[panelNum])
|
|
self.panelList.append(panel)
|
|
|
|
if len(self.avatarList) > 0:
|
|
self.initLookAtInfo()
|
|
self.isLoaded = 1
|
|
|
|
def getLookAtPosition(self, toonHead, toonidx):
|
|
lookAtChoice = random.random()
|
|
if len(self.used_panel_indexs) == 1:
|
|
lookFwdPercent = 0.33
|
|
lookAtOthersPercent = 0
|
|
else:
|
|
lookFwdPercent = 0.2
|
|
if len(self.used_panel_indexs) == 2:
|
|
lookAtOthersPercent = 0.4
|
|
else:
|
|
lookAtOthersPercent = 0.65
|
|
lookRandomPercent = 1.0 - lookFwdPercent - lookAtOthersPercent
|
|
if lookAtChoice < lookFwdPercent:
|
|
self.IsLookingAt[toonidx] = 'f'
|
|
return Vec3(0, 1.5, 0)
|
|
elif lookAtChoice < lookRandomPercent + lookFwdPercent or len(self.used_panel_indexs) == 1:
|
|
self.IsLookingAt[toonidx] = 'r'
|
|
return toonHead.getRandomForwardLookAtPoint()
|
|
else:
|
|
other_toon_idxs = []
|
|
for i in range(len(self.IsLookingAt)):
|
|
if self.IsLookingAt[i] == toonidx:
|
|
other_toon_idxs.append(i)
|
|
|
|
if len(other_toon_idxs) == 1:
|
|
IgnoreStarersPercent = 0.4
|
|
else:
|
|
IgnoreStarersPercent = 0.2
|
|
NoticeStarersPercent = 0.5
|
|
bStareTargetTurnsToMe = 0
|
|
if len(other_toon_idxs) == 0 or random.random() < IgnoreStarersPercent:
|
|
other_toon_idxs = []
|
|
for i in self.used_panel_indexs:
|
|
if i != toonidx:
|
|
other_toon_idxs.append(i)
|
|
|
|
if random.random() < NoticeStarersPercent:
|
|
bStareTargetTurnsToMe = 1
|
|
if len(other_toon_idxs) == 0:
|
|
return toonHead.getRandomForwardLookAtPoint()
|
|
else:
|
|
lookingAtIdx = random.choice(other_toon_idxs)
|
|
if bStareTargetTurnsToMe:
|
|
self.IsLookingAt[lookingAtIdx] = toonidx
|
|
otherToonHead = None
|
|
for panel in self.panelList:
|
|
if panel.position == lookingAtIdx:
|
|
otherToonHead = panel.headModel
|
|
|
|
otherToonHead.doLookAroundToStareAt(otherToonHead, self.getLookAtToPosVec(lookingAtIdx, toonidx))
|
|
self.IsLookingAt[toonidx] = lookingAtIdx
|
|
return self.getLookAtToPosVec(toonidx, lookingAtIdx)
|
|
return
|
|
|
|
def getLookAtToPosVec(self, fromIdx, toIdx):
|
|
x = -(POSITIONS[toIdx][0] - POSITIONS[fromIdx][0])
|
|
y = POSITIONS[toIdx][1] - POSITIONS[fromIdx][1]
|
|
z = POSITIONS[toIdx][2] - POSITIONS[fromIdx][2]
|
|
return Vec3(x, y, z)
|
|
|
|
def initLookAtInfo(self):
|
|
self.used_panel_indexs = []
|
|
for panel in self.panelList:
|
|
if panel.dna != None:
|
|
self.used_panel_indexs.append(panel.position)
|
|
|
|
if len(self.used_panel_indexs) == 0:
|
|
return
|
|
self.IsLookingAt = []
|
|
for i in range(MAX_AVATARS):
|
|
self.IsLookingAt.append('f')
|
|
|
|
for panel in self.panelList:
|
|
if panel.dna != None:
|
|
panel.headModel.setLookAtPositionCallbackArgs((self, panel.headModel, panel.position))
|
|
|
|
return
|
|
|
|
def unload(self):
|
|
if self.isLoaded == 0:
|
|
return None
|
|
cleanupDialog('globalDialog')
|
|
for panel in self.panelList:
|
|
panel.destroy()
|
|
|
|
del self.panelList
|
|
self.title.removeNode()
|
|
del self.title
|
|
self.quitButton.destroy()
|
|
del self.quitButton
|
|
self.languageButton.destroy()
|
|
del self.languageButton
|
|
self.pickAToonBG.removeNode()
|
|
del self.pickAToonBG
|
|
del self.avatarList
|
|
self.ignoreAll()
|
|
self.isLoaded = 0
|
|
ModelPool.garbageCollect()
|
|
TexturePool.garbageCollect()
|
|
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
|
|
return None
|
|
|
|
def __handlePanelDone(self, panelDoneStatus, panelChoice = 0):
|
|
self.doneStatus = {}
|
|
self.doneStatus['mode'] = panelDoneStatus
|
|
self.choice = panelChoice
|
|
if panelDoneStatus == 'chose':
|
|
self.__handleChoice()
|
|
elif panelDoneStatus == 'nameIt':
|
|
self.__handleChoice()
|
|
elif panelDoneStatus == 'delete':
|
|
self.__handleChoice()
|
|
elif panelDoneStatus == 'create':
|
|
self.__handleChoice()
|
|
|
|
def __handleChoice(self):
|
|
base.transitions.fadeOut(finishIval=EventInterval(self.doneEvent, [self.doneStatus]))
|
|
|
|
def __handleQuit(self):
|
|
cleanupDialog('globalDialog')
|
|
self.doneStatus = {'mode': 'exit'}
|
|
messenger.send(self.doneEvent, [self.doneStatus])
|
|
|
|
def getChoice(self):
|
|
return self.choice
|
|
|
|
def openLanguageGui(self):
|
|
self.exit()
|
|
LanguageSelector.LanguageSelector(self.enter).create() |