コード例 #1
0
ファイル: BubbleMatrix.cs プロジェクト: ThatFinnishGuy/Blops
        /*
         * Returns all of the Bubbles which are in the immediate neighborhoud of a given location, including the bubble
         *  in that particular location
         * Returns null if there is no bubble in the current location
         * @param {Vector2} location. Location of the matrix that we want to obtain the neighbours of
         */
        public ArrayList neighbours(Vector2 location)
        {
            int row    = (int)location.x;
            int column = (int)location.y;

            ArrayList _neigbours = new ArrayList();

            if (row < 0 || row > this._rows - 1 || column < 0 || column > this._columns - 1)
            {
                throw new System.ArgumentException("Looking for neighbors of an invalid location");
            }

            if (this._bubbleMatrix[row, column] != null)
            {
                _neigbours.AddNotNull(this._bubbleMatrix[row, column]);

                // Left and right neighbours
                if (column > 0)
                {
                    _neigbours.AddNotNull(this._bubbleMatrix[row, column - 1]);
                }
                if (column < this._columns - 1)
                {
                    _neigbours.AddNotNull(this._bubbleMatrix[row, column + 1]);
                }

                // higher and lower neighbours
                bool isRowEven = row % 2 == 0;
                if ((isBaselineAlignedLeft && isRowEven) || (!isBaselineAlignedLeft && !isRowEven))
                {
                    if (row > 0)
                    {
                        if (column > 0)
                        {
                            _neigbours.AddNotNull(this._bubbleMatrix[row - 1, column - 1]);
                        }
                        _neigbours.AddNotNull(this._bubbleMatrix[row - 1, column]);
                    }
                    if (row < this._rows - 1)
                    {
                        if (column > 0)
                        {
                            _neigbours.AddNotNull(this._bubbleMatrix[row + 1, column - 1]);
                        }
                        _neigbours.AddNotNull(this._bubbleMatrix[row + 1, column]);
                    }
                }
                else
                {
                    if (row > 0)
                    {
                        _neigbours.AddNotNull(this._bubbleMatrix[row - 1, column]);
                        if (column < this._columns - 1)
                        {
                            _neigbours.AddNotNull(this._bubbleMatrix[row - 1, column + 1]);
                        }
                    }
                    if (row < this._rows - 1)
                    {
                        _neigbours.AddNotNull(this._bubbleMatrix[row + 1, column]);
                        if (column < this._columns - 1)
                        {
                            _neigbours.AddNotNull(this._bubbleMatrix[row + 1, column + 1]);
                        }
                    }
                }
                return(_neigbours);
            }
            return(null);
        }