open_toontown_panda3d/panda/src/device/trackerNode.cxx

157 lines
5.0 KiB
C++

// Filename: trackerNode.cxx
// Created by: jason (07Aug00)
//
////////////////////////////////////////////////////////////////////
#include "trackerNode.h"
#include "config_device.h"
////////////////////////////////////////////////////////////////////
// Static variables
////////////////////////////////////////////////////////////////////
TypeHandle TrackerNode::_type_handle;
TypeHandle TrackerNode::_ptime_type;
TypeHandle TrackerNode::_position_type;
TypeHandle TrackerNode::_pquat_type;
TypeHandle TrackerNode::_vtime_type;
TypeHandle TrackerNode::_velocity_type;
TypeHandle TrackerNode::_vquat_type;
TypeHandle TrackerNode::_vquat_dt_type;
TypeHandle TrackerNode::_atime_type;
TypeHandle TrackerNode::_acceleration_type;
TypeHandle TrackerNode::_aquat_type;
TypeHandle TrackerNode::_aquat_dt_type;
////////////////////////////////////////////////////////////////////
// Function: TrackerNode::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
TrackerNode::
TrackerNode(PT(ClientBase) client, const string &tracker,
int sensor) :
DataNode(tracker), _client(client), _tracker(tracker), _sensor(sensor)
{
_client->add_remote_tracker(_tracker, _sensor);
_ptime = new DoubleDataAttribute();
_position = new Vec3DataAttribute(LPoint3f(0,0,0));
_pquat = new Vec4DataAttribute(LVector4f(0,0,0,0));
_vtime = new DoubleDataAttribute();
_velocity = new Vec3DataAttribute(LPoint3f(0,0,0));
_vquat = new Vec4DataAttribute(LVector4f(0,0,0,0));
_vquat_dt = new DoubleDataAttribute();
_atime = new DoubleDataAttribute();
_acceleration = new Vec3DataAttribute(LPoint3f(0,0,0));
_aquat = new Vec4DataAttribute(LVector4f(0,0,0,0));
_aquat_dt = new DoubleDataAttribute();
_tracker_attrib.set_attribute(_ptime_type, _ptime);
_tracker_attrib.set_attribute(_position_type, _position);
_tracker_attrib.set_attribute(_pquat_type, _pquat);
_tracker_attrib.set_attribute(_vtime_type, _vtime);
_tracker_attrib.set_attribute(_velocity_type, _velocity);
_tracker_attrib.set_attribute(_vquat_type, _vquat);
_tracker_attrib.set_attribute(_vquat_dt_type, _vquat_dt);
_tracker_attrib.set_attribute(_atime_type, _atime);
_tracker_attrib.set_attribute(_acceleration_type, _acceleration);
_tracker_attrib.set_attribute(_aquat_type, _aquat);
_tracker_attrib.set_attribute(_aquat_dt_type, _aquat_dt);
}
////////////////////////////////////////////////////////////////////
// Function: TrackerNode::transmit_data
// Access: Public, Virtual
// Description:
////////////////////////////////////////////////////////////////////
void TrackerNode::
transmit_data(NodeAttributes &data) {
TrackerData new_data = _client->get_tracker_data(_tracker, _sensor);
if (device_cat.is_debug()) {
device_cat.debug() << "TrackerNode:transmit_data" << endl;
}
_ptime->set_value(new_data.ptime);
_position->set_value(new_data.position);
_pquat->set_value(new_data.pquat);
_vtime->set_value(new_data.vtime);
_velocity->set_value(new_data.velocity);
_vquat->set_value(new_data.vquat);
_vquat_dt->set_value(new_data.vquat_dt);
_atime->set_value(new_data.atime);
_acceleration->set_value(new_data.acceleration);
_aquat->set_value(new_data.aquat);
_aquat_dt->set_value(new_data.aquat_dt);
if (device_cat.is_debug()) {
device_cat.debug() << "TrackerNode:attributes" << endl;
_tracker_attrib.write(device_cat.debug(false), 3);
}
data = _tracker_attrib;
}
////////////////////////////////////////////////////////////////////
// Function: TrackerNode::init_type
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
void TrackerNode::
init_type() {
DataNode::init_type();
register_type(_type_handle, "TrackerNode",
DataNode::get_class_type());
DoubleDataTransition::init_type();
Vec3DataTransition::init_type();
Vec4DataTransition::init_type();
register_data_transition(_ptime_type, "Position Time",
DoubleDataTransition::get_class_type());
register_data_transition(_position_type, "Position",
Vec3DataTransition::get_class_type());
register_data_transition(_pquat_type, "Position Quat",
Vec4DataTransition::get_class_type());
register_data_transition(_vtime_type, "Velocity Time",
DoubleDataTransition::get_class_type());
register_data_transition(_velocity_type, "Velocity",
Vec3DataTransition::get_class_type());
register_data_transition(_vquat_type, "Velocity Quat",
Vec4DataTransition::get_class_type());
register_data_transition(_vquat_dt_type, "Velocity Quat dt",
DoubleDataTransition::get_class_type());
register_data_transition(_atime_type, "Acceleration Time",
DoubleDataTransition::get_class_type());
register_data_transition(_acceleration_type, "Acceleration",
Vec3DataTransition::get_class_type());
register_data_transition(_aquat_type, "Acceleration Quat",
Vec4DataTransition::get_class_type());
register_data_transition(_aquat_dt_type, "Acceleration Quat dt",
DoubleDataTransition::get_class_type());
}