private IEnumerator UpdateFormation(DiscoveredFormations formations, Block.State toState) { foreach (Block block in formations.AllClearedBlocks) { if (UpdateFormationBlock(block, toState) == true) { yield return(animationDelays.WaitForStaggerFormation); } } }
private bool UpdateFormationBlock(Block checkBlock, Block.State toState) { // Mark the block as detected bool returnFlag = false; if (((int)checkBlock.CurrentState) < ((int)toState)) { checkBlock.CurrentState = toState; returnFlag = true; } return(returnFlag); }
protected Color getDoorColour(Wall w, Block currentCell) { Block.State doorState = Block.State.Unvisited; if (currentCell.hidden && w.getOpposite(currentCell).hidden) { return(Settings.Default.ColorWalls); } if (!Settings.Default.UseFancyDoors) { return(Settings.Default.ColorDoors); } if (w.getOpposite(currentCell).currentState != currentCell.currentState) { // check exit and current states // use non-current state for when it's next to each other if (currentCell.currentState == Block.State.Current) { doorState = w.getOpposite(currentCell).currentState; } if (w.getOpposite(currentCell).currentState == Block.State.Current) { doorState = currentCell.currentState; } if (currentCell.currentState == Block.State.Exit) { doorState = w.getOpposite(currentCell).currentState; } if (w.getOpposite(currentCell).currentState == Block.State.Exit) { doorState = currentCell.currentState; } if (!maze.isSolved) { if (currentCell.currentState == Block.State.Exit && w.getOpposite(currentCell).currentState == Block.State.Current) { doorState = Block.State.Unvisited; } if (currentCell.currentState == Block.State.Current && w.getOpposite(currentCell).currentState == Block.State.Exit) { doorState = Block.State.Visited; } } else { if (currentCell.currentState == Block.State.Exit && w.getOpposite(currentCell).currentState == Block.State.Current) { doorState = Block.State.Current; } if (currentCell.currentState == Block.State.Current && w.getOpposite(currentCell).currentState == Block.State.Exit) { doorState = Block.State.Current; } } } else { // same state, mark as same colour doorState = currentCell.currentState; } switch (doorState) { case Block.State.Unvisited: return(Settings.Default.ColorDoors); case Block.State.Current: return(Settings.Default.ColorCurrentBlock); case Block.State.Visited: return(Settings.Default.ColorVisitedBlock); case Block.State.Exit: return(Settings.Default.ColorExitBlock); default: throw new ArgumentOutOfRangeException(); } }