Skip to content

Commit

Permalink
sim: improve handling by raising angular friction
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryp committed Mar 26, 2024
1 parent 377c5b0 commit a5c6b2b
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 18 deletions.
7 changes: 3 additions & 4 deletions src/GameLoop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,11 +234,9 @@ namespace
ImGui::SliderInt("max_simulation_substep_count", &sim.vars.max_simulation_substep_count, 1, 10);
ImGui::SliderFloat("gravity_force_intensity", &sim.vars.gravity_force_intensity, 0.f, 100.f, "%.3f",
ImGuiSliderFlags_Logarithmic);
ImGui::SliderFloat("linear_friction", &sim.vars.linear_friction, 0.f, 100.f, "%.3f",
ImGui::SliderFloat("linear_friction", &sim.vars.linear_friction, 0.04f, 1.f, "%.3f",
ImGuiSliderFlags_Logarithmic);
ImGui::SliderFloat("quadratic_friction", &sim.vars.quadratic_friction, 0.f, 10.f, "%.3f",
ImGuiSliderFlags_Logarithmic);
ImGui::SliderFloat("angular_friction", &sim.vars.angular_friction, 0.f, 100.f, "%.3f",
ImGui::SliderFloat("angular_friction", &sim.vars.angular_friction, 0.04f, 1.f, "%.3f",
ImGuiSliderFlags_Logarithmic);
ImGui::Checkbox("enable_suspension_forces", &sim.vars.enable_suspension_forces);
ImGui::SliderFloat("max_suspension_force", &sim.vars.max_suspension_force, 0.f, 100000.f, "%.3f",
Expand All @@ -256,6 +254,7 @@ namespace
ImGui::SliderFloat("suspension ratio 2", &sim.raycast_suspensions[2].length_ratio_last, 0.0f, 1.f, "%.3f");
ImGui::SliderFloat("suspension ratio 3", &sim.raycast_suspensions[3].length_ratio_last, 0.0f, 1.f, "%.3f");
ImGui::EndDisabled();
ImGui::SliderFloat("steer_force", &sim.vars.steer_force, 0.01f, 100.f, "%.3f", ImGuiSliderFlags_Logarithmic);
ImGui::SliderFloat("default_ship_stats.thrust", &sim.vars.default_ship_stats.thrust, 0.f, 1000.f);
ImGui::SliderFloat("default_ship_stats.braking", &sim.vars.default_ship_stats.braking, 0.f, 100.f);
ImGui::SliderFloat("default_ship_stats.handling", &sim.vars.default_ship_stats.handling, 0.1f, 10.f);
Expand Down
8 changes: 4 additions & 4 deletions src/neptune/sim/PhysicsSim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,16 @@ PhysicsSim create_sim()
sim.vars.simulation_substep_duration = 1.f / 60.f;
sim.vars.max_simulation_substep_count = 3;
sim.vars.gravity_force_intensity = 9.8331f;
sim.vars.linear_friction = 4.0f;
sim.vars.quadratic_friction = 0.01f;
sim.vars.angular_friction = 0.03f;
sim.vars.linear_friction = 0.4f;
sim.vars.angular_friction = 0.999f;
sim.vars.enable_suspension_forces = true;
sim.vars.max_suspension_force = 6000.f;
sim.vars.default_spring_stiffness = 30.f;
sim.vars.default_damper_friction_compression = 2.82f;
sim.vars.default_damper_friction_extension = 0.22f;
sim.vars.enable_debug_geometry = false;
sim.vars.default_ship_stats.thrust = 100.f;
sim.vars.steer_force = 2.f;
sim.vars.default_ship_stats.thrust = 20.f;
sim.vars.default_ship_stats.braking = 10.f;
sim.vars.default_ship_stats.handling = 0.4f;

Expand Down
2 changes: 1 addition & 1 deletion src/neptune/sim/PhysicsSim.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,14 @@ struct PhysicsSim
int max_simulation_substep_count;
float gravity_force_intensity;
float linear_friction;
float quadratic_friction;
float angular_friction;
bool enable_suspension_forces;
float max_suspension_force;
float default_spring_stiffness;
float default_damper_friction_compression;
float default_damper_friction_extension;
bool enable_debug_geometry;
float steer_force;
ShipStats default_ship_stats;
} vars;

Expand Down
12 changes: 3 additions & 9 deletions src/neptune/sim/PhysicsSimUpdate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ namespace
const glm::fvec3 player_forward_ws = player_transform * glm::vec4(forward(), 0.f);
const glm::fvec3 player_up_ws = player_transform * glm::vec4(up(), 0.f);
const glm::fvec3 player_linear_speed = toGlm(player_rigid_body->getLinearVelocity());
const glm::fvec3 player_angular_speed = toGlm(player_rigid_body->getAngularVelocity());
// const glm::fvec3 player_angular_speed = toGlm(player_rigid_body->getAngularVelocity());

glm::fvec3 force_ws = {};

Expand All @@ -148,15 +148,10 @@ namespace
force_ws += -glm::proj(player_linear_speed, player_forward_ws) * frame_data.input.brake
* sim.vars.default_ship_stats.braking;

// Friction force (FIXME might be better applied by bullet directly)
force_ws += -player_linear_speed * sim.vars.linear_friction;
force_ws += -player_linear_speed * glm::length(player_linear_speed) * sim.vars.quadratic_friction;

glm::fvec3 torque_ws = {};

// Turning torque
torque_ws += player_up_ws * -frame_data.input.steer;
// torque_ws += glm::eulerAngles(glm::angleAxis(frame_data.input.steer, player_up_ws));
torque_ws += player_up_ws * -frame_data.input.steer * sim.vars.steer_force;

// Torque to orient the ship upright
if (false) // FIXME
Expand All @@ -172,8 +167,7 @@ namespace
torque_ws += torque;
}

// Friction torque (FIXME might be better applied by bullet directly)
torque_ws += -player_angular_speed * sim.vars.angular_friction;
player_rigid_body->setDamping(sim.vars.linear_friction, sim.vars.angular_friction);

player_rigid_body->applyTorque(toBt(torque_ws));
player_rigid_body->applyCentralForce(toBt(force_ws));
Expand Down

0 comments on commit a5c6b2b

Please sign in to comment.