private void Rotate() { rotationRate = Mathf.Clamp(rotationRate, -rotationRateCap, rotationRateCap); if (!StabilityAssistEnabled) { // Rotate freely transform.Rotate(Vector3.forward, rotationRate); return; } // Stability assist if (StabilityAssistMode == ShipSystems.StabilityAssistMode.Hold) { // Hold position rotationRate = Mathf.SmoothDamp(rotationRate, 0f, ref rotationDampVel, rotationDampTime); transform.Rotate(Vector3.forward, rotationRate); return; } else if (StabilityAssistMode == ShipSystems.StabilityAssistMode.Prograde) { // Rotate to prograde float sign = Mathf.Sign(Vector2.SignedAngle(transform.up, OrbitalDirectionToWorld)); rotationRate += (sign * stabilityAssistAccel); } else if (StabilityAssistMode == ShipSystems.StabilityAssistMode.Retrograde) { // Rotate to retrograde float sign = Mathf.Sign(Vector2.SignedAngle(transform.up, OrbitalDirectionToWorld)); rotationRate -= (sign * stabilityAssistAccel); } else if (StabilityAssistMode == ShipSystems.StabilityAssistMode.RadialIn) { // Rotate to radial in Vector2 dir = OrbitalPosition.RotateVector(Trajectory.ArgumentOfPeriapsis).normalized; float sign = Vector2.SignedAngle(transform.up, -dir); rotationRate += (sign * stabilityAssistAccel); } else { // Rotate to radial out Vector2 dir = OrbitalPosition.RotateVector(Trajectory.ArgumentOfPeriapsis).normalized; float sign = Vector2.SignedAngle(transform.up, dir); rotationRate += (sign * stabilityAssistAccel); } rotationRate = Mathf.Clamp(rotationRate, -rotationRateCap, rotationRateCap); transform.Rotate(Vector3.forward, rotationRate); }
protected override void OnDrawGizmos() { base.OnDrawGizmos(); if (body == null) { return; } Gizmos.color = Color.green; Gizmos.DrawRay(Position, 5f * transform.up); Gizmos.color = Color.red; Gizmos.DrawRay(Position, 5f * OrbitalDirectionToWorld); Gizmos.color = Color.blue; Gizmos.DrawRay(Position, 5f * OrbitalPosition.RotateVector(Trajectory.ArgumentOfPeriapsis).normalized); }