mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 11:28:17 -04:00
added XYH broadcast type
This commit is contained in:
parent
64aece121a
commit
11b51badff
@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
from ClockDelta import *
|
from ClockDelta import *
|
||||||
from direct.task import Task
|
from direct.task import Task
|
||||||
from direct.showbase.PythonUtil import randFloat
|
from direct.showbase.PythonUtil import randFloat, Enum
|
||||||
|
|
||||||
class DistributedSmoothNodeBase:
|
class DistributedSmoothNodeBase:
|
||||||
"""common base class for DistributedSmoothNode and DistributedSmoothNodeAI
|
"""common base class for DistributedSmoothNode and DistributedSmoothNodeAI
|
||||||
"""
|
"""
|
||||||
|
BroadcastTypes = Enum('FULL, XYH')
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -62,7 +64,19 @@ class DistributedSmoothNodeBase:
|
|||||||
def stopPosHprBroadcast(self):
|
def stopPosHprBroadcast(self):
|
||||||
taskMgr.remove(self.getPosHprBroadcastTaskName())
|
taskMgr.remove(self.getPosHprBroadcastTaskName())
|
||||||
|
|
||||||
def startPosHprBroadcast(self, period=.2, stagger=0):
|
def startPosHprBroadcast(self, period=.2, stagger=0, type=None):
|
||||||
|
BT = DistributedSmoothNodeBase.BroadcastTypes
|
||||||
|
if type is None:
|
||||||
|
type = BT.FULL
|
||||||
|
# set the broadcast type
|
||||||
|
self.broadcastType = type
|
||||||
|
|
||||||
|
broadcastFuncs = {
|
||||||
|
BT.FULL: self.d_broadcastPosHpr_FULL,
|
||||||
|
BT.XYH: self.d_broadcastPosHpr_XYH,
|
||||||
|
}
|
||||||
|
self.d_broadcastPosHpr = broadcastFuncs[self.broadcastType]
|
||||||
|
|
||||||
# Set stagger to non-zero to randomly delay the initial task execution
|
# Set stagger to non-zero to randomly delay the initial task execution
|
||||||
# over 'period' seconds, to spread out task processing over time
|
# over 'period' seconds, to spread out task processing over time
|
||||||
# when a large number of SmoothNodes are created simultaneously.
|
# when a large number of SmoothNodes are created simultaneously.
|
||||||
@ -103,7 +117,7 @@ class DistributedSmoothNodeBase:
|
|||||||
self.posHprBroadcast, taskName)
|
self.posHprBroadcast, taskName)
|
||||||
return Task.done
|
return Task.done
|
||||||
|
|
||||||
def d_broadcastPosHpr(self):
|
def d_broadcastPosHpr_FULL(self):
|
||||||
# send out the minimal bits to describe our new position
|
# send out the minimal bits to describe our new position
|
||||||
xyz = self.getPos()
|
xyz = self.getPos()
|
||||||
hpr = self.getHpr()
|
hpr = self.getHpr()
|
||||||
@ -183,3 +197,50 @@ class DistributedSmoothNodeBase:
|
|||||||
self.d_setSmPosHpr(self.__storeX, self.__storeY, self.__storeZ,
|
self.d_setSmPosHpr(self.__storeX, self.__storeY, self.__storeZ,
|
||||||
self.__storeH, self.__storeP, self.__storeR)
|
self.__storeH, self.__storeP, self.__storeR)
|
||||||
# print ("XYZHPR change")
|
# print ("XYZHPR change")
|
||||||
|
|
||||||
|
def d_broadcastPosHpr_XYH(self):
|
||||||
|
# send out the minimal bits to describe our new position
|
||||||
|
xyz = self.getPos()
|
||||||
|
h = self.getH()
|
||||||
|
|
||||||
|
if abs(self.__storeX - xyz[0]) > self.__epsilon:
|
||||||
|
self.__storeX = xyz[0]
|
||||||
|
newX = 1
|
||||||
|
else:
|
||||||
|
newX = 0
|
||||||
|
|
||||||
|
if abs(self.__storeY - xyz[1]) > self.__epsilon:
|
||||||
|
self.__storeY = xyz[1]
|
||||||
|
newY = 1
|
||||||
|
else:
|
||||||
|
newY = 0
|
||||||
|
|
||||||
|
if abs(self.__storeH - h) > self.__epsilon:
|
||||||
|
self.__storeH = h
|
||||||
|
newH = 1
|
||||||
|
else:
|
||||||
|
newH = 0
|
||||||
|
|
||||||
|
# Check for changes:
|
||||||
|
if not(newX or newY or newH):
|
||||||
|
# No change
|
||||||
|
# Send one and only one "stop" message.
|
||||||
|
if not self.__storeStop:
|
||||||
|
self.__storeStop = 1
|
||||||
|
self.d_setSmStop()
|
||||||
|
# print 'no change'
|
||||||
|
elif (newH) and not(newX or newY):
|
||||||
|
# Only change in H
|
||||||
|
self.__storeStop = 0
|
||||||
|
self.d_setSmH(self.__storeH)
|
||||||
|
# print ("H change")
|
||||||
|
elif (newX or newY) and not(newH):
|
||||||
|
# Only change in X, Y
|
||||||
|
self.__storeStop = 0
|
||||||
|
self.d_setSmXY(self.__storeX, self.__storeY)
|
||||||
|
# print ("XY change")
|
||||||
|
else:
|
||||||
|
# Only change in X, Y, H
|
||||||
|
self.__storeStop = 0
|
||||||
|
self.d_setSmXYH(self.__storeX, self.__storeY, self.__storeH)
|
||||||
|
# print ("XYH change")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user