Skip to content

Commit

Permalink
Merge pull request godotengine#16751 from AndreaCatania/moreAPIs
Browse files Browse the repository at this point in the history
Added Physics state APIs
  • Loading branch information
akien-mga authored Feb 19, 2018
2 parents 6d99975 + a930797 commit be67f2e
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 0 deletions.
8 changes: 8 additions & 0 deletions modules/bullet/rigid_body_bullet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,18 @@ Transform BulletPhysicsDirectBodyState::get_transform() const {
return body->get_transform();
}

void BulletPhysicsDirectBodyState::add_central_force(const Vector3 &p_force) {
body->apply_central_force(p_force);
}

void BulletPhysicsDirectBodyState::add_force(const Vector3 &p_force, const Vector3 &p_pos) {
body->apply_force(p_force, p_pos);
}

void BulletPhysicsDirectBodyState::add_torque(const Vector3 &p_torque) {
body->apply_torque(p_torque);
}

void BulletPhysicsDirectBodyState::apply_impulse(const Vector3 &p_pos, const Vector3 &p_j) {
body->apply_impulse(p_pos, p_j);
}
Expand Down
2 changes: 2 additions & 0 deletions modules/bullet/rigid_body_bullet.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,9 @@ class BulletPhysicsDirectBodyState : public PhysicsDirectBodyState {
virtual void set_transform(const Transform &p_transform);
virtual Transform get_transform() const;

virtual void add_central_force(const Vector3 &p_force);
virtual void add_force(const Vector3 &p_force, const Vector3 &p_pos);
virtual void add_torque(const Vector3 &p_torque);
virtual void apply_impulse(const Vector3 &p_pos, const Vector3 &p_j);
virtual void apply_torque_impulse(const Vector3 &p_j);

Expand Down
11 changes: 11 additions & 0 deletions servers/physics/body_sw.h
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,21 @@ class BodySW : public CollisionObjectSW {
biased_angular_velocity += _inv_inertia_tensor.xform(p_j);
}

_FORCE_INLINE_ void add_central_force(const Vector3 &p_force) {

applied_force += p_force;
}

_FORCE_INLINE_ void add_force(const Vector3 &p_force, const Vector3 &p_pos) {

applied_force += p_force;
applied_torque += p_pos.cross(p_force);
}

_FORCE_INLINE_ void add_torque(const Vector3 &p_torque) {
applied_torque += p_torque;
}

void set_active(bool p_active);
_FORCE_INLINE_ bool is_active() const { return active; }

Expand Down Expand Up @@ -401,7 +410,9 @@ class PhysicsDirectBodyStateSW : public PhysicsDirectBodyState {
virtual void set_transform(const Transform &p_transform) { body->set_state(PhysicsServer::BODY_STATE_TRANSFORM, p_transform); }
virtual Transform get_transform() const { return body->get_transform(); }

virtual void add_central_force(const Vector3 &p_force) { body->add_central_force(p_force); }
virtual void add_force(const Vector3 &p_force, const Vector3 &p_pos) { body->add_force(p_force, p_pos); }
virtual void add_torque(const Vector3 &p_torque) { body->add_torque(p_torque); }
virtual void apply_impulse(const Vector3 &p_pos, const Vector3 &p_j) { body->apply_impulse(p_pos, p_j); }
virtual void apply_torque_impulse(const Vector3 &p_j) { body->apply_torque_impulse(p_j); }

Expand Down
2 changes: 2 additions & 0 deletions servers/physics_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ void PhysicsDirectBodyState::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_transform", "transform"), &PhysicsDirectBodyState::set_transform);
ClassDB::bind_method(D_METHOD("get_transform"), &PhysicsDirectBodyState::get_transform);

ClassDB::bind_method(D_METHOD("add_central_force", "force"), &PhysicsDirectBodyState::add_central_force);
ClassDB::bind_method(D_METHOD("add_force", "force", "position"), &PhysicsDirectBodyState::add_force);
ClassDB::bind_method(D_METHOD("add_torque", "torque"), &PhysicsDirectBodyState::add_torque);
ClassDB::bind_method(D_METHOD("apply_impulse", "position", "j"), &PhysicsDirectBodyState::apply_impulse);
ClassDB::bind_method(D_METHOD("apply_torqe_impulse", "j"), &PhysicsDirectBodyState::apply_torque_impulse);

Expand Down
2 changes: 2 additions & 0 deletions servers/physics_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@ class PhysicsDirectBodyState : public Object {
virtual void set_transform(const Transform &p_transform) = 0;
virtual Transform get_transform() const = 0;

virtual void add_central_force(const Vector3 &p_force) = 0;
virtual void add_force(const Vector3 &p_force, const Vector3 &p_pos) = 0;
virtual void add_torque(const Vector3 &p_torque) = 0;
virtual void apply_impulse(const Vector3 &p_pos, const Vector3 &p_j) = 0;
virtual void apply_torque_impulse(const Vector3 &p_j) = 0;

Expand Down

0 comments on commit be67f2e

Please sign in to comment.