open_toontown_panda3d/panda/src/dgraph/test_dgraph.cxx

198 lines
5.2 KiB
C++

// Filename: test_dgraph.cxx
// Created by: drose (25Jan99)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license. You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://www.panda3d.org/license.txt .
//
// To contact the maintainers of this program write to
// panda3d@yahoogroups.com .
//
////////////////////////////////////////////////////////////////////
#include <notify.h>
#include "dataNode.h"
#include "dataRelation.h"
#include "dataGraphTraversal.h"
#include "doubleDataTransition.h"
#include "vec3DataTransition.h"
#include <pt_NamedNode.h>
////////////////////////////////////////////////////////////////////
// Class : Producer
// Description : Simulates some data-generating device, such as a
// mouse.
////////////////////////////////////////////////////////////////////
class Producer : public DataNode {
public:
Producer(const string &name);
virtual void
transmit_data(AllTransitionsWrapper &data);
AllTransitionsWrapper _attrib;
PT(DoubleDataTransition) _t;
PT(Vec3DataTransition) _xyz;
static TypeHandle _t_type;
static TypeHandle _xyz_type;
public:
virtual TypeHandle get_type() const {
return get_class_type();
}
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
DataNode::init_type();
register_type(_type_handle, "Producer",
DataNode::get_class_type());
DoubleDataTransition::init_type();
register_data_transition(_t_type, "t",
DoubleDataTransition::get_class_type());
Vec3DataTransition::init_type();
register_data_transition(_xyz_type, "xyz",
Vec3DataTransition::get_class_type());
}
private:
static TypeHandle _type_handle;
};
TypeHandle Producer::_type_handle;
TypeHandle Producer::_t_type;
TypeHandle Producer::_xyz_type;
Producer::
Producer(const string &name) : DataNode(name) {
_t = new DoubleDataTransition(0.0);
_xyz = new Vec3DataTransition(LPoint3f(0.0f, 0.0f, 0.0f));
// Set up our _attrib member to directly reference our data members.
// This way we can simply return a reference to our _attrib member,
// without bothering to construct a new one each time.
_attrib.set_transition(_t_type, _t);
_attrib.set_transition(_xyz_type, _xyz);
}
void Producer::
transmit_data(AllTransitionsWrapper &data) {
nout << get_name() << " sending xyz " << *_xyz << " t " << *_t << "\n";
data = _attrib;
}
////////////////////////////////////////////////////////////////////
// Class : Consumer
// Description : Simulates some data-consuming object, such as a mouse
// Tformer.
////////////////////////////////////////////////////////////////////
class Consumer : public DataNode {
public:
Consumer(const string &name) : DataNode(name) { }
virtual void
transmit_data(AllTransitionsWrapper &data);
static TypeHandle _s_type;
static TypeHandle _t_type;
static TypeHandle _xyz_type;
public:
virtual TypeHandle get_type() const {
return get_class_type();
}
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
DataNode::init_type();
register_type(_type_handle, "Consumer",
DataNode::get_class_type());
DoubleDataTransition::init_type();
register_data_transition(_s_type, "s",
DoubleDataTransition::get_class_type());
register_data_transition(_t_type, "t",
DoubleDataTransition::get_class_type());
Vec3DataTransition::init_type();
register_data_transition(_xyz_type, "xyz",
Vec3DataTransition::get_class_type());
}
private:
static TypeHandle _type_handle;
};
TypeHandle Consumer::_type_handle;
TypeHandle Consumer::_s_type;
TypeHandle Consumer::_t_type;
TypeHandle Consumer::_xyz_type;
void Consumer::
transmit_data(AllTransitionsWrapper &data) {
const DoubleDataTransition *s;
const DoubleDataTransition *t;
const Vec3DataTransition *xyz;
if (get_transition_into(s, data, _s_type) &&
get_transition_into(t, data, _t_type) &&
get_transition_into(xyz, data, _xyz_type)) {
nout << get_name() << " got xyz " << *xyz << " s " << *s
<< " t " << *t << "\n";
} else {
nout << get_name() << " didn't get all data.\n";
}
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
int
main() {
Producer::init_type();
Consumer::init_type();
PT_NamedNode root = new NamedNode("root");
PT(Producer) producer = new Producer("a");
PT(Consumer) consumer = new Consumer("b");
new DataRelation(root, producer);
DataRelation *arc1 = new DataRelation(producer, consumer);
producer->_t->set_value(10.0f);
producer->_xyz->set_value(LPoint3f(1.0f, 2.0f, 3.0f));
arc1->set_transition(Producer::_xyz_type,
new Vec3DataTransition(LMatrix4f::scale_mat(2.0f)));
producer->set_spam_mode(true);
traverse_data_graph(root);
return (0);
}