adding _transform_limit to assert when the position of the actor node exceeds an arbitrary limit

This commit is contained in:
Josh Wilson 2007-10-06 00:20:16 +00:00
parent 0ca35954bb
commit 56394ce390
2 changed files with 27 additions and 0 deletions

View File

@ -40,6 +40,7 @@ ActorNode(const string &name) :
_mass_center->set_name(name); _mass_center->set_name(name);
#endif #endif
_ok_to_callback = true; _ok_to_callback = true;
_transform_limit = 0.0;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -53,6 +54,7 @@ ActorNode(const ActorNode &copy) :
_contact_vector = LVector3f::zero(); _contact_vector = LVector3f::zero();
_ok_to_callback = true; _ok_to_callback = true;
_mass_center = get_physical(0)->get_phys_body(); _mass_center = get_physical(0)->get_phys_body();
_transform_limit = copy._transform_limit;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -77,10 +79,31 @@ update_transform() {
// lock the callback so that this doesn't call transform_changed. // lock the callback so that this doesn't call transform_changed.
_ok_to_callback = false; _ok_to_callback = false;
if (_transform_limit > 0.0) {
test_transform(TransformState::make_mat(lcs));
}
set_transform(TransformState::make_mat(lcs)); set_transform(TransformState::make_mat(lcs));
_ok_to_callback = true; _ok_to_callback = true;
} }
////////////////////////////////////////////////////////////////////
// Function : test_transform
// Access : private
// Description : this tests the transform to make sure it's within
// the specified limits. It's done so we can assert
// to see when an invalid transform is being applied.
////////////////////////////////////////////////////////////////////
void ActorNode::
test_transform(const TransformState *ts) const {
LPoint3f pos(ts->get_pos());
nassertv(pos[0] < _transform_limit);
nassertv(pos[0] > -_transform_limit);
nassertv(pos[1] < _transform_limit);
nassertv(pos[1] > -_transform_limit);
nassertv(pos[2] < _transform_limit);
nassertv(pos[2] > -_transform_limit);
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function : transform_changed // Function : transform_changed
// Access : private, virtual // Access : private, virtual
@ -110,6 +133,7 @@ transform_changed() {
_mass_center->set_position(transform->get_pos()); _mass_center->set_position(transform->get_pos());
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function : write // Function : write
// Access : Public // Access : Public

View File

@ -46,16 +46,19 @@ PUBLISHED:
// i.e. copy from PhysicsObject to PandaNode // i.e. copy from PhysicsObject to PandaNode
void update_transform(); void update_transform();
void set_transform_limit(float limit) { _transform_limit = limit; };
virtual void write(ostream &out, unsigned int indent=0) const; virtual void write(ostream &out, unsigned int indent=0) const;
private: private:
PhysicsObject *_mass_center; PhysicsObject *_mass_center;
LVector3f _contact_vector; LVector3f _contact_vector;
bool _ok_to_callback; bool _ok_to_callback;
float _transform_limit;
// node hook if the client changes the node's transform. // node hook if the client changes the node's transform.
// i.e. copy from PandaNode to PhysicsObject // i.e. copy from PandaNode to PhysicsObject
virtual void transform_changed(); virtual void transform_changed();
void test_transform(const TransformState *ts) const;
public: public:
static TypeHandle get_class_type() { static TypeHandle get_class_type() {