mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
*** empty log message ***
This commit is contained in:
parent
484fb2bd52
commit
e4c5381877
72
direct/src/distributed/DistributedObjectBase.py
Executable file
72
direct/src/distributed/DistributedObjectBase.py
Executable file
@ -0,0 +1,72 @@
|
|||||||
|
|
||||||
|
from direct.showbase.PandaObject import PandaObject
|
||||||
|
#from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||||
|
|
||||||
|
class DistributedObjectBase(PandaObject):
|
||||||
|
"""
|
||||||
|
The Distributed Object class is the base class for all network based
|
||||||
|
(i.e. distributed) objects. These will usually (always?) have a
|
||||||
|
dclass entry in a *.dc file.
|
||||||
|
"""
|
||||||
|
notify = directNotify.newCategory("DistributedObjectBase")
|
||||||
|
|
||||||
|
def __init__(self, cr):
|
||||||
|
assert self.notify.debugStateCall(self)
|
||||||
|
self.cr = cr
|
||||||
|
self.children = {}
|
||||||
|
self.parentId = None
|
||||||
|
self.zoneId = None
|
||||||
|
|
||||||
|
if __debug__:
|
||||||
|
def status(self, indent=0):
|
||||||
|
"""
|
||||||
|
print out "doId(parentId,zoneId) className"
|
||||||
|
"""
|
||||||
|
spaces=' '*(indent+2)
|
||||||
|
try:
|
||||||
|
print "%s%s:"%(
|
||||||
|
' '*indent, self.__class__.__name__)
|
||||||
|
print "%sfrom DistributedObject doId:%s, parent:%s, zone:%s"%(
|
||||||
|
spaces,
|
||||||
|
self.doId, self.parentId, self.zoneId),
|
||||||
|
except Exception, e: print "%serror printing status"%(spaces,), e
|
||||||
|
|
||||||
|
def getLocation(self):
|
||||||
|
try:
|
||||||
|
if self.parentId == 0 and self.zoneId == 0:
|
||||||
|
return None
|
||||||
|
# This is a -1 stuffed into a uint32
|
||||||
|
if self.parentId == 0xffffffff and self.zoneId == 0xffffffff:
|
||||||
|
return None
|
||||||
|
return (self.parentId, self.zoneId)
|
||||||
|
except AttributeError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def handleChildArrive(self, childObj, zoneId):
|
||||||
|
self.notify.debugCall()
|
||||||
|
# A new child has just setLocation beneath us. Give us a
|
||||||
|
# chance to run code when a new child sets location to us. For
|
||||||
|
# example, we may want to scene graph reparent the child to
|
||||||
|
# some subnode we own.
|
||||||
|
## zone=self.children.setdefault(zoneId, {})
|
||||||
|
## zone[childObj.doId]=childObj
|
||||||
|
|
||||||
|
# Inheritors should override
|
||||||
|
pass
|
||||||
|
|
||||||
|
def handleChildLeave(self, childObj, zoneId):
|
||||||
|
self.notify.debugCall()
|
||||||
|
# A child is about to setLocation away from us. Give us a
|
||||||
|
# chance to run code just before a child sets location away from us.
|
||||||
|
## zone=self.children[zoneId]
|
||||||
|
## del zone[childObj.doId]
|
||||||
|
## if not len(zone):
|
||||||
|
## del self.children[zoneId]
|
||||||
|
|
||||||
|
# Inheritors should override
|
||||||
|
pass
|
||||||
|
|
||||||
|
def getParentObj(self):
|
||||||
|
if self.parentId is None:
|
||||||
|
return None
|
||||||
|
return self.cr.doId2do.get(self.parentId)
|
Loading…
x
Reference in New Issue
Block a user