update for deadreconing

This commit is contained in:
Cary Sandvig 2000-12-21 20:09:21 +00:00
parent ce29a01449
commit 2e724b5e4d
2 changed files with 49 additions and 1 deletions

View File

@ -8,7 +8,7 @@
#define BUILDING_DLL BUILDING_DIRECT
#define COMPONENT_LIBS \
directbase dcparse showbase
directbase dcparse showbase deadrec
#define OTHER_LIBS panda pandaexpress dtool

View File

@ -3,6 +3,9 @@
from ShowBaseGlobal import *
import NodePath
import DistributedObject
import Correction
import Prediction
import Task
class DistributedNode(DistributedObject.DistributedObject, NodePath.NodePath):
"""Distributed Node class:"""
@ -12,6 +15,7 @@ class DistributedNode(DistributedObject.DistributedObject, NodePath.NodePath):
self.DistributedNode_initialized
except:
self.DistributedNode_initialized = 1
self.DeadReconing = None
DistributedObject.DistributedObject.__init__(self, cr)
return None
@ -23,6 +27,43 @@ class DistributedNode(DistributedObject.DistributedObject, NodePath.NodePath):
self.reparentTo(hidden)
DistributedObject.DistributedObject.delete(self)
def setDeadReconing(self, state):
self.DeadReconing = state
if state:
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)
else:
self.Predictor = None
self.Corrector = None
taskName = self.taskName("correctionPos")
taskMgr.removeTasksNamed(taskName)
def setPos(self, x, y, z):
if self.DeadReconing:
self.Predictor.newTelemetry(Point3(x, y, z))
else:
NodePath.NodePath.setPos(self, x, y, z)
def setHpr(self, h, p, r):
NodePath.NodePath.setHpr(self, h, p, r)
def setPosHpr(self, x, y, z, h, p, r):
if self.DeadReconing:
self.Predictor.newTelemetry(Point3(x, y, z))
else:
NodePath.NodePath.setPosHpr(self, x, y, z, h, p, r)
def d_setDeadReconing(self, state):
self.sendUpdate("setDeadReconing", [state])
def d_setPos(self, x, y, z):
self.sendUpdate("setPos", [x, y, z])
@ -36,3 +77,10 @@ class DistributedNode(DistributedObject.DistributedObject, NodePath.NodePath):
def d_setPosHpr(self, x, y, z, h, p, r):
self.sendUpdate("setPosHpr", [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