Ejemplo n.º 1
0
 private bool IncrementLayer()
 {
     current_layer++;
     if (current_layer > max_layer)
     {
         return(false);
     }
     state   = SpiralState.Bottom;
     Current = Vector3Int.one * (current_layer * -1);
     return(true);
 }
Ejemplo n.º 2
0
        public bool MoveNext()
        {
            if (current_layer == -1)
            {
                current_layer = 0;
                return(true);
            }

            switch (state)
            {
            case SpiralState.Center:
                return(IncrementLayer());

            case SpiralState.Bottom:
                if (!NextInPlane())
                {
                    state   = SpiralState.Middle;
                    Current = Vector3Int.one * -current_layer + new Vector3Int(0, 0, 1);
                }
                break;

            case SpiralState.Middle:
                if (!NextInMiddle())
                {
                    if (Current.z == current_layer - 1)
                    {
                        state   = SpiralState.Top;
                        Current = new Vector3Int(-current_layer, -current_layer, current_layer);
                    }
                    else
                    {
                        Current = new Vector3Int(-current_layer, -current_layer, Current.z + 1);
                    }
                }
                break;

            case SpiralState.Top:
                if (!NextInPlane())
                {
                    return(IncrementLayer());
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(true);
        }
Ejemplo n.º 3
0
 public void Reset()
 {
     Current       = Vector3Int.zero;
     current_layer = -1;
     state         = SpiralState.Center;
 }