public static void AllGamesBlocked() { Player newPlayer = WorldLoadingPlayer; WorldLoadingPlayer = null; new Thread(() => { // Wait to get all remaining packets processed, because unprocessed packets // before saving may end in an desynced game for the joining client Thread.Sleep(2000); // Create game save in the main thread AsyncAction action = SimulationManager.instance.AddAction(SaveHelpers.SaveServerLevel); // Wait until the save action is queued and the game is saved while (!action.completed || SaveHelpers.IsSaving()) { Thread.Sleep(10); } Command.SendToClient(newPlayer, new WorldTransferCommand { World = SaveHelpers.GetWorldFile() }); newPlayer.Status = ClientStatus.Loading; }).Start(); }
protected override void Handle(WorldTransferCommand command) { if (MultiplayerManager.Instance.CurrentClient.Status == ClientStatus.Downloading) { Log.Info("World has been received, preparing to load world."); MultiplayerManager.Instance.CurrentClient.Status = ClientStatus.Loading; MultiplayerManager.Instance.CurrentClient.StopMainMenuEventProcessor(); SaveHelpers.LoadLevel(command.World); MultiplayerManager.Instance.UnblockGame(true); // See LoadingExtension for events after level loaded } }
public static void PrepareWorldLoad(Player newPlayer) { newPlayer.Status = ClientStatus.Downloading; // Open status window ThreadHelper.dispatcher.Dispatch(() => { ClientJoinPanel clientJoinPanel = UIView.GetAView().FindUIComponent <ClientJoinPanel>("MPClientJoinPanel"); if (clientJoinPanel != null) { clientJoinPanel.isVisible = true; clientJoinPanel.StartCheck(); } else { clientJoinPanel = (ClientJoinPanel)UIView.GetAView().AddUIComponent(typeof(ClientJoinPanel)); } clientJoinPanel.Focus(); }); // Inform other clients about the joining client Command.SendToOtherClients(new ClientJoiningCommand { JoiningFinished = false }, newPlayer); MultiplayerManager.Instance.GameBlocked = true; SimulationManager.instance.SimulationPaused = true; // Get a serialized version of the server world to send to the player. SaveHelpers.SaveServerLevel(); new Thread(() => { while (SaveHelpers.IsSaving()) { Thread.Sleep(100); } Command.SendToClient(newPlayer, new WorldTransferCommand { World = SaveHelpers.GetWorldFile() }); newPlayer.Status = ClientStatus.Loading; }).Start(); }
public static void PrepareWorldLoad(Player newPlayer) { newPlayer.Status = ClientStatus.Downloading; MultiplayerManager.Instance.BlockGame(newPlayer.Username); SimulationManager.instance.SimulationPaused = true; // Inform other clients about the joining client Command.SendToOtherClients(new ClientJoiningCommand { JoiningFinished = false, JoiningUsername = newPlayer.Username }, newPlayer); /* * Wait to get all remaining pakets processed, because unprocessed packets * before saving may end in an desynced game for the joining client */ Thread.Sleep(2000); // Get a serialized version of the server world to send to the player. SaveHelpers.SaveServerLevel(); new Thread(() => { while (SaveHelpers.IsSaving()) { Thread.Sleep(100); } Command.SendToClient(newPlayer, new WorldTransferCommand { World = SaveHelpers.GetWorldFile() }); newPlayer.Status = ClientStatus.Loading; }).Start(); }
private async Task ProcessCurrentSaves() { _syncContext.Post((s) => { ErrorTracker.CurrentError = "Checking Saves"; }, null); List <SaveSelectionModel> sav = new List <SaveSelectionModel>(); try { if (File.Exists(_save0Path)) { await _saveEditor.LoadSave(_save0Path, false); sav.Add(new SaveSelectionModel(0, $"Save 0 - Time: {_saveEditor.Save.SaveDate.ToString(SaveLines.DATE_FORMAT)} - Stage: {((int)SaveHelpers.StageToStageDisplay(_saveEditor.Save.Stage)).ToString()}", _save0Color)); } else { sav.Add(new SaveSelectionModel(0, $"Save 0 - New Game", _save0Color)); } if (File.Exists(_save1Path)) { await _saveEditor.LoadSave(_save1Path, false); sav.Add(new SaveSelectionModel(1, $"Save 1 - Time: {_saveEditor.Save.SaveDate.ToString(SaveLines.DATE_FORMAT)} - Stage: {((int)SaveHelpers.StageToStageDisplay(_saveEditor.Save.Stage)).ToString()}", _save1Color)); } else { sav.Add(new SaveSelectionModel(1, $"Save 1 - New Game", _save1Color)); } if (File.Exists(_save2Path)) { await _saveEditor.LoadSave(_save2Path, false); sav.Add(new SaveSelectionModel(2, $"Save 2 - Time: {_saveEditor.Save.SaveDate.ToString(SaveLines.DATE_FORMAT)} - Stage: {((int)SaveHelpers.StageToStageDisplay(_saveEditor.Save.Stage)).ToString()}", _save2Color)); } else { sav.Add(new SaveSelectionModel(2, $"Save 2 - New Game", _save2Color)); } } catch (Exception ex) { _syncContext.Post((s) => { ErrorTracker.CurrentError = ex.Message; }, null); } _syncContext.Post((s) => { PageModel.Saves.Clear(); foreach (var i in sav) { PageModel.Saves.Add(i); } ErrorTracker.CurrentError = string.Empty; }, null); _autoSaveTimer = new System.Timers.Timer() { AutoReset = false, Interval = Config.Instance.ConfigObject.AutoSaveIntervalMs }; _autoSaveTimer.Elapsed += AutoSaveTimerElapsed; _autoSaveTimer.Start(); }
private void ProcessBingoTileFlip(BingoTileData data) { //TODO: Mp and Hp need inventory definitions in save editor switch (data.TileDef.Type) { case BingoTileType.Hp: var hu = (int)SaveHelpers.StageToHpUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.HpUpgradesInv.Contains(hu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.HpUpgradesInv.Remove(hu); PageModel.SaveInfo.HpUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.HpUpgradesInv.Add(hu); PageModel.SaveInfo.HpUpgrades++; } break; case BingoTileType.Mp: var mu = (int)SaveHelpers.StageToMpUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.MpUpgradesInv.Contains(mu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.MpUpgradesInv.Remove(mu); PageModel.SaveInfo.MpUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.MpUpgradesInv.Add(mu); PageModel.SaveInfo.MpUpgrades++; } break; case BingoTileType.Clock: var cu = (int)SaveHelpers.StageToClockUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.ClockUpgradesInv.Contains(cu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.ClockUpgradesInv.Remove(cu); PageModel.SaveInfo.ClockUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.ClockUpgradesInv.Add(cu); PageModel.SaveInfo.ClockUpgrades++; } break; case BingoTileType.Knife: var ku = (int)SaveHelpers.StageToKnifeUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.KnifeUpgradesInv.Contains(ku)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.KnifeUpgradesInv.Remove(ku); PageModel.SaveInfo.KnifeUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.KnifeUpgradesInv.Add(ku); PageModel.SaveInfo.KnifeUpgrades++; } break; case BingoTileType.Trash: var t = data.TileDef.Data; if (PageModel.SaveInfo.TrashCans.Contains(t)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.TrashCans.Remove(t); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.TrashCans.Add(t); } break; case BingoTileType.Statue: var s = data.TileDef.Data; if (PageModel.SaveInfo.Statues.Contains(s)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.Statues.Remove(s); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.Statues.Add(s); } break; case BingoTileType.Key: var k = data.TileDef.Data; if (PageModel.SaveInfo.Keys.Contains(k)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.Keys.Remove(k); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.Keys.Add(k); } break; case BingoTileType.Upgrade: { HandleUpgradeToggle(data); break; } } Task.Run(() => SyncViewModelToSave(false)); }
private Visibility IsBingoTileVisible(BingoTileData data) { if (data.TileDef == null) { return(Visibility.Hidden); } try { switch (data.TileDef.Type) { case BingoTileType.Hp: if (PageModel.SaveInfo.HpUpgradesInv.Contains((int)SaveHelpers.StageToHpUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Mp: if (PageModel.SaveInfo.MpUpgradesInv.Contains((int)SaveHelpers.StageToMpUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Clock: if (PageModel.SaveInfo.ClockUpgradesInv.Contains((int)SaveHelpers.StageToClockUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Knife: if (PageModel.SaveInfo.KnifeUpgradesInv.Contains((int)SaveHelpers.StageToKnifeUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Trash: if (PageModel.SaveInfo.TrashCans.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Statue: if (PageModel.SaveInfo.Statues.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Skill: break; case BingoTileType.Key: if (PageModel.SaveInfo.Keys.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Upgrade: if (PageModel.SaveInfo.Upgrades.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; } } catch (Exception ex) { ErrorTracker.CurrentError = ex.Message; } return(Visibility.Hidden); }
public void CamelCasePropNames_given_delimited_string_should_return_camel_cased_string() { var camelCase = SaveHelpers.CamelCasePropNames("TestName.PropName"); Assert.AreEqual(camelCase, "testName.propName"); }