| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- """DistributedNode module: contains the DistributedNode class"""
- from ShowBaseGlobal import *
- import NodePath
- import DistributedObject
- import Correction
- import Prediction
- import Task
- class DistributedNode(DistributedObject.DistributedObject, NodePath.NodePath):
- """Distributed Node class:"""
- def __init__(self, cr):
- try:
- self.DistributedNode_initialized
- except:
- self.DistributedNode_initialized = 1
- DistributedObject.DistributedObject.__init__(self, cr)
- self.DeadReckoningFlag = 0
- return None
- def disable(self):
- self.reparentTo(hidden)
- DistributedObject.DistributedObject.disable(self)
- def delete(self):
- self.removeNode()
- DistributedObject.DistributedObject.delete(self)
- def generate(self):
- # Turn on dead reckoning
- #print ("Turning on dead reckoning!!!")
- #self.deadReckoningOn()
- DistributedObject.DistributedObject.generate(self)
- def deadReckoningOn(self):
- # Be sure that it isn't already on
- self.deadReckoningOff()
-
- self.deadReckoningFlag = 1
- self.Predictor = NullPrediction(Point3(self.getX(), self.getY(),
- self.getZ()))
- self.Corrector = SplineCorrection(Point3(self.getX(), self.getY(),
- self.getZ()), Vec3(0))
- taskName = self.taskName("correctionPos")
- # remove any old tasks
- taskMgr.removeTasksNamed(taskName)
- # spawn new task
- task = Task.Task(self.correctPos)
- taskMgr.spawnTaskNamed(task, taskName)
- return self.deadReckoningFlag
- def deadReckoningOff(self):
- self.deadReckoningFlag = 0
- self.Predictor = None
- self.Corrector = None
- taskName = self.taskName("correctionPos")
- taskMgr.removeTasksNamed(taskName)
- return self.deadReckoningFlag
- ### setParent ###
- def b_setParent(self, parentString):
- self.setParent(parentString)
- self.d_setParent(parentString)
- return None
- def d_setParent(self, parentString):
- self.sendUpdate("setParent", [parentString])
- return None
- def setParent(self, parentString):
- print "setting parent of %s to %s" % (self.getName(), parentString)
- assert(self.cr.name2nodePath.has_key(parentString))
- parent = self.cr.name2nodePath[parentString]
- self.wrtReparentTo(parent)
- return None
- ###### set pos and hpr functions #######
- # setX provided by NodePath
- def d_setX(self, x):
- self.sendUpdate("setX", [x])
- # setY provided by NodePath
- def d_setY(self, y):
- self.sendUpdate("setY", [y])
-
- # setZ provided by NodePath
- def d_setZ(self, z):
- self.sendUpdate("setZ", [z])
-
- # setH provided by NodePath
- def d_setH(self, h):
- self.sendUpdate("setH", [h])
-
- # setP provided by NodePath
- def d_setP(self, p):
- self.sendUpdate("setP", [p])
-
- # setR provided by NodePath
- def d_setR(self, r):
- self.sendUpdate("setR", [r])
- def setXY(self, x, y):
- self.setX(x)
- self.setY(y)
- def d_setXY(self, x, y):
- self.sendUpdate("setXY", [x, y])
- # setPos provided by NodePath
- def d_setPos(self, x, y, z):
- self.sendUpdate("setPos", [x, y, z])
- # setHpr provided by NodePath
- def d_setHpr(self, h, p, r):
- self.sendUpdate("setHpr", [h, p, r])
- def setXYH(self, x, y, h):
- self.setX(x)
- self.setY(y)
- self.setH(h)
- def d_setXYH(self, x, y, h):
- self.sendUpdate("setXYH", [x, y, h])
- def setXYZH(self, x, y, z, h):
- self.setPos(x, y, z)
- self.setH(h)
- def d_setXYZH(self, x, y, z, h):
- self.sendUpdate("setXYZH", [x, y, z, h])
- # setPosHpr provided by NodePath
- def d_setPosHpr(self, x, y, z, h, p, r):
- self.sendUpdate("setPosHpr", [x, y, z, h, p, r])
- ###### Dead Reckoned set pos and hpr functions ######
- def setDRX(self, x):
- curPoint = self.Predictor.getPos()
- self.Predictor.newTelemetry(x, curPoint[1], curPoint[2])
- def d_setDRX(self, x):
- self.sendUpdate("setDRX", [x])
- def setDRY(self, y):
- curPoint = self.Predictor.getPos()
- self.Predictor.newTelemetry(curPoint[0], y, curPoint[2])
- def d_setDRY(self, y):
- self.sendUpdate("setDRY", [y])
-
- def setDRZ(self, z):
- curPoint = self.Predictor.getPos()
- self.Predictor.newTelemetry(curPoint[0], curPoint[1], z)
- def d_setDRZ(self, z):
- self.sendUpdate("setDRZ", [z])
-
- def setDRH(self, h):
- self.setH(h)
- def d_setDRH(self, h):
- self.sendUpdate("setDRH", [h])
-
- def setDRP(self, p):
- self.setP(p)
- def d_setDRP(self, p):
- self.sendUpdate("setDRP", [p])
-
- def setDRR(self, r):
- self.setR(r)
- def d_setDRR(self, r):
- self.sendUpdate("setDRR", [r])
- def setDRXY(self, x, y):
- curPoint = self.Predictor.getPos()
- self.Predictor.newTelemetry(Point3(x, y, curPoint[2]))
- def d_setDRXY(self, x, y):
- self.sendUpdate("setDRXY", [x, y])
- def setDRPos(self, x, y, z):
- self.Predictor.newTelemetry(Point3(x, y, z))
- def d_setDRPos(self, x, y, z):
- self.sendUpdate("setDRPos", [x, y, z])
- def setDRHpr(self, h, p, r):
- self.setHpr(h, p, r)
- def d_setDRHpr(self, h, p, r):
- self.sendUpdate("setDRHpr", [h, p, r])
- def setDRXYH(self, x, y, h):
- curPoint = self.Predictor.getPos()
- self.Predictor.newTelemetry(Point3(x, y, curPoint[2]))
- self.setH(h)
- def d_setDRXYH(self, x, y, h):
- self.sendUpdate("setDRXYH", [x, y, h])
- def setDRXYZH(self, x, y, z, h):
- self.Predictor.newTelemetry(Point3(x, y, z))
- self.setH(h)
- def d_setDRXYZH(self, x, y, z, h):
- self.sendUpdate("setDRXYZH", [x, y, z, h])
- def setDRPosHpr(self, x, y, z, h, p, r):
- self.Predictor.newTelemetry(Point3(x, y, z))
- NodePath.NodePath.setHpr(self, h, p, r)
- def d_setDRPosHpr(self, x, y, z, h, p, r):
- self.sendUpdate("setDRPosHpr", [x, y, z, h, p, r])
- def correctPos(self, task):
- self.Corrector.newTarget(self.Predictor.getPos(),
- self.Predictor.getVel())
- self.Corrector.step()
- NodePath.NodePath.setPos(self, self.Corrector.getPos())
- return Task.cont
|