mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -04:00
adding _transform_limit to assert when the position of the actor node exceeds an arbitrary limit
This commit is contained in:
parent
0ca35954bb
commit
56394ce390
@ -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 ©) :
|
|||||||
_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
|
||||||
|
@ -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() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user