private void LoadGame(object sender, EventArgs e) { if (loadedGamesListBox.SelectedIndex < 0) { return; } SingleplayerSavedGameInfo savedGameInfo = (SingleplayerSavedGameInfo)loadedGamesListBox.Items[loadedGamesListBox.SelectedIndex]; #if (!DEBUG) try { #endif using (UtilsDbContext db = new UtilsDbContext()) { Game game = Game.Load(db, savedGameInfo); OnSingleplayerGameLoaded?.Invoke(game); } #if (!DEBUG) } catch (Exception) { MessageBox.Show("Selected game save has been damaged.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } #endif }
private void DeleteGame(object sender, EventArgs e) { if (loadedGamesListBox.SelectedIndex < 0) { return; } deleteButton.Enabled = false; List <SingleplayerSavedGameInfo> selectedFiles = loadedGamesListBox.SelectedItems.Cast <SingleplayerSavedGameInfo>().ToList(); for (int i = selectedFiles.Count - 1; i >= 0; i--) { int selectedIndex = loadedGamesListBox.SelectedIndices[i]; loadedGamesListBox.Items.RemoveAt(selectedIndex); } using (UtilsDbContext db = new UtilsDbContext()) { foreach (SingleplayerSavedGameInfo savedGameInfo in selectedFiles) { db.Remove(savedGameInfo); } } deleteButton.Enabled = true; }
private void StartNewGame(Game game) { switch (game.GameType) { case GameType.SinglePlayer: // save the game using (UtilsDbContext db = new UtilsDbContext()) { game.Save(db); } break; case GameType.MultiplayerHotseat: // save the game using (UtilsDbContext db = new UtilsDbContext()) { game.Save(db); } break; case GameType.MultiplayerNetwork: break; default: throw new ArgumentOutOfRangeException(); } LoadInGameScreen(game); }
private void Start(object sender, EventArgs e) { Map map = mapSettingsControl.GetMap(); IList <AiPlayer> aiPlayers = aiPlayerSettingsControl.GetPlayers(); IList <Player> players = new List <Player>(); foreach (AiPlayer aiPlayer in aiPlayers) { players.Add(aiPlayer); } players.Add(myHumanPlayerControl.GetPlayer()); foreach (Player player in humanPlayerSettingsControl.GetPlayers()) { players.Add(player); } Game game = null; using (UtilsDbContext db = new UtilsDbContext()) { IEnumerable <HotseatSavedGameInfo> savedGamesEnum = db.HotseatSavedGameInfos.ToList(); HotseatSavedGameInfo lastGame = savedGamesEnum.LastOrDefault(); int gameId = 1; if (lastGame != null) { gameId = lastGame.Id + 1; } var factory = new GameFactory(); game = factory.CreateGame(gameId, GameType.MultiplayerHotseat, map, players, fogOfWar: fogOfWarCheckBox.Checked); // TEST /*NetworkObjectWrapper wrapper = new NetworkObjectWrapper<Game>() {TypedValue = game}; * using (var ms = new MemoryStream()) * { * wrapper.Serialize(ms); * * ms.Position = 0; * * var obj = NetworkObjectWrapper.Deserialize(ms).Value; * }*/ // END TEST } OnGameStarted?.Invoke(game); }
private void ControlLoad(object sender, EventArgs e) { Task.Run(() => { // clear combo box items Invoke(new Action(mapComboBox.Items.Clear)); // get map infos from database DbSet <MapInfo> mapInfos = new UtilsDbContext().Maps; maps = mapInfos.ToList(); // refresh the combo box with new items Invoke(new Action(RefreshComboBox)); }); }
public void RefreshSavedGames() { Task.Run(() => { using (UtilsDbContext db = new UtilsDbContext()) { var savedGames = (from game in db.SingleplayerSavedGameInfos.AsParallel() orderby game.SavedGameDate descending select game).ToList(); foreach (SingleplayerSavedGameInfo savedGame in savedGames) { Invoke(new Action(() => loadedGamesListBox.Items.Add(savedGame))); } } }); }
private void Start(object sender, EventArgs e) { try { Map map = mapSettingsControl.GetMap(); IList <AiPlayer> aiPlayers = aiPlayerSettingsControl.GetPlayers(); IList <Player> players = new List <Player>(); foreach (AiPlayer aiPlayer in aiPlayers) { players.Add(aiPlayer); } players.Add(myHumanPlayerControl.GetPlayer()); Game game = null; // generate id for the game using (UtilsDbContext db = new UtilsDbContext()) { IEnumerable <SingleplayerSavedGameInfo> savedGamesEnum = db.SingleplayerSavedGameInfos.AsEnumerable(); SingleplayerSavedGameInfo lastGame = savedGamesEnum.LastOrDefault(); int gameId = 1; if (lastGame != null) { gameId = lastGame.Id + 1; } var factory = new GameFactory(); game = factory.CreateGame(gameId, GameType.SinglePlayer, map, players, fogOfWar: fogOfWarCheckBox.Checked); } OnGameStarted?.Invoke(game); } catch (UnauthorizedAccessException) { MessageBox.Show( "One or more components required to start the game are missing! Please, reinstall the game!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public void RefreshSavedGames() { Task.Run(() => { using (UtilsDbContext db = new UtilsDbContext()) { var savedGames = (from game in db.HotseatSavedGameInfos.AsParallel() orderby game.SavedGameDate descending select game).ToList(); // TODO: might be too slow foreach (HotseatSavedGameInfo savedGame in savedGames) { Invoke(new Action(() => loadedGamesListBox.Items.Add(savedGame))); } // TODO: data binding } }); }
public void Initialize(Game game) { if (game == null) { throw new ArgumentException("Game cannot be null."); } MapImageProcessor mapImageProcessor; using (UtilsDbContext db = new UtilsDbContext()) { MapInfo mapInfo = (from item in db.Maps where item.Id == game.Map.Id select item).First(); mapImageProcessor = MapImageProcessor.Create(game.Map, mapInfo.ImageColoredRegionsPath, mapInfo.ColorRegionsTemplatePath, mapInfo.ImagePath, game.IsFogOfWar); } // initialize game switch (game.GameType) { case GameType.SinglePlayer: gameFlowHandler = new SingleplayerGameFlowHandler(game, mapImageProcessor); break; case GameType.MultiplayerHotseat: gameFlowHandler = new HotseatGameFlowHandler(game, mapImageProcessor); break; case GameType.MultiplayerNetwork: throw new NotImplementedException(); } // initialize map processor mapHandlerControl.Initialize(gameFlowHandler); gameFlowHandler.OnRoundPlayed += () => { using (UtilsDbContext db = new UtilsDbContext()) { gameFlowHandler.Game.Save(db); } }; gameFlowHandler.OnBegin += () => { MessageBox.Show($"Player {gameFlowHandler.PlayerOnTurn.Name} is on turn."); }; gameFlowHandler.OnEnd += player => { MessageBox.Show($"Player {player.Name} has won the game!"); beginGamePhaseControl.Hide(); turnPhaseControl.Hide(); beginRoundPhaseControl.Hide(); GameState = GameState.GameEnd; }; beginGamePhaseControl.Initialize(gameFlowHandler); turnPhaseControl.Initialize(gameFlowHandler); // initialize game state if (game.RoundNumber == 0) { GameState = GameState.GameBeginning; beginGamePhaseControl.Show(); gameFlowHandler.Begin(); } else if (game.IsFinished()) { gameFlowHandler.End(); } else { GameState = GameState.RoundBeginning; beginRoundPhaseControl.Show(); gameFlowHandler.Begin(); } }