private void FixedUpdate() { Vector3 forces = Vector3.zero; if (Drifting && aft != null && aft.Burning) { ShipPhysicsStats.ClampShipVelocity(rb, physicsStats, CruiseState.Off); ShipPhysicsStats.HandleDrifting(rb, physicsStats, false); forces = CalcAfterburnerForces(); } else if (Drifting) { ShipPhysicsStats.HandleDrifting(rb, physicsStats, true); } else if (!Drifting) { ShipPhysicsStats.HandleDrifting(rb, physicsStats, false); forces = CalcStrafeForces() + CalcThrottleForces() + CalcAfterburnerForces(); } if (forces != Vector3.zero) { rb.AddForce(forces); } }
public static void ClampShipVelocity(Rigidbody rb, ShipPhysicsStats stats, CruiseState state) { float currentMaxSpeed = 0; switch (state) { case CruiseState.Off: currentMaxSpeed = stats.maxAfterburnSpeed; break; case CruiseState.Charging: currentMaxSpeed = stats.maxNormalSpeed; break; case CruiseState.On: currentMaxSpeed = stats.maxCruiseSpeed; break; case CruiseState.Disrupted: currentMaxSpeed = stats.maxAfterburnSpeed; break; default: break; } rb.velocity = Vector3.ClampMagnitude(rb.velocity, currentMaxSpeed); }
private void HandleDriftingChange(bool drifting) { if (cruiseEngine != null && drifting) { cruiseEngine.StopAnyCruise(); } ShipPhysicsStats.HandleDrifting(rb, engine.physicsStats, drifting); }
public static void HandleDrifting(Rigidbody rb, ShipPhysicsStats stats, bool isDrifting) { if (isDrifting) { rb.mass = stats.driftMass; rb.drag = stats.driftDrag; } else { rb.mass = stats.mass; rb.drag = stats.drag; } }