private bool IncrementLayer() { current_layer++; if (current_layer > max_layer) { return(false); } state = SpiralState.Bottom; Current = Vector3Int.one * (current_layer * -1); return(true); }
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); }
public void Reset() { Current = Vector3Int.zero; current_layer = -1; state = SpiralState.Center; }