Пример #1
0
        public static TubeInputs GetOposite(TubeInputs input)
        {
            TubeInputs oposite = 0;

            switch (input)
            {
            case TubeInputs.Top:
                oposite = TubeInputs.Bottom;
                break;

            case TubeInputs.Right:
                oposite = TubeInputs.Left;
                break;

            case TubeInputs.Bottom:
                oposite = TubeInputs.Top;
                break;

            case TubeInputs.Left:
                oposite = TubeInputs.Right;
                break;
            }

            return(oposite);
        }
Пример #2
0
        public WaterFlowIterator(ICell <ITube> cell, IBoard <ITube> board)
        {
            _start = cell;
            _board = board;

            _exclude = 0;

            Current = _start;
        }
Пример #3
0
            private TubeInputs Rotate()
            {
                TubeInputs newInputs = 0;

                if (_direction == RotationDirection.Clockwise)
                {
                    if ((Owner.InternalInputs & TubeInputs.Top) == TubeInputs.Top)
                    {
                        newInputs |= TubeInputs.Right;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Right) == TubeInputs.Right)
                    {
                        newInputs |= TubeInputs.Bottom;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Bottom) == TubeInputs.Bottom)
                    {
                        newInputs |= TubeInputs.Left;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Left) == TubeInputs.Left)
                    {
                        newInputs |= TubeInputs.Top;
                    }
                }
                else
                {
                    if ((Owner.InternalInputs & TubeInputs.Top) == TubeInputs.Top)
                    {
                        newInputs |= TubeInputs.Left;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Left) == TubeInputs.Left)
                    {
                        newInputs |= TubeInputs.Bottom;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Bottom) == TubeInputs.Bottom)
                    {
                        newInputs |= TubeInputs.Right;
                    }

                    if ((Owner.InternalInputs & TubeInputs.Right) == TubeInputs.Right)
                    {
                        newInputs |= TubeInputs.Top;
                    }
                }

                return(newInputs);
            }
Пример #4
0
        public bool MoveNext()
        {
            var result = false;
            var to     = Current.Instance.Inputs ^ _exclude;
            var column = Current.Column;
            var row    = Current.Row;

            switch (to)
            {
            case TubeInputs.Top:
                row--;
                break;

            case TubeInputs.Right:
                column++;
                break;

            case TubeInputs.Bottom:
                row++;
                break;

            case TubeInputs.Left:
                column--;
                break;
            }

            if (row >= 0 && row < _board.Rows &&
                column >= 0 && column < _board.Columns &&
                _board[column, row].Instance.Inputs.HasFlag(TubeInputsHelper.GetOposite(to)))
            {
                result   = true;
                _exclude = TubeInputsHelper.GetOposite(to);
                Current  = _board[column, row];
            }
            else
            {
                Current = null;
            }

            return(result);
        }
Пример #5
0
 public FakeTube(TubeInputs inputs)
 {
     Inputs = inputs;
 }