using namespace Msp;
RigidBody::RigidBody(Game::Handle<Game::Entity> e, const Setup &s):
- Component(e),
+ BufferedComponent<RigidBodyData>(e),
setup(s)
{ }
void RigidBody::set_velocity(const LinAl::Vector<float, 2> &v)
{
- velocity = v;
+ write().velocity = v;
}
void RigidBody::set_angular_velocity(Geometry::Angle<float> as)
{
- angular_velocity = as;
+ write().angular_velocity = as;
}
void RigidBody::add_force(const LinAl::Vector<float, 2> &f)
{
- force += f;
+ write().force += f;
}
void RigidBody::add_force(const LinAl::Vector<float, 2> &f, const LinAl::Vector<float, 2> &p)
{
- force += f;
+ Data &d = write();
+ d.force += f;
LinAl::Vector<float, 2> r = p-entity->get_transform()->get_position().slice<2>(0);
- torque += r.x*f.y-r.y*f.x;
+ d.torque += r.x*f.y-r.y*f.x;
}
void RigidBody::add_torque(float t)
{
- torque += t;
+ write().torque += t;
}
void RigidBody::clear_forces()
{
- force = LinAl::Vector<float, 2>();
- torque = 0.0f;
+ Data &d = write();
+ d.force = LinAl::Vector<float, 2>();
+ d.torque = 0.0f;
}