mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-27 05:32:41 -06:00
98 lines
3.7 KiB
Python
98 lines
3.7 KiB
Python
|
from direct.gui.DirectGui import *
|
||
|
from SCTerminal import SCTerminal
|
||
|
from otp.otpbase.OTPLocalizer import EmoteList, EmoteWhispers
|
||
|
from otp.avatar import Emote
|
||
|
SCEmoteMsgEvent = 'SCEmoteMsg'
|
||
|
SCEmoteNoAccessEvent = 'SCEmoteNoAccess'
|
||
|
|
||
|
def decodeSCEmoteWhisperMsg(emoteId, avName):
|
||
|
if emoteId >= len(EmoteWhispers):
|
||
|
return None
|
||
|
return EmoteWhispers[emoteId] % avName
|
||
|
|
||
|
|
||
|
class SCEmoteTerminal(SCTerminal):
|
||
|
|
||
|
def __init__(self, emoteId):
|
||
|
SCTerminal.__init__(self)
|
||
|
self.emoteId = emoteId
|
||
|
if not self.__ltHasAccess():
|
||
|
self.text = '?'
|
||
|
else:
|
||
|
self.text = EmoteList[self.emoteId]
|
||
|
|
||
|
def __ltHasAccess(self):
|
||
|
try:
|
||
|
lt = base.localAvatar
|
||
|
return lt.emoteAccess[self.emoteId]
|
||
|
except:
|
||
|
return 0
|
||
|
|
||
|
def __emoteEnabled(self):
|
||
|
if self.isWhispering():
|
||
|
return 1
|
||
|
return Emote.globalEmote.isEnabled(self.emoteId)
|
||
|
|
||
|
def finalize(self, dbArgs = {}):
|
||
|
if not self.isDirty():
|
||
|
return
|
||
|
args = {}
|
||
|
if not self.__ltHasAccess() or not self.__emoteEnabled():
|
||
|
args.update({'rolloverColor': (0, 0, 0, 0),
|
||
|
'pressedColor': (0, 0, 0, 0),
|
||
|
'rolloverSound': None,
|
||
|
'text_fg': self.getColorScheme().getTextDisabledColor() + (1,)})
|
||
|
if not self.__ltHasAccess():
|
||
|
args.update({'text_align': TextNode.ACenter})
|
||
|
elif not self.__emoteEnabled():
|
||
|
args.update({'clickSound': None})
|
||
|
self.lastEmoteEnableState = self.__emoteEnabled()
|
||
|
args.update(dbArgs)
|
||
|
SCTerminal.finalize(self, dbArgs=args)
|
||
|
return
|
||
|
|
||
|
def __emoteEnableStateChanged(self):
|
||
|
if self.isDirty():
|
||
|
self.notify.info("skipping __emoteEnableStateChanged; we're marked as dirty")
|
||
|
return
|
||
|
elif not hasattr(self, 'button'):
|
||
|
self.notify.error('SCEmoteTerminal is not marked as dirty, but has no button!')
|
||
|
btn = self.button
|
||
|
if self.__emoteEnabled():
|
||
|
rolloverColor = self.getColorScheme().getRolloverColor() + (1,)
|
||
|
pressedColor = self.getColorScheme().getPressedColor() + (1,)
|
||
|
btn.frameStyle[DGG.BUTTON_ROLLOVER_STATE].setColor(*rolloverColor)
|
||
|
btn.frameStyle[DGG.BUTTON_DEPRESSED_STATE].setColor(*pressedColor)
|
||
|
btn.updateFrameStyle()
|
||
|
btn['text_fg'] = self.getColorScheme().getTextColor() + (1,)
|
||
|
btn['rolloverSound'] = DGG.getDefaultRolloverSound()
|
||
|
btn['clickSound'] = DGG.getDefaultClickSound()
|
||
|
else:
|
||
|
btn.frameStyle[DGG.BUTTON_ROLLOVER_STATE].setColor(0, 0, 0, 0)
|
||
|
btn.frameStyle[DGG.BUTTON_DEPRESSED_STATE].setColor(0, 0, 0, 0)
|
||
|
btn.updateFrameStyle()
|
||
|
btn['text_fg'] = self.getColorScheme().getTextDisabledColor() + (1,)
|
||
|
btn['rolloverSound'] = None
|
||
|
btn['clickSound'] = None
|
||
|
return
|
||
|
|
||
|
def enterVisible(self):
|
||
|
SCTerminal.enterVisible(self)
|
||
|
if self.__ltHasAccess():
|
||
|
if hasattr(self, 'lastEmoteEnableState'):
|
||
|
if self.lastEmoteEnableState != self.__emoteEnabled():
|
||
|
self.invalidate()
|
||
|
if not self.isWhispering():
|
||
|
self.accept(Emote.globalEmote.EmoteEnableStateChanged, self.__emoteEnableStateChanged)
|
||
|
|
||
|
def exitVisible(self):
|
||
|
SCTerminal.exitVisible(self)
|
||
|
self.ignore(Emote.globalEmote.EmoteEnableStateChanged)
|
||
|
|
||
|
def handleSelect(self):
|
||
|
if not self.__ltHasAccess():
|
||
|
messenger.send(self.getEventName(SCEmoteNoAccessEvent))
|
||
|
elif self.__emoteEnabled():
|
||
|
SCTerminal.handleSelect(self)
|
||
|
messenger.send(self.getEventName(SCEmoteMsgEvent), [self.emoteId])
|