historical/toontown-classic.git/toontown/toon/PlayerInfoPanel.py
2024-01-16 11:20:27 -06:00

400 lines
15 KiB
Python

from panda3d.core import *
from direct.gui.DirectGui import *
from direct.showbase import DirectObject
from toontown.friends import FriendHandle
from otp.avatar import Avatar
from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
from toontown.friends import ToontownFriendSecret
import ToonAvatarDetailPanel
import AvatarPanelBase
import PlayerDetailPanel
from otp.otpbase import OTPGlobals
GAME_LOGO_NAMES = {'Default': 'GameLogo_Unknown',
'Disney XD': 'GameLogo_XD',
'Toontown': 'GameLogo_Toontown',
'Pirates': 'GameLogo_Pirates'}
GAME_LOGO_FILE = 'phase_3/models/misc/game_logo_card'
class PlayerInfoPanel(AvatarPanelBase.AvatarPanelBase):
notify = DirectNotifyGlobal.directNotify.newCategory('PlayerInfoPanel')
def __init__(self, playerId):
from toontown.friends import FriendsListPanel
AvatarPanelBase.AvatarPanelBase.__init__(self, None, FriendsListPanel=FriendsListPanel)
self.setup(playerId)
self.avId = 0
self.avName = None
return
def setup(self, playerId):
from toontown.friends import FriendsListPanel
self.playerId = playerId
self.playerInfo = base.cr.playerFriendsManager.playerId2Info.get(playerId)
if not self.playerInfo:
return
avId = None
avatar = None
if playerId:
if self.playerInfo.onlineYesNo:
avId = self.playerInfo.avatarId
avatar = base.cr.playerFriendsManager.identifyFriend(avId)
self.notify.debug('Opening player panel, %s' % self.playerInfo)
self.avatar = avatar
self.noAv = 0
if not avatar:
self.noAv = 1
self.accountText = None
self.listName = ' '
world = self.playerInfo.location
if self.playerInfo.onlineYesNo == 0:
world = TTLocalizer.AvatarDetailPanelRealLife
self.accountText = self.playerInfo.playerName
if self.noAv:
avButtonState = DGG.DISABLED
else:
avButtonState = DGG.NORMAL
self.online = self.playerInfo.onlineYesNo
if self.online:
onlineButtonState = DGG.NORMAL
else:
onlineButtonState = DGG.DISABLED
base.localAvatar.obscureFriendsListButton(1)
gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui')
self.frame = DirectFrame(
image=gui.find('**/avatar_panel'),
relief=None,
pos=(1.1, 100, 0.525))
disabledImageColor = Vec4(1, 1, 1, 0.4)
text0Color = Vec4(1, 1, 1, 1)
text1Color = Vec4(0.5, 1, 0.5, 1)
text2Color = Vec4(1, 1, 0.5, 1)
text3Color = Vec4(0.6, 0.6, 0.6, 1)
if self.playerInfo:
logoImageName = GAME_LOGO_NAMES['Default']
if not self.playerInfo.onlineYesNo:
logoImageName = GAME_LOGO_NAMES['Default']
elif self.playerInfo.location in GAME_LOGO_NAMES:
logoImageName = GAME_LOGO_NAMES[self.playerInfo.location]
model = loader.loadModel(GAME_LOGO_FILE)
logoImage = model.find('**/' + logoImageName)
del model
self.outsideLogo = DirectLabel(
parent=self.frame,
relief=None,
image=logoImage,
pos=(0.0125, 0.0, 0.25),
image_color=(1.0, 1.0, 1.0, 1),
scale=(0.175, 1, 0.175))
font = ToontownGlobals.getInterfaceFont()
textScale = 0.047
textWrap = 7.5
textAlign = TextNode.ACenter
textPos = (0, 0)
self.nameLabel = DirectLabel(
parent=self.frame,
pos=(0.0125, 0, 0.385),
relief=None,
text=self.listName,
text_font=font,
text_fg=Vec4(0, 0, 0, 1),
text_pos=textPos,
text_scale=textScale,
text_wordwrap=textWrap,
text_align=textAlign,
text_shadow=(1, 1, 1, 1))
if self.accountText:
self.accountLabel = DirectLabel(
parent=self.frame,
pos=(0.0125, 0, 0.385),
text=self.accountText,
relief=None,
text_font=font,
text_fg=Vec4(0, 0, 0, 1),
text_pos=textPos,
text_scale=textScale,
text_wordwrap=textWrap,
text_align=textAlign,
text_shadow=(1, 1, 1, 1))
self.accountLabel.show()
self.closeButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/CloseBtn_UP'),
gui.find('**/CloseBtn_DN'),
gui.find('**/CloseBtn_Rllvr'),
gui.find('**/CloseBtn_UP')),
relief=None,
pos=(0.157644, 0, -0.379167),
command=self.__handleClose)
self.friendButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Frnds_Btn_UP'),
gui.find('**/Frnds_Btn_DN'),
gui.find('**/Frnds_Btn_RLVR'),
gui.find('**/Frnds_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
text=TTLocalizer.AvatarPanelFriends,
text_scale=0.06,
pos=(-0.103, 0, 0.133),
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_pos=(0.06, -0.02),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleFriend)
self.friendButton['state'] = DGG.DISABLED
self.goToButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Go2_Btn_UP'),
gui.find('**/Go2_Btn_DN'),
gui.find('**/Go2_Btn_RLVR'),
gui.find('**/Go2_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103, 0, 0.045),
text=TTLocalizer.AvatarPanelGoTo,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=0.06,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleGoto)
self.goToButton['state'] = DGG.DISABLED
self.whisperButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_ChtBtn_UP'),
gui.find('**/ChtBx_ChtBtn_DN'),
gui.find('**/ChtBx_ChtBtn_RLVR'),
gui.find('**/ChtBx_ChtBtn_UP')),
image3_color=disabledImageColor,
relief=None,
image_scale=0.9,
pos=(-0.103, 0, -0.0375),
text=TTLocalizer.AvatarPanelWhisper,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=TTLocalizer.PIPwisperButton,
text_pos=(0.06, -0.0125),
text_align=TextNode.ALeft,
state=onlineButtonState,
command=self.__handleWhisper)
self.secretsButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_ChtBtn_UP'),
gui.find('**/ChtBx_ChtBtn_DN'),
gui.find('**/ChtBx_ChtBtn_RLVR'),
gui.find('**/ChtBx_ChtBtn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103, 0, -0.13),
text=TTLocalizer.AvatarPanelSecrets,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=TTLocalizer.PIPsecretsButton,
text_pos=(0.055, -0.01),
text_align=TextNode.ALeft,
state=avButtonState,
command=self.__handleSecrets)
self.secretsButton['state'] = DGG.DISABLED
if not base.localAvatar.isTeleportAllowed():
self.goToButton['state'] = DGG.DISABLED
ignoreStr, ignoreCmd, ignoreSize = self.getIgnoreButtonInfo()
self.ignoreButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/Ignore_Btn_UP'),
gui.find('**/Ignore_Btn_DN'),
gui.find('**/Ignore_Btn_RLVR'),
gui.find('**/Ignore_Btn_UP')),
image3_color=disabledImageColor,
image_scale=0.9,
relief=None,
pos=(-0.103697, 0, -0.21),
text=ignoreStr,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=ignoreSize,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
state=avButtonState,
command=ignoreCmd)
if base.cr.productName not in ['JP', 'DE', 'BR', 'FR']:
self.reportButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/report_BtnUP'),
gui.find('**/report_BtnDN'),
gui.find('**/report_BtnRLVR'),
gui.find('**/report_BtnUP')),
image3_color=disabledImageColor,
image_scale=0.65,
relief=None,
pos=(-0.103, 0, -0.29738),
text=TTLocalizer.AvatarPanelReport,
text0_fg=text0Color,
text1_fg=text1Color,
text2_fg=text2Color,
text3_fg=text3Color,
text_scale=0.06,
text_pos=(0.06, -0.015),
text_align=TextNode.ALeft,
command=self.handleReport)
self.detailButton = DirectButton(
parent=self.frame,
image=(
gui.find('**/ChtBx_BackBtn_UP'),
gui.find('**/ChtBx_BackBtn_DN'),
gui.find('**/ChtBx_BackBtn_Rllvr'),
gui.find('**/ChtBx_BackBtn_UP')),
relief=None,
text=('', TTLocalizer.PlayerPanelDetail,
TTLocalizer.PlayerPanelDetail, ''),
text_fg=text2Color,
text_shadow=(0, 0, 0, 1),
text_scale=TTLocalizer.PIPdetailButton,
text_pos=(0.085, 0.055),
text_align=TextNode.ACenter,
pos=(-0.133773, 0, -0.387132),
state=DGG.NORMAL,
command=self.__handleDetails)
gui.removeNode()
menuX = -0.05
menuScale = 0.064
self.frame.show()
messenger.send('avPanelDone')
self.accept('playerOnline', self.__handlePlayerChanged)
self.accept('playerOffline', self.__handlePlayerChanged)
self.accept(OTPGlobals.PlayerFriendUpdateEvent, self.__handlePlayerChanged)
self.accept(OTPGlobals.PlayerFriendRemoveEvent, self.__handlePlayerUnfriend)
return
def disableAll(self):
self.detailButton['state'] = DGG.DISABLED
self.ignoreButton['state'] = DGG.DISABLED
if base.cr.productName not in ['JP',
'DE',
'BR',
'FR']:
self.reportButton['state'] = DGG.DISABLED
self.goToButton['state'] = DGG.DISABLED
self.secretsButton['state'] = DGG.DISABLED
self.whisperButton['state'] = DGG.DISABLED
self.friendButton['state'] = DGG.DISABLED
self.closeButton['state'] = DGG.DISABLED
def cleanup(self):
self.unsetup()
self.ignore('playerOnline')
self.ignore('playerOffline')
self.ignore(OTPGlobals.PlayerFriendUpdateEvent)
self.ignore(OTPGlobals.PlayerFriendRemoveEvent)
AvatarPanelBase.AvatarPanelBase.cleanup(self)
def unsetup(self):
if not hasattr(self, 'frame') or self.frame == None:
return
PlayerDetailPanel.unloadPlayerDetail()
self.frame.destroy()
del self.frame
self.frame = None
base.localAvatar.obscureFriendsListButton(-1)
self.laffMeter = None
self.ignore('updateLaffMeter')
if hasattr(self.avatar, 'bFake') and self.avatar.bFake:
self.avatar.delete()
return
def __handleGoto(self):
if base.localAvatar.isTeleportAllowed():
base.localAvatar.chatMgr.noWhisper()
messenger.send('gotoAvatar', [self.avId, self.avName, self.avDisableName])
def __handleWhisper(self):
if self.noAv:
base.localAvatar.chatMgr.whisperTo(self.listName, 0, self.playerId)
else:
base.localAvatar.chatMgr.whisperTo(self.avName, self.avId, self.playerId)
def __handleSecrets(self):
base.localAvatar.chatMgr.noWhisper()
ToontownFriendSecret.showFriendSecret(ToontownFriendSecret.BothSecrets)
def __handleFriend(self):
base.localAvatar.chatMgr.noWhisper()
self.__getAvInfo()
messenger.send('friendAvatar', [self.avId, self.avName, self.avDisableName])
def __getAvInfo(self):
if self.playerId:
self.avId = self.playerInfo.avatarId
if self.avId:
avatar = base.cr.playerFriendsManager.identifyFriend(self.avId)
if avatar:
self.avName = avatar.getName()
if not self.avDisableName:
self.avDisableName = avatar.uniqueName('disable')
def __handleDetails(self):
base.localAvatar.chatMgr.noWhisper()
self.__getAvInfo()
messenger.send('playerDetails', [self.avId, self.avName, self.playerId])
def handleDisableAvatar(self):
pass
def __handlePlayerChanged(self, playerId, info = None):
if playerId == self.playerId:
self.unsetup()
self.setup(playerId)
def __handlePlayerUnfriend(self, playerId):
if playerId == self.playerId:
self.__handleClose()
def __handleClose(self):
self.cleanup()
AvatarPanelBase.currentAvatarPanel = None
if self.friendsListShown:
self.FriendsListPanel.showFriendsList()
return
def getAvId(self):
if hasattr(self, 'avatar'):
if self.avatar:
return self.avatar.doId
return None
def getPlayerId(self):
if hasattr(self, 'playerId'):
return self.playerId
return None
def isHidden(self):
if not hasattr(self, 'frame') or not self.frame:
return 1
return self.frame.isHidden()
def getType(self):
return 'player'