197 lines
5.5 KiB
Python
197 lines
5.5 KiB
Python
from direct.interval.IntervalGlobal import *
|
|
|
|
from ClickablePopup import *
|
|
from _constants import *
|
|
|
|
|
|
class Nametag(ClickablePopup):
|
|
CName = 1
|
|
CSpeech = 2
|
|
CThought = 4
|
|
|
|
def __init__(self, wordwrap):
|
|
ClickablePopup.__init__(self)
|
|
|
|
self.m_avatar = None
|
|
self.m_ival = None
|
|
self.m_popup_region = None
|
|
self.m_seq = 0
|
|
self.m_mouse_watcher = None
|
|
self.m_draw_order = 0
|
|
self.m_has_draw_order = False
|
|
|
|
self.m_contents = CFSpeech | CFThought | CFQuicktalker
|
|
self.m_active = True
|
|
self.m_field_12 = 0
|
|
self.m_group = None
|
|
self.m_wordwrap = wordwrap
|
|
self.m_has_region = False
|
|
self.m_ival_name = 'flash-%d' % id(self)
|
|
|
|
def clearAvatar(self):
|
|
self.m_avatar = None
|
|
|
|
def clearDrawOrder(self):
|
|
self.m_has_draw_order = False
|
|
self.updateContents()
|
|
|
|
def click(self):
|
|
if self.m_group:
|
|
self.m_group.click()
|
|
|
|
def deactivate(self):
|
|
if self.m_has_region:
|
|
if self.m_mouse_watcher:
|
|
self.m_popup_region.deactivate()
|
|
self.m_mouse_watcher.removeRegion(self.m_popup_region)
|
|
self.m_mouse_watcher = None
|
|
|
|
self.m_has_region = None
|
|
|
|
self.m_seq = 0
|
|
|
|
def determineContents(self):
|
|
if self.m_group and self.m_group.isManaged():
|
|
v3 = self.m_contents & self.m_group.getContents()
|
|
v4 = self.m_group.m_chat_flags
|
|
|
|
if v4 & CFSpeech:
|
|
if v3 & Nametag.CSpeech:
|
|
return Nametag.CSpeech
|
|
|
|
elif v4 & CFThought and v3 & Nametag.CThought:
|
|
return Nametag.CThought
|
|
|
|
if v3 & Nametag.CName and self.m_group.getName() and NametagGlobals._master_nametags_visible:
|
|
return Nametag.CName
|
|
|
|
return 0
|
|
|
|
def displayAsActive(self):
|
|
if not self.m_active:
|
|
return 0
|
|
|
|
if self.m_group:
|
|
return self.m_group.displayAsActive()
|
|
|
|
else:
|
|
return NametagGlobals._master_nametags_active
|
|
|
|
def setAvatar(self, avatar):
|
|
self.m_avatar = avatar
|
|
|
|
def getAvatar(self):
|
|
return self.m_avatar
|
|
|
|
def setChatWordwrap(self, wordwrap):
|
|
self.m_wordwrap = wordwrap
|
|
|
|
def getChatWordwrap(self):
|
|
return self.m_wordwrap
|
|
|
|
def getGroup(self):
|
|
return self.m_group
|
|
|
|
def getState(self):
|
|
if self.m_group:
|
|
if not (self.m_active and self.m_group.displayAsActive()):
|
|
return PGButton.SInactive
|
|
|
|
elif not (self.m_active and NametagGlobals._master_nametags_active):
|
|
return PGButton.SInactive
|
|
|
|
return self.m_state
|
|
|
|
def hasGroup(self):
|
|
return self.m_group is not None
|
|
|
|
def setActive(self, active):
|
|
self.m_active = active
|
|
self.updateContents()
|
|
|
|
def isActive(self):
|
|
return self.m_active
|
|
|
|
def isGroupManaged(self):
|
|
return self.m_group and self.m_group.isManaged()
|
|
|
|
def keepRegion(self):
|
|
if self.m_popup_region:
|
|
self.m_seq = self.m_group.getRegionSeq()
|
|
|
|
def manage(self, manager):
|
|
self.updateContents()
|
|
|
|
def unmanage(self, manager):
|
|
self.updateContents()
|
|
self.deactivate()
|
|
|
|
def setContents(self, contents):
|
|
self.m_contents = contents
|
|
self.updateContents()
|
|
|
|
def setDrawOrder(self, draw_order):
|
|
self.m_draw_order = draw_order
|
|
self.m_has_draw_order = True
|
|
self.updateContents()
|
|
|
|
def setRegion(self, frame, sort):
|
|
if self.m_popup_region:
|
|
self.m_popup_region.setFrame(frame)
|
|
|
|
else:
|
|
self.m_popup_region = self._createRegion(frame)
|
|
|
|
self.m_popup_region.setSort(int(sort))
|
|
self.m_seq = self.m_group.getRegionSeq()
|
|
|
|
def startFlash(self, np):
|
|
self.stopFlash()
|
|
self.m_ival = Sequence(
|
|
np.colorInterval(0.5, Vec4(1.0, 1.0, 1.0, 0.5), startColor=Vec4(1.0, 1.0, 1.0, 1.0), blendType='easeOut'),
|
|
np.colorInterval(0.5, Vec4(1.0, 1.0, 1.0, 1.0), startColor=Vec4(1.0, 1.0, 1.0, 0.5), blendType='easeIn'))
|
|
self.m_ival.loop()
|
|
|
|
def stopFlash(self):
|
|
if self.m_ival:
|
|
self.m_ival.finish()
|
|
self.m_ival = None
|
|
|
|
def updateRegion(self, seq):
|
|
if seq == self.m_seq:
|
|
is_active = self.displayAsActive()
|
|
|
|
else:
|
|
is_active = False
|
|
|
|
if self.m_has_region:
|
|
if self.m_mouse_watcher != NametagGlobals._mouse_watcher:
|
|
if self.m_mouse_watcher:
|
|
self.m_popup_region.deactivate()
|
|
self.m_mouse_watcher.removeRegion(self.m_popup_region)
|
|
|
|
self.m_has_region = False
|
|
self.setState(PGButton.SReady)
|
|
|
|
if is_active:
|
|
if (not self.m_has_region) and self.m_popup_region:
|
|
if self.m_mouse_watcher != NametagGlobals._mouse_watcher:
|
|
self.m_mouse_watcher = NametagGlobals._mouse_watcher
|
|
|
|
if self.m_mouse_watcher:
|
|
self.m_popup_region.activate()
|
|
self.m_mouse_watcher.addRegion(self.m_popup_region)
|
|
|
|
self.m_has_region = True
|
|
|
|
elif self.m_has_region:
|
|
if self.m_mouse_watcher and self.m_popup_region:
|
|
self.m_popup_region.deactivate()
|
|
self.m_mouse_watcher.removeRegion(self.m_popup_region)
|
|
|
|
self.m_has_region = False
|
|
self.m_mouse_watcher = None
|
|
self.setState(PGButton.SReady)
|
|
|
|
def upcastToPandaNode(self):
|
|
return self
|