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); }
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; } }
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); } }
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); } }