public bool LoadFromWorldGen() { DebugUtil.LogArgs("Attempting to start a new game with current world gen"); WorldGen.LoadSettings(); string worldName; try { worldName = CustomGameSettings.Instance.GetCurrentQualitySetting(CustomGameSettingConfigs.World).id; } catch { worldName = "worlds/SandstoneDefault"; } worldGen = new WorldGen(worldName, null); SimSaveFileStructure simSaveFileStructure = worldGen.LoadWorldGenSim(); if (simSaveFileStructure == null) { Debug.LogError("Attempt failed"); return(false); } worldDetailSave = simSaveFileStructure.worldDetail; if (worldDetailSave == null) { Debug.LogError("Detail is null"); } GridSettings.Reset(simSaveFileStructure.WidthInCells, simSaveFileStructure.HeightInCells); Singleton <KBatchedAnimUpdater> .Instance.InitializeGrid(); Sim.SIM_Initialize(Sim.DLL_MessageHandler); SimMessages.CreateSimElementsTable(ElementLoader.elements); SimMessages.CreateDiseaseTable(); try { FastReader reader = new FastReader(simSaveFileStructure.Sim); if (Sim.Load(reader) != 0) { DebugUtil.LogWarningArgs("\n--- Error loading save ---\nSimDLL found bad data\n"); Sim.Shutdown(); return(false); } } catch (Exception ex) { Debug.LogWarning("--- Error loading Sim FROM NEW WORLDGEN ---" + ex.Message + "\n" + ex.StackTrace); Sim.Shutdown(); return(false); } Debug.Log("Attempt success"); SceneInitializer.Instance.PostLoadPrefabs(); SceneInitializer.Instance.NewSaveGamePrefab(); worldGen.ReplayGenerate(Reset); OnWorldGenComplete.Signal(); ThreadedHttps <KleiMetrics> .Instance.StartNewGame(); return(true); }
private static bool SaveSim(WorldGenSettings settings, Data data, Action <OfflineWorldGen.ErrorInfo> error_cb) { try { Manager.Clear(); SimSaveFileStructure simSaveFileStructure = new SimSaveFileStructure(); for (int i = 0; i < data.overworldCells.Count; i++) { simSaveFileStructure.worldDetail.overworldCells.Add(new WorldDetailSave.OverworldCell(SettingsCache.GetCachedSubWorld(data.overworldCells[i].node.type).zoneType, data.overworldCells[i])); } simSaveFileStructure.worldDetail.globalWorldSeed = data.globalWorldSeed; simSaveFileStructure.worldDetail.globalWorldLayoutSeed = data.globalWorldLayoutSeed; simSaveFileStructure.worldDetail.globalTerrainSeed = data.globalTerrainSeed; simSaveFileStructure.worldDetail.globalNoiseSeed = data.globalNoiseSeed; simSaveFileStructure.WidthInCells = Grid.WidthInCells; simSaveFileStructure.HeightInCells = Grid.HeightInCells; using (MemoryStream memoryStream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(memoryStream)) { Sim.Save(writer); } simSaveFileStructure.Sim = memoryStream.ToArray(); } using (MemoryStream memoryStream2 = new MemoryStream()) { using (BinaryWriter writer2 = new BinaryWriter(memoryStream2)) { try { Serializer.Serialize(simSaveFileStructure, writer2); } catch (Exception ex) { DebugUtil.LogErrorArgs("Couldn't serialize", ex.Message, ex.StackTrace); } } using (BinaryWriter binaryWriter = new BinaryWriter(File.Open(WorldGen.SIM_SAVE_FILENAME, FileMode.Create))) { Manager.SerializeDirectory(binaryWriter); binaryWriter.Write(memoryStream2.ToArray()); } } return(true); } catch (Exception ex2) { error_cb(new OfflineWorldGen.ErrorInfo { errorDesc = string.Format(UI.FRONTEND.SUPPORTWARNINGS.SAVE_DIRECTORY_READ_ONLY, WorldGen.SIM_SAVE_FILENAME), exception = ex2 }); DebugUtil.LogErrorArgs("Couldn't write", ex2.Message, ex2.StackTrace); return(false); } }