mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
added sendDeleteEvent func and LogicalZoneChange mechanism
This commit is contained in:
parent
125c2dffbb
commit
bfb064b72e
@ -11,6 +11,7 @@ class DistributedObjectAI(DirectObject.DirectObject):
|
|||||||
"""Distributed Object class:"""
|
"""Distributed Object class:"""
|
||||||
|
|
||||||
notify = directNotify.newCategory("DistributedObjectAI")
|
notify = directNotify.newCategory("DistributedObjectAI")
|
||||||
|
QuietZone = 1
|
||||||
|
|
||||||
def __init__(self, air):
|
def __init__(self, air):
|
||||||
try:
|
try:
|
||||||
@ -25,6 +26,11 @@ class DistributedObjectAI(DirectObject.DirectObject):
|
|||||||
# init doId pre-allocated flag
|
# init doId pre-allocated flag
|
||||||
self.__preallocDoId = 0
|
self.__preallocDoId = 0
|
||||||
|
|
||||||
|
# used to track zone changes across the quiet zone
|
||||||
|
# NOTE: the quiet zone is defined in OTP, but we need it
|
||||||
|
# here.
|
||||||
|
self.lastNonQuietZone = None
|
||||||
|
|
||||||
# These are used to implement beginBarrier().
|
# These are used to implement beginBarrier().
|
||||||
self.__nextBarrierContext = 0
|
self.__nextBarrierContext = 0
|
||||||
self.__barriers = {}
|
self.__barriers = {}
|
||||||
@ -37,10 +43,17 @@ class DistributedObjectAI(DirectObject.DirectObject):
|
|||||||
# print ("Destructing: " + self.__class__.__name__)
|
# print ("Destructing: " + self.__class__.__name__)
|
||||||
|
|
||||||
def getDeleteEvent(self):
|
def getDeleteEvent(self):
|
||||||
|
# this is sent just before we get deleted
|
||||||
if hasattr(self, 'doId'):
|
if hasattr(self, 'doId'):
|
||||||
return 'distObjDelete-%s' % self.doId
|
return 'distObjDelete-%s' % self.doId
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def sendDeleteEvent(self):
|
||||||
|
# this is called just before we get deleted
|
||||||
|
delEvent = self.getDeleteEvent()
|
||||||
|
if delEvent:
|
||||||
|
messenger.send(delEvent)
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
"""
|
"""
|
||||||
Inheritors should redefine this to take appropriate action on delete
|
Inheritors should redefine this to take appropriate action on delete
|
||||||
@ -109,13 +122,36 @@ class DistributedObjectAI(DirectObject.DirectObject):
|
|||||||
self.air.sendSetZone(self, zoneId)
|
self.air.sendSetZone(self, zoneId)
|
||||||
|
|
||||||
def getZoneChangeEvent(self):
|
def getZoneChangeEvent(self):
|
||||||
|
# this event is generated whenever this object changes zones.
|
||||||
|
# arguments are newZoneId, oldZoneId
|
||||||
|
# includes the quiet zone.
|
||||||
return 'DOChangeZone-%s' % self.doId
|
return 'DOChangeZone-%s' % self.doId
|
||||||
|
def getLogicalZoneChangeEvent(self):
|
||||||
|
# this event is generated whenever this object changes to a
|
||||||
|
# non-quiet-zone zone.
|
||||||
|
# arguments are newZoneId, oldZoneId
|
||||||
|
# does not include the quiet zone.
|
||||||
|
return 'DOLogicalChangeZone-%s' % self.doId
|
||||||
|
|
||||||
def handleZoneChange(self, newZoneId, oldZoneId):
|
def handleZoneChange(self, newZoneId, oldZoneId):
|
||||||
assert oldZoneId == self.zoneId
|
assert oldZoneId == self.zoneId
|
||||||
self.zoneId = newZoneId
|
self.zoneId = newZoneId
|
||||||
self.air.changeDOZoneInTables(self, newZoneId, oldZoneId)
|
self.air.changeDOZoneInTables(self, newZoneId, oldZoneId)
|
||||||
messenger.send(self.getZoneChangeEvent(), [newZoneId, oldZoneId])
|
messenger.send(self.getZoneChangeEvent(), [newZoneId, oldZoneId])
|
||||||
|
# if we are not going into the quiet zone, send a 'logical' zone change
|
||||||
|
# message
|
||||||
|
if newZoneId != DistributedObjectAI.QuietZone:
|
||||||
|
lastLogicalZone = oldZoneId
|
||||||
|
if oldZoneId == DistributedObjectAI.QuietZone:
|
||||||
|
lastLogicalZone = self.lastNonQuietZone
|
||||||
|
self.handleLogicalZoneChange(newZoneId, lastLogicalZone)
|
||||||
|
self.lastNonQuietZone = newZoneId
|
||||||
|
|
||||||
|
def handleLogicalZoneChange(self, newZoneId, oldZoneId):
|
||||||
|
"""this function gets called as if we never go through the
|
||||||
|
quiet zone"""
|
||||||
|
messenger.send(self.getLogicalZoneChangeEvent(),
|
||||||
|
[newZoneId, oldZoneId])
|
||||||
|
|
||||||
def getRender(self):
|
def getRender(self):
|
||||||
# note that this will return a different node if we change zones
|
# note that this will return a different node if we change zones
|
||||||
|
Loading…
x
Reference in New Issue
Block a user