From f6de9e81866989e08da50198f095e06a5f40bd24 Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Wed, 27 Feb 2013 03:26:58 +0000 Subject: [PATCH] [Add] limit_speed in physics --- src/physics.c | 5 +++++ src/physics.h | 2 ++ src/pilot.c | 6 ++---- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/physics.c b/src/physics.c index 858b3bf..fd53772 100644 --- a/src/physics.c +++ b/src/physics.c @@ -14,6 +14,11 @@ double angle_diff(const double ref, double a) { return (d <= M_PI) ? d : d - 2*M_PI; } +void limit_speed(Vec2* vel, const double speed) { + if(VMOD(*vel) > speed) // Should not go faster. + vect_pset(vel, speed, VANGLE(*vel)); +} + // ================ // VEC2 // ================ diff --git a/src/physics.h b/src/physics.h index c36f6d3..8e5058b 100644 --- a/src/physics.h +++ b/src/physics.h @@ -22,6 +22,8 @@ typedef struct Vec2_ { double mod, angle; // Polar values. } Vec2; +void limit_speed(Vec2* vel, const double speed); + // Vector manupulation. void vect_cset(Vec2* v, const double x, const double y); // Doesn't set mod nor angle. diff --git a/src/pilot.c b/src/pilot.c index 87b2570..0591028 100644 --- a/src/pilot.c +++ b/src/pilot.c @@ -277,11 +277,9 @@ static void pilot_update(Pilot* pilot, const double dt) { // Update the solid. (*pilot->solid->update)(pilot->solid, dt); - if(!pilot_isFlag(pilot, PILOT_HYPERSPACE) && VMOD(pilot->solid->vel) > - pilot->ship->speed) + if(!pilot_isFlag(pilot, PILOT_HYPERSPACE)) // Should not go faster. - vect_pset(&pilot->solid->vel, pilot->ship->speed, - VANGLE(pilot->solid->vel)); + limit_speed(&pilot->solid->vel, pilot->ship->speed); } // Pilot is getting ready or is in, hyperspace.