Beispiel #1
0
 private static void SetupForQuickstart()
 {
     try {
         if (Settings.OperationMode == QuickstartSettings.QuickstartMode.Disabled)
         {
             return;
         }
         if (HugsLibUtility.ShiftIsHeld)
         {
             HugsLibController.Logger.Warning("Quickstart aborted: Shift key was held.");
             return;
         }
         CheckForErrorsAndWarnings();
         if (Settings.OperationMode == QuickstartSettings.QuickstartMode.GenerateMap)
         {
             if (GenCommandLine.CommandLineArgPassed("quicktest"))
             {
                 // vanilla QuickStarter will change the scene, only set up scenario and map size injection
                 PrepareMapGeneration();
             }
             else
             {
                 InitateMapGeneration();
             }
         }
         else if (Settings.OperationMode == QuickstartSettings.QuickstartMode.LoadMap)
         {
             var saveName = Settings.SaveFileToLoad;
             if (saveName == null)
             {
                 throw new WarningException("save filename not set");
             }
             var filePath = GenFilePaths.FilePathForSavedGame(saveName);
             if (!File.Exists(filePath))
             {
                 throw new WarningException("save file not found: " + Settings.SaveFileToLoad);
             }
             HugsLibController.Logger.Message("Quickstarter is loading saved game: " + saveName);
             Action loadAction = () => {
                 LongEventHandler.QueueLongEvent(delegate {
                     Current.Game = new Game {
                         InitData = new GameInitData {
                             gameToLoad = saveName
                         }
                     };
                 }, "Play", "LoadingLongEvent", true, null);
             };
             if (Settings.BypassSafetyDialog)
             {
                 loadAction();
             }
             else
             {
                 PreLoadUtility.CheckVersionAndLoad(filePath, ScribeMetaHeaderUtility.ScribeHeaderMode.Map, loadAction);
             }
         }
     } catch (WarningException e) {
         HugsLibController.Logger.Error("Quickstart aborted: " + e.Message);
     }
 }
Beispiel #2
0
        public static void InitateSaveLoading()
        {
            var saveName = GetSaveNameToLoad()
                           ?? throw new WarningException("save filename not set");
            var filePath = GenFilePaths.FilePathForSavedGame(saveName);

            if (!File.Exists(filePath))
            {
                throw new WarningException("save file not found: " + saveName);
            }
            HugsLibController.Logger.Message("Quickstarter is loading saved game: " + saveName);
            Action loadAction = () => {
                LongEventHandler.QueueLongEvent(delegate {
                    Current.Game = new Game {
                        InitData = new GameInitData {
                            gameToLoad = saveName
                        }
                    };
                }, "Play", "LoadingLongEvent", true, null);
            };

            if (Settings.BypassSafetyDialog)
            {
                loadAction();
            }
            else
            {
                PreLoadUtility.CheckVersionAndLoad(filePath, ScribeMetaHeaderUtility.ScribeHeaderMode.Map, loadAction);
            }
        }
        private static void LoadPlayerWorld()
        {
            Loger.Log("Client LoadPlayerWorld");

            var connect   = SessionClient.Get;
            var worldData = connect.WorldLoad();

            File.WriteAllBytes(SaveFullName, worldData.SaveFileData);
            Action loadAction = () =>
            {
                LongEventHandler.QueueLongEvent(delegate
                {
                    Current.Game = new Game {
                        InitData = new GameInitData {
                            gameToLoad = SaveName
                        }
                    };
                    GameLoades.AfterLoad = () =>
                    {
                        GameLoades.AfterLoad = null;

                        //Непосредственно после загрузки игры
                        InitGame();
                    };

                    /* вместо этого сделал через гармонику
                     * LongEventHandler.ExecuteWhenFinished(() =>
                     * {
                     *  var th = new Thread(() =>
                     *  {
                     *      //не знаю как правильно привязаться к событию окончания загрузки мира
                     *      while (Current.Game == null || Current.Game.World == null || Find.WorldObjects == null)
                     *      {
                     *          Thread.Sleep(100);
                     *          Loger.Log("Sleep(100)");
                     *      }
                     *      Thread.Sleep(100);
                     *      LongEventHandler.QueueLongEvent(delegate
                     *      {
                     *          //Непосредственно после загрузки игры
                     *          InitGame();
                     *      }, "", false, null);
                     *  });
                     *  th.IsBackground = true;
                     *  th.Start();
                     * });
                     */
                }, "Play", "LoadingLongEvent", false, null);
            };

            PreLoadUtility.CheckVersionAndLoad(SaveFullName, ScribeMetaHeaderUtility.ScribeHeaderMode.Map, loadAction);
        }
Beispiel #4
0
 protected override void DoFileInteraction(string saveFileName)
 {
     PreLoadUtility.CheckVersionAndLoad(GenFilePaths.FilePathForSavedGame(saveFileName), ScribeMetaHeaderUtility.ScribeHeaderMode.Map, delegate
     {
         Action preLoadLevelAction = delegate
         {
             MemoryUtility.ClearAllMapsAndWorld();
             Current.Game                     = new Game();
             Current.Game.InitData            = new GameInitData();
             Current.Game.InitData.gameToLoad = saveFileName;
         };
         LongEventHandler.QueueLongEvent(preLoadLevelAction, "Play", "LoadingLongEvent", true, null);
     });
 }
