From abcc5b9475dd09cc7f092ac622552b3625f4aa94 Mon Sep 17 00:00:00 2001 From: Cameron Reikes Date: Sun, 11 Dec 2022 16:16:48 -0800 Subject: [PATCH] Automatically dampen rotation with gyroscopes --- gamestate.c | 7 +++++-- types.h | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gamestate.c b/gamestate.c index 50ea811..7dcaab8 100644 --- a/gamestate.c +++ b/gamestate.c @@ -2847,12 +2847,15 @@ void process(struct GameState *gs, double dt) { cur_box->thrust = 0.0; } - double energy_to_consume = fabs(cur_box->wanted_thrust * GYROSCOPE_ENERGY_USED_PER_SECOND * dt); + double thrust_to_want = cur_box->wanted_thrust; + if (cur_box->wanted_thrust == 0.0) + thrust_to_want = clamp(-cpBodyGetAngularVelocity(grid->body) * GYROSCOPE_PROPORTIONAL_INERTIAL_RESPONSE, -1.0, 1.0); + double energy_to_consume = fabs(thrust_to_want * GYROSCOPE_ENERGY_USED_PER_SECOND * dt); if (energy_to_consume > 0.0) { cur_box->thrust = 0.0; double energy_unconsumed = batteries_use_energy(gs, grid, &non_battery_energy_left_over, energy_to_consume); - cur_box->thrust = (1.0 - energy_unconsumed / energy_to_consume) * cur_box->wanted_thrust; + cur_box->thrust = (1.0 - energy_unconsumed / energy_to_consume) * thrust_to_want; if (fabs(cur_box->thrust) >= 0.0) cpBodySetTorque(grid->body, cpBodyGetTorque(grid->body) + cur_box->thrust * GYROSCOPE_TORQUE); } diff --git a/types.h b/types.h index f0f950b..ac1342a 100644 --- a/types.h +++ b/types.h @@ -42,7 +42,8 @@ #define THRUSTER_FORCE 24.0f #define THRUSTER_ENERGY_USED_PER_SECOND 0.005f #define GYROSCOPE_ENERGY_USED_PER_SECOND 0.005f -#define GYROSCOPE_TORQUE 0.5f +#define GYROSCOPE_TORQUE 1.5f +#define GYROSCOPE_PROPORTIONAL_INERTIAL_RESPONSE 0.7 // between 0-1. How strongly responds to rotation, to stop the rotation #define CLOAKING_ENERGY_USE 0.1f #define CLOAKING_PANEL_SIZE BOX_SIZE * 3.0f #define VISION_RADIUS 12.0f