public void Cycle(bool clockwise)
        {
            for (int i = 0; i < count; i++)
            {
                var original = i;
                original = RangeMath.CycleInt(original, count - 1, !clockwise);
                BeginSlide(original, i);
            }

            cooldown = true;
        }
    IEnumerator RotateWorld(bool clockwise)
    {
        rotating         = true;
        movement.gravity = Vector3.zero;

        GravityState oldState = gravityStates[gravityIndex];

        gravityIndex = RangeMath.CycleInt(gravityIndex, gravityStates.Length - 1, clockwise);
        GravityState newState = gravityStates[gravityIndex];

        Quaternion oldRotation = Quaternion.Euler(oldState.objectRotation);
        Quaternion newRotation = Quaternion.Euler(newState.objectRotation);

        float oldZAngle = pivot.localEulerAngles.z;
        float newZAngle = oldZAngle + rotationDegrees * (clockwise ? -1 : 1);

        float timer = 0;

        while (timer < rotationTime)
        {
            timer += Time.deltaTime;
            if (timer > rotationTime)
            {
                timer = rotationTime;
            }

            foreach (Transform rotor in toRotate)
            {
                rotor.rotation = Quaternion.Lerp(oldRotation, newRotation, timer / rotationTime);
            }

            float z = Mathf.Lerp(oldZAngle, newZAngle, timer / rotationTime);
            VectorMath.SetZRotation(pivot, z);

            yield return(null);
        }

        movement.gravity = newState.gravityDirection;
        rotating         = false;
    }
Пример #3
0
 public void Cycle(bool clockwise)
 {
     index = RangeMath.CycleInt(index, gravityDirections.Length - 1, clockwise);
 }