X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=examples%2Fbassteroids%2Fsource%2Frigidbody.cpp;h=d677fb7ab778c0964cd777d593d58e179ce5987f;hb=bfbcfa2678c70d661cb9104b2ef677d7d7b5a637;hp=c1d096e6a69817a2ba00299349810304b7f4a9f4;hpb=0636566dd84ca185d3e9a6fae02459569c42d220;p=libs%2Fgame.git diff --git a/examples/bassteroids/source/rigidbody.cpp b/examples/bassteroids/source/rigidbody.cpp index c1d096e..d677fb7 100644 --- a/examples/bassteroids/source/rigidbody.cpp +++ b/examples/bassteroids/source/rigidbody.cpp @@ -1,13 +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) +{ + 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; }