Example #1
0
 private IEnumerator UpdateFormation(DiscoveredFormations formations, Block.State toState)
 {
     foreach (Block block in formations.AllClearedBlocks)
     {
         if (UpdateFormationBlock(block, toState) == true)
         {
             yield return(animationDelays.WaitForStaggerFormation);
         }
     }
 }
Example #2
0
        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();
            }
        }