]> git.tdb.fi Git - libs/game.git/blob - examples/bassteroids/source/rigidbody.cpp
Convert components to buffered where appropriate
[libs/game.git] / examples / bassteroids / source / rigidbody.cpp
1 #include "rigidbody.h"
2 #include <msp/game/entity.h>
3 #include <msp/game/transform.h>
4
5 using namespace Msp;
6
7 RigidBody::RigidBody(Game::Handle<Game::Entity> e, const Setup &s):
8         BufferedComponent<RigidBodyData>(e),
9         setup(s)
10 { }
11
12 void RigidBody::set_velocity(const LinAl::Vector<float, 2> &v)
13 {
14         write().velocity = v;
15 }
16
17 void RigidBody::set_angular_velocity(Geometry::Angle<float> as)
18 {
19         write().angular_velocity = as;
20 }
21
22 void RigidBody::add_force(const LinAl::Vector<float, 2> &f)
23 {
24         write().force += f;
25 }
26
27 void RigidBody::add_force(const LinAl::Vector<float, 2> &f, const LinAl::Vector<float, 2> &p)
28 {
29         Data &d = write();
30         d.force += f;
31         LinAl::Vector<float, 2> r = p-entity->get_transform()->get_position().slice<2>(0);
32         d.torque += r.x*f.y-r.y*f.x;
33 }
34
35 void RigidBody::add_torque(float t)
36 {
37         write().torque += t;
38 }
39
40 void RigidBody::clear_forces()
41 {
42         Data &d = write();
43         d.force = LinAl::Vector<float, 2>();
44         d.torque = 0.0f;
45 }