mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 11:28:17 -04:00
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
|
from MessengerGlobal import *
|
|
from DirectNotifyGlobal import *
|
|
from PythonUtil import *
|
|
|
|
class DirectObject:
|
|
"""
|
|
This is the class that all Direct/SAL classes should inherit from
|
|
"""
|
|
#def __del__(self):
|
|
# print "Destructing: ", self.__class__.__name__
|
|
|
|
# Event Handling
|
|
def __initEvents(self):
|
|
# this function exists because:
|
|
# - DirectObject does not have a constructor, and adding one
|
|
# would involve touching many, many files
|
|
# - a constructor that creates self.events would cause every
|
|
# DirectObject to incur the cost of an additional function
|
|
# call and dictionary creation
|
|
# - DirectObjects that do not use the messenger should not have
|
|
# an unused dictionary taking up space
|
|
# - the speed hit of calling this function on calls to accept,
|
|
# ignore, etc. is negligible, since they are not called often
|
|
if not hasattr(self, "events"):
|
|
# list of events that this object is accepting
|
|
# we use a dictionary to avoid linear searches
|
|
self.events = {}
|
|
|
|
def accept(self, event, method, extraArgs=[]):
|
|
self.__initEvents()
|
|
ifAbsentPut(self.events, event, None)
|
|
messenger.accept(event, self, method, extraArgs, 1)
|
|
|
|
def acceptOnce(self, event, method, extraArgs=[]):
|
|
self.__initEvents()
|
|
ifAbsentPut(self.events, event, None)
|
|
messenger.accept(event, self, method, extraArgs, 0)
|
|
|
|
def _INTERNAL_acceptOnceExpired(self, event):
|
|
""" this should only be called by the messenger """
|
|
if self.events.has_key(event):
|
|
del self.events[event]
|
|
|
|
def ignore(self, event):
|
|
self.__initEvents()
|
|
if self.events.has_key(event):
|
|
del self.events[event]
|
|
messenger.ignore(event, self)
|
|
|
|
def ignoreAll(self):
|
|
self.__initEvents()
|
|
for event in self.events.keys():
|
|
messenger.ignore(event, self)
|
|
self.events.clear()
|
|
|
|
def isAccepting(self, event):
|
|
self.__initEvents()
|
|
return self.events.has_key(event)
|
|
|
|
def isIgnoring(self, event):
|
|
return not self.isAccepting(event)
|