示例#1
0
    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);
    }
示例#2
0
 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);
     }
 }