Beispiel #5
0
        protected override void DoFileInteraction(string fileName)
        {
            string filePath = GenFilePaths.AbsPathForScenario(fileName);

            PreLoadUtility.CheckVersionAndLoad(filePath, ScribeMetaHeaderUtility.ScribeHeaderMode.Scenario, delegate
            {
                Scenario obj = null;
                if (GameDataSaveLoader.TryLoadScenario(filePath, ScenarioCategory.CustomLocal, out obj))
                {
                    this.scenarioReturner(obj);
                }
                this.Close(true);
            });
        }
        /// <summary>
        /// После успешной регистрации или входа
        /// </summary>
        ///
        public static void InitConnected()
        {
            Loger.Log("Client InitConnected()");
            Data = new ClientData();
            TimersStop();
            Timers = new WorkTimer();

            var connect    = SessionClient.Get;
            var serverInfo = connect.GetInfo(true);

            My = serverInfo.My;
            ServerTimeDelta = serverInfo.ServerTime - DateTime.UtcNow;

            Loger.Log("Client IsAdmin=" + serverInfo.IsAdmin + " Seed=" + serverInfo.Seed + " ExistMap=" + My.ExistMap);
            //создаем мир, если мы админ
            if (serverInfo.IsAdmin && serverInfo.Seed == "")
            {
                Loger.Log("Client InitConnected() IsAdmin");
                var form = new Dialog_CreateWorld();
                form.PostCloseAction = () =>
                {
                    if (!form.ResultOK)
                    {
                        Disconnected("OCity_SessionCC_MsgCanceledCreateW".Translate());
                        return;
                    }
                    GameStarter.SetMapSize        = int.Parse(form.InputMapSize);
                    GameStarter.SetPlanetCoverage = float.Parse(form.InputPlanetCoverage) / 100f;
                    GameStarter.SetSeed           = form.InputSeed;
                    GameStarter.SetDifficulty     = int.Parse(form.InputDifficulty);
                    GameStarter.SetScenario       = ScenarioDefault;

                    GameStarter.AfterStart = CreatingWorld;
                    GameStarter.GameGeneration();
                };
                Find.WindowStack.Add(form);
                return;
            }

            if (!My.ExistMap)
            {
                Loger.Log("Client InitConnected() ExistMap");

                //создать поселение
                GameStarter.SetMapSize        = serverInfo.MapSize;
                GameStarter.SetPlanetCoverage = serverInfo.PlanetCoverage;
                GameStarter.SetSeed           = serverInfo.Seed;
                GameStarter.SetDifficulty     = serverInfo.Difficulty;
                GameStarter.SetScenario       = ScenarioDefault;

                GameStarter.AfterStart = CreatePlayerMap;

                GameStarter.GameGeneration(false);

                //выбор места на планете. Код из события завершения выбора параметров планеты Page_CreateWorldParams
                Loger.Log("Client InitConnected() ExistMap1");

                Current.Game          = new Game();
                Current.Game.InitData = new GameInitData();
                Current.Game.Scenario = GameStarter.SetScenario;
                Current.Game.Scenario.PreConfigure();
                Current.Game.storyteller = new Storyteller(StorytellerDefOf.Cassandra
                                                           , GameStarter.SetDifficulty == 2 ? DifficultyDefOf.Hard
                        : GameStarter.SetDifficulty == 1 ? DifficultyDefOf.Medium
                        : DifficultyDefOf.VeryEasy);

                Loger.Log("Client InitConnected() ExistMap2");
                Current.Game.World = WorldGenerator.GenerateWorld(
                    GameStarter.SetPlanetCoverage,
                    GameStarter.SetSeed,
                    GameStarter.SetOverallRainfall,
                    GameStarter.SetOverallTemperature);

                Loger.Log("Client InitConnected() ExistMap3");
                //после создания мира запускаем его обработку, загружаем поселения др. игроков
                UpdateWorldController.InitGame();
                UpdateWorld(true);

                Loger.Log("Client InitConnected() ExistMap4");
                var form = GetFirstConfigPage();
                Find.WindowStack.Add(form);

                Loger.Log("Client InitConnected() ExistMap5");

                MemoryUtility.UnloadUnusedUnityAssets();

                Loger.Log("Client InitConnected() ExistMap6");
                Find.World.renderer.RegenerateAllLayersNow();

                Loger.Log("Client InitConnected() ExistMap7");

                return;
            }

            Loger.Log("Client InitConnected() WorldLoad");

            var worldData = connect.WorldLoad();

            File.WriteAllBytes(SaveFullName, worldData.SaveFileData);
            Action loadAction = () => {
                LongEventHandler.QueueLongEvent(delegate {
                    Current.Game = new Game {
                        InitData = new GameInitData {
                            gameToLoad = SaveName
                        }
                    };
                    GameLoades.AfterLoad = () =>
                    {
                        GameLoades.AfterLoad = null;

                        //Непосредственно после загрузки игры
                        InitGame();
                    };

                    /* вместо этого сделал через гармонику
                     * LongEventHandler.ExecuteWhenFinished(() =>
                     * {
                     *  var th = new Thread(() =>
                     *  {
                     *      //не знаю как правильно привязаться к событию окончания загрузки мира
                     *      while (Current.Game == null || Current.Game.World == null || Find.WorldObjects == null)
                     *      {
                     *          Thread.Sleep(100);
                     *          Loger.Log("Sleep(100)");
                     *      }
                     *      Thread.Sleep(100);
                     *      LongEventHandler.QueueLongEvent(delegate
                     *      {
                     *          //Непосредственно после загрузки игры
                     *          InitGame();
                     *      }, "", false, null);
                     *  });
                     *  th.IsBackground = true;
                     *  th.Start();
                     * });
                     */
                }, "Play", "LoadingLongEvent", false, null);
            };

            PreLoadUtility.CheckVersionAndLoad(SaveFullName, ScribeMetaHeaderUtility.ScribeHeaderMode.Map, loadAction);
        }