Example #1
0
    public void RotateStepTowardsTarget(float rawTargetZAngle)
    {
        float clampedTargetZAngle     = Mathfx.Modulo(rawTargetZAngle, 360);
        float maxShipRotationPerFrame = maxRotationSpeed;

        //If difference between target and current z angle is not less than degrees per frame, begin moving
        if (!(transform.eulerAngles.z - clampedTargetZAngle < maxShipRotationPerFrame && transform.rotation.eulerAngles.z - clampedTargetZAngle > -maxShipRotationPerFrame))
        {
            //If angle from current to target clockwise is less than or equal to 180, turn right.
            if (Mathfx.Modulo(clampedTargetZAngle - transform.eulerAngles.z, 360) > 180)
            {
                transform.eulerAngles = new Vector3(0, 0, transform.eulerAngles.z - maxShipRotationPerFrame);
            }
            else
            {
                //Otherwise, turn left
                transform.eulerAngles = new Vector3(0, 0, transform.eulerAngles.z + maxShipRotationPerFrame);
            }
        }
        else
        {
            //Since target z angle is less than max degrees per frame away, simply set z angle to target
            transform.eulerAngles = new Vector3(0, 0, clampedTargetZAngle);
        }
    }
Example #2
0
    public float GetRotationOffset(Vector3 targetPosition)
    {
        var   lastAngleZ = transform.eulerAngles.z;
        float rawOffset  = GetTargetAngleZ(targetPosition) - lastAngleZ;

        return(Mathfx.Modulo(rawOffset, 360));
    }