Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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
            }
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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");
        }