Esempio n. 1
0
 private void SetCellState(int i, int j, Tile.CellState state)
 {
     if (i < 0 || i >= nRows || j < 0 || j >= nCols) return;
     if (Tiles[i, j] == null) return;
     if (Tiles[i,j].State == Tile.CellState.None && Gems[i,j] == null)
         Tiles[i, j].ChangeState(state);
 }
Esempio n. 2
0
        private void LoadTile(string[] strTextures)
        {
            if (tiles != null)
                tiles.ClearChildren();

            int nTextures = strTextures.Length;

            int startRow = (height - 1) / 2;
            int lastRow = (height - 1) * 2 - startRow;

            for (int j = 0; j < nCols; j++)
            {
                for (int i = startRow; i <= lastRow; i += 2)
                {

                    float left = this.Left + j * TileWidth;
                    float top = this.Top + i * TileHeight;
                    var sprite = StaticSprite.CreateSprite(left, top, new Vector2(1, 1), @"Sprite\GameUI\" + strTextures[0], 0.5f, (int)((float)TileWidth * 4 / 3), 2 * TileHeight);

                    Tiles[i, j] = new Tile(sprite, i, j);

                    AddHexagonCollider(Tiles[i, j].sprite);
                    CellStyle.Assign(Tiles[i,j].sprite);
                    tiles.AddChild(Tiles[i,j]);
                }
                if (j < (height - 1) / 2) startRow--;
                else startRow++;
                lastRow = (height - 1) * 2 - startRow;
            }
        }
Esempio n. 3
0
        private void MarkNearAs(int i, int j, Tile.CellState state)
        {
            SetCellState(i - 1, j + 1, state);
            SetCellState(i + 1, j + 1, state);
            SetCellState(i + 2, j + 0, state);
            SetCellState(i - 2, j + 0, state);
            SetCellState(i - 1, j - 1, state);
            SetCellState(i + 1, j - 1, state);

            if (state == Tile.CellState.Near)
            {
                MarkNearAs(i - 1, j + 1, Tile.CellState.Far);
                MarkNearAs(i + 1, j + 1, Tile.CellState.Far);
                MarkNearAs(i + 2, j + 0, Tile.CellState.Far);
                MarkNearAs(i - 2, j + 0, Tile.CellState.Far);
                MarkNearAs(i - 1, j - 1, Tile.CellState.Far);
                MarkNearAs(i + 1, j - 1, Tile.CellState.Far);
            }
        }
Esempio n. 4
0
        public void SelectCell(int i, int j, bool isRemote = false)
        {
            if (winState != WinState.None) return;
            if (!isRemote)
            {
                if (Global.thisGame.playerState != Game1.PlayerState.Both)
                {
                    if (State==MapState.RedTurn && Global.thisGame.playerState != Game1.PlayerState.Red) return;
                    if (State==MapState.BlueTurn && Global.thisGame.playerState != Game1.PlayerState.Blue) return;
                }
            }
            if (visualState == VisualState.Transitioning || visualState == VisualState.Disabled) return;
            if (Tiles[i, j].State == Tile.CellState.None)
            {
                if (Gems[i, j] == null) return;

                if (Gems[i, j].team == Gem.Team.Red && State != MapState.RedTurn) return;
                if (Gems[i, j].team == Gem.Team.Blue && State != MapState.BlueTurn) return;

                ClearAllCellState();

                selectedCell = Tiles[i,j];

                Tiles[i, j].ChangeState(Tile.CellState.Selected);
                MarkNearAs(i, j, Tile.CellState.Near);
            }
            else if (Tiles[i, j].State == Tile.CellState.Near)
            {
                if (selectedCell != null)
                {
                    ClearAllCellState();
                    DuplicateCell(selectedCell.i, selectedCell.j, i, j);
                }
            }
            else if (Tiles[i, j].State == Tile.CellState.Far)
            {
                if (selectedCell != null)
                {
                    ClearAllCellState();
                    MoveCell(selectedCell.i, selectedCell.j, i, j);
                }
            }

            if (!isRemote && Global.thisGame.connectionState == Game1.ConnectionState.Connected)
            {
                Global.thisGame.HexagonServer.Emit("sendMove", "" + i + "," + j);
            }
        }