Skip to content

Commit b2ef5d7

Browse files
committed
RigidBody.h:
* A rigid body object now has a direction unit vector. * Added a bunch of functions: - get_curr_ang_vel() - set_curr_ang_vel() - get_curr_ang() - set_curr_ang() - get_curr_rot_mtx() (the orientation corresponding to curr_ang = 0 gives the identity matrix). Used for rotating the direction vector. - get_orig_dir() - set_orig_dir() - get_curr_dir() (orig_dir rotated by get_curr_rot_mtx()).
1 parent 77adca4 commit b2ef5d7

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

Dynamics/RigidBody.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "../SpriteHandler.h"
1212
#include <Core/bool_vector.h>
1313
#include <Core/Math.h>
14+
#include <Core/Mtx2.h>
1415

1516

1617
namespace dynamics
@@ -27,6 +28,7 @@ namespace dynamics
2728
Vec2 curr_cm_local; // local pos
2829
Vec2 curr_cm;
2930
float curr_ang = 0.f;
31+
Vec2 orig_dir { 0.f, 1.f };
3032

3133
float mass = 1.f;
3234
float inv_mass = 1.f;
@@ -303,6 +305,54 @@ namespace dynamics
303305
}
304306
}
305307

308+
// w [rad/s]
309+
float get_curr_ang_vel() const
310+
{
311+
return curr_ang_vel;
312+
}
313+
314+
// w [rad/s]
315+
void set_curr_ang_vel(float w_rad_s)
316+
{
317+
curr_ang_vel = w_rad_s;
318+
}
319+
320+
// phi [rad]
321+
float get_curr_ang() const
322+
{
323+
return curr_ang;
324+
}
325+
326+
// phi [rad]
327+
void set_curr_ang(float phi_rad)
328+
{
329+
curr_ang = phi_rad;
330+
}
331+
332+
Mtx2 get_curr_rot_mtx() const
333+
{
334+
return Mtx2
335+
{
336+
std::cos(curr_ang), -std::sin(curr_ang),
337+
std::sin(curr_ang), std::cos(curr_ang)
338+
};
339+
}
340+
341+
Vec2 get_orig_dir() const
342+
{
343+
return orig_dir;
344+
}
345+
346+
void set_orig_dir(const Vec2& dir)
347+
{
348+
orig_dir = math::normalize(dir);
349+
}
350+
351+
Vec2 get_curr_dir() const
352+
{
353+
return get_curr_rot_mtx() * orig_dir;
354+
}
355+
306356
float get_dynamic_friction() const { return dynamic_friction; }
307357

308358
void set_sleeping(bool enable,

0 commit comments

Comments
 (0)