Exemple #1
0
    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);
    }
Exemple #2
0
    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);
    }