Example #1
0
        /*
         * Activates tile logic when it's been clicked on. x,y,z - indexes.
         */

        public virtual unsafe void OnHit(int x, int y, int z, int button)
        {
            if (isLost || isWon)
            {
                return;
            }

            if (((button == 0 && InputEngine.curMouse.RightButton == ButtonState.Pressed) ||
                 (button == 1 && InputEngine.curMouse.LeftButton == ButtonState.Pressed) ||
                 InputEngine.WereBothMouseButtonsClicked()) && tiles[x][y][z].IsOpened)
            {
                if (GetSurroundingMinesLeftCount(x, y, z) == 0)
                {
                    for (int i = x - 1; i <= x + 1; i++)
                    {
                        for (int j = y - 1; j <= y + 1; j++)
                        {
                            if (i >= 0 && j >= 0 &&
                                i < fieldSize.X && j < fieldSize.Y &&
                                !tiles[i][j][0].IsOpened && !tiles[i][j][0].IsFlagged)
                            {
                                OnHitRightLeft(i, j, 0);
                            }
                        }
                    }
                }
                else
                {
                    Entity.EntityManager.AddSquareCross(new Vector3(x * 16, y * 16, 0), new Vector3(16, 16, 0));
                }
                return;
            }

            if (button == 0)
            {
                Tile t = tiles[x][y][z];
                if (t.IsFlagged || t.IsOpened)
                {
                    return;
                }
                t.OnOpened();
                if (t.CurrentState == 0)
                {
                    for (int i = x - 1; i <= x + 1; i++)
                    {
                        for (int j = y - 1; j <= y + 1; j++)
                        {
                            if (i >= 0 && j >= 0 &&
                                i < fieldSize.X && j < fieldSize.Y &&
                                !tiles[i][j][0].IsOpened && !tiles[i][j][0].IsFlagged && tiles[i][j][0].CurrentState >= 0)
                            {
                                OnHit(i, j, 0, button);
                            }
                        }
                    }
                }
            }
            if (button == 1)
            {
                Tile t = tiles[x][y][z];
                if (!t.IsOpened)
                {
                    t.IsFlagged = !t.IsFlagged;
                    minesLeft  += t.IsFlagged ? -1 : 1;
                }
            }
        }