X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=examples%2Fbassteroids%2Fsource%2Frigidbody.cpp;h=d677fb7ab778c0964cd777d593d58e179ce5987f;hb=bfbcfa2678c70d661cb9104b2ef677d7d7b5a637;hp=509e3a939cf0872ea4f2daa26e8f8184fe9c24cd;hpb=1819b186d60376a546722d99edd686e876b81d9f;p=libs%2Fgame.git diff --git a/examples/bassteroids/source/rigidbody.cpp b/examples/bassteroids/source/rigidbody.cpp index 509e3a9..d677fb7 100644 --- a/examples/bassteroids/source/rigidbody.cpp +++ b/examples/bassteroids/source/rigidbody.cpp @@ -1,18 +1,45 @@ #include "rigidbody.h" +#include +#include using namespace Msp; RigidBody::RigidBody(Game::Handle e, const Setup &s): - Component(e), + BufferedComponent(e), setup(s) { } void RigidBody::set_velocity(const LinAl::Vector &v) { - velocity = v; + write().velocity = v; } void RigidBody::set_angular_velocity(Geometry::Angle as) { - angular_velocity = as; + write().angular_velocity = as; +} + +void RigidBody::add_force(const LinAl::Vector &f) +{ + write().force += f; +} + +void RigidBody::add_force(const LinAl::Vector &f, const LinAl::Vector &p) +{ + Data &d = write(); + d.force += f; + LinAl::Vector r = p-entity->get_transform()->get_position().slice<2>(0); + d.torque += r.x*f.y-r.y*f.x; +} + +void RigidBody::add_torque(float t) +{ + write().torque += t; +} + +void RigidBody::clear_forces() +{ + Data &d = write(); + d.force = LinAl::Vector(); + d.torque = 0.0f; }