public void LoadWorld()
        {
            Current.Game = this.Game;

            LongEventHandler.SetCurrentEventText("FilUnderscore.PersistentRimWorlds.Loading.World".Translate());

            this.Game.LoadGame();

            LongEventHandler.SetCurrentEventText("FilUnderscore.PersistentRimWorlds.Loading.Game.Finalizing".Translate());

            // At the end.. because Scribe doesn't run due to us not loading Game directly.
            this.Game.FinalizeInit();

            this.LoadCameraDriver();

            SchedulePause();

            GameComponentUtility.LoadedGame();

            this.CheckAndSetColonyData();

            Log.Message("Faction count: " + Current.Game.World.factionManager.AllFactions.Count());

            Current.Game.World.factionManager.AllFactions.Do((faction) =>
            {
                Log.Message("Faction Name: " + faction.Name);
                Log.Message("Faction ID: " + faction.loadID);
                Log.Message("Type: " + faction.def.defName);
                Log.Message("Relations: " + ((List <FactionRelation>)RelationsField.GetValue(faction)).ToDebugString());
            });
        }
示例#2
0
        public static void TickManagerTick(TickManager tm, bool firstRun = true)
        {
            float mult = TimeControlSettings.speedMultiplier;

            if (firstRun)
            {
                partialTick += 1.0 / mult;
            }

            List <Map> maps = Find.Maps;

            for (int i = 0; i < maps.Count; i++)
            {
                maps[i].MapPreTick();
            }
            if (partialTick >= 1.0)
            {
                if (!DebugSettings.fastEcology)
                {
                    TickUtility.ticksGameInt++;
                }
                else
                {
                    TickUtility.ticksGameInt += 2000;
                }
            }
            if (firstRun || TimeControlSettings.dontScale)
            {
                if (!DebugSettings.fastEcology)
                {
                    TickUtility.adjustedTicksGameInt++;
                }
                else
                {
                    TickUtility.adjustedTicksGameInt += 2000;
                }
            }
            Shader.SetGlobalFloat(ShaderPropertyIDs.GameSeconds, tm.TicksGame.TicksToSeconds() * mult);
            TickUtility.tickListNormal.DoTick(partialTick, firstRun);
            TickUtility.tickListRare.DoTick(partialTick, firstRun);
            TickUtility.tickListLong.DoTick(partialTick, firstRun);
            if (partialTick >= 1.0)
            {
                try
                {
                    Find.DateNotifier.DateNotifierTick();
                }
                catch (Exception ex)
                {
                    Log.Error(ex.ToString(), false);
                }
                try
                {
                    Find.Scenario.TickScenario();
                }
                catch (Exception ex2)
                {
                    Log.Error(ex2.ToString(), false);
                }
                try
                {
                    Find.World.WorldTick();
                }
                catch (Exception ex3)
                {
                    Log.Error(ex3.ToString(), false);
                }
                try
                {
                    Find.StoryWatcher.StoryWatcherTick();
                }
                catch (Exception ex4)
                {
                    Log.Error(ex4.ToString(), false);
                }
                try
                {
                    Find.GameEnder.GameEndTick();
                }
                catch (Exception ex5)
                {
                    Log.Error(ex5.ToString(), false);
                }
                try
                {
                    Find.Storyteller.StorytellerTick();
                }
                catch (Exception ex6)
                {
                    Log.Error(ex6.ToString(), false);
                }
                try
                {
                    Find.TaleManager.TaleManagerTick();
                }
                catch (Exception ex7)
                {
                    Log.Error(ex7.ToString(), false);
                }
                try
                {
                    Find.QuestManager.QuestManagerTick();
                }
                catch (Exception ex8)
                {
                    Log.Error(ex8.ToString(), false);
                }
                try
                {
                    Find.World.WorldPostTick();
                }
                catch (Exception ex9)
                {
                    Log.Error(ex9.ToString(), false);
                }
                for (int j = 0; j < maps.Count; j++)
                {
                    maps[j].MapPostTick();
                }
                try
                {
                    Find.History.HistoryTick();
                }
                catch (Exception ex10)
                {
                    Log.Error(ex10.ToString(), false);
                }
                GameComponentUtility.GameComponentTick();
                try
                {
                    Find.LetterStack.LetterStackTick();
                }
                catch (Exception ex11)
                {
                    Log.Error(ex11.ToString(), false);
                }
                try
                {
                    Find.Autosaver.AutosaverTick();
                }
                catch (Exception ex12)
                {
                    Log.Error(ex12.ToString(), false);
                }
                if (DebugViewSettings.logHourlyScreenshot && Find.TickManager.TicksGame >= TickUtility.lastAutoScreenshot + 2500)
                {
                    ScreenshotTaker.QueueSilentScreenshot();
                    TickUtility.lastAutoScreenshot = Find.TickManager.TicksGame / 2500 * 2500;
                }
                try
                {
                    TickUtility.FilthMonitorTick();
                }
                catch (Exception ex13)
                {
                    Log.Error(ex13.ToString(), false);
                }
                partialTick -= 1.0;
            }
            else
            {
                for (int j = 0; j < maps.Count; j++)
                {
                    maps[j].resourceCounter.ResourceCounterTick();
                }
            }
            UnityEngine.Debug.developerConsoleVisible = false;
            if (partialTick >= 1.0)
            {
                TickManagerTick(tm, false);
            }
        }
示例#3
0
        private static void CompletePostWorkLists()
        {
            if (Interlocked.Increment(ref workingOnDateNotifierTick) == 0)
            {
                try
                {
                    Find.DateNotifier.DateNotifierTick();
                }
                catch (Exception ex)
                {
                    Log.Error(ex.ToString());
                }
            }
            if (Interlocked.Increment(ref workingOnHistoryTick) == 0)
            {
                try
                {
                    Find.History.HistoryTick();
                }
                catch (Exception ex10)
                {
                    Log.Error(ex10.ToString());
                }
            }
            if (Interlocked.Increment(ref workingOnMiscellaneous) == 0)
            {
                try
                {
                    Find.Scenario.TickScenario();
                }
                catch (Exception ex2)
                {
                    Log.Error(ex2.ToString());
                }

                try
                {
                    Find.StoryWatcher.StoryWatcherTick();
                }
                catch (Exception ex4)
                {
                    Log.Error(ex4.ToString());
                }

                try
                {
                    Find.GameEnder.GameEndTick();
                }
                catch (Exception ex5)
                {
                    Log.Error(ex5.ToString());
                }

                try
                {
                    Find.Storyteller.StorytellerTick();
                }
                catch (Exception ex6)
                {
                    Log.Error(ex6.ToString());
                }

                try
                {
                    Find.TaleManager.TaleManagerTick();
                }
                catch (Exception ex7)
                {
                    Log.Error(ex7.ToString());
                }

                try
                {
                    Find.QuestManager.QuestManagerTick();
                }
                catch (Exception ex8)
                {
                    Log.Error(ex8.ToString());
                }

                try
                {
                    Find.World.WorldPostTick();
                }
                catch (Exception ex9)
                {
                    Log.Error(ex9.ToString());
                }

                GameComponentUtility.GameComponentTick();
                try
                {
                    Find.LetterStack.LetterStackTick();
                }
                catch (Exception ex11)
                {
                    Log.Error(ex11.ToString());
                }

                try
                {
                    Find.Autosaver.AutosaverTick();
                }
                catch (Exception ex12)
                {
                    Log.Error(ex12.ToString());
                }

                try
                {
                    FilthMonitor2.FilthMonitorTick();
                }
                catch (Exception ex13)
                {
                    Log.Error(ex13.ToString());
                }
            }
        }
示例#4
0
        static bool Prefix(Game __instance)
        {
            if (!PersistentWorldManager.GetInstance().PersistentWorldNotNull())
            {
                return(true);
            }

            var persistentWorld = PersistentWorldManager.GetInstance().PersistentWorld;

            var game = __instance;

            MemoryUtility.UnloadUnusedUnityAssets();

            Current.ProgramState = ProgramState.MapInitializing;
            var mapSize    = new IntVec3(__instance.InitData.mapSize, 1, __instance.InitData.mapSize);
            var settlement = (Settlement)null;

            var settlements = Find.WorldObjects.Settlements;

            foreach (var t in settlements)
            {
                if (t.Faction != Faction.OfPlayer)
                {
                    continue;
                }

                settlement = t;
                break;
            }

            if (settlement == null)
            {
                Log.Error("Could not generate starting map because there is no player faction base.");

                GenScene.GoToMainMenu();

                return(false);
            }

            var map = MapGenerator.GenerateMap(mapSize, settlement, settlement.MapGeneratorDef,
                                               settlement.ExtraGenStepDefs, null);

            game.CurrentMap = map;

            // TODO: Implement permanent death mode for colonies.
            if (__instance.InitData.permadeath)
            {
                __instance.Info.permadeathMode = true;
            }

            PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism);
            __instance.FinalizeInit();

            Find.CameraDriver.JumpToCurrentMapLoc(MapGenerator.PlayerStartSpot);
            Find.CameraDriver.ResetSize();

            persistentWorld.SchedulePause();

            Find.Scenario.PostGameStart();

            /*
             * Complete research needed depending if PlayerFaction is PlayerColony or PlayerTribe.
             */
            if (Faction.OfPlayer.def.startingResearchTags != null)
            {
                foreach (var startingResearchTag in Faction.OfPlayer.def.startingResearchTags)
                {
                    foreach (var allDef in DefDatabase <ResearchProjectDef> .AllDefs)
                    {
                        if (allDef.HasTag(startingResearchTag))
                        {
                            game.researchManager.FinishProject(allDef, false, null);
                        }
                    }
                }
            }

            GameComponentUtility.StartedNewGame();

            persistentWorld.LoadSaver.Status =
                PersistentWorldLoadSaver.PersistentWorldLoadStatus.Ingame;

            var colony = PersistentColony.Convert(persistentWorld, Current.Game);

            colony.ColonyData.UniqueId = ++PersistentWorldManager.GetInstance().PersistentWorld.WorldData.NextColonyId;
            colony.ColonyData.ActiveWorldTiles.Add(map.Tile);

            colony.GameData.MapSize = __instance.InitData.mapSize;

            game.InitData = null;

            persistentWorld.Colony = colony;

            persistentWorld.CheckAndSetColonyData();

            persistentWorld.Colonies.Add(colony);
            persistentWorld.LoadedMaps.Add(map.Tile, new HashSet <PersistentColony>()
            {
                colony
            });

            return(false);
        }
示例#5
0
        public static void GenerateEmptyMap()
        {
            LongEventHandler.QueueLongEvent(delegate()
            {
                var game = new Game
                {
                    InitData = new GameInitData()
                    {
                        mapSize = 75, permadeath = false
                    },
                    Scenario    = ScenarioDefOf.Crashlanded.scenario,
                    storyteller = new Storyteller(StorytellerDefOf.Cassandra, DifficultyDefOf.Rough)
                };
                Find.Scenario.PreConfigure();
                Current.Game = game;

                Find.GameInitData.PrepForMapGen();
                Find.GameInitData.startedFromEntry = true;
                Find.Scenario.PreMapGenerate();

                Find.GameInitData.ResetWorldRelatedMapInitData();
                Current.Game.World = WorldGenerator.GenerateWorld(0.05f, GenText.RandomSeedString(), OverallRainfall.Normal, OverallTemperature.Normal, OverallPopulation.Normal);
                MemoryUtility.UnloadUnusedUnityAssets();
                Find.World.renderer.RegenerateAllLayersNow();

                MemoryUtility.UnloadUnusedUnityAssets();

                Current.ProgramState = ProgramState.MapInitializing;

                var mapSize = new IntVec3(game.InitData.mapSize, 1, game.InitData.mapSize);
                game.World.info.initialMapSize = mapSize;
                if (game.InitData.permadeath)
                {
                    game.Info.permadeathMode           = true;
                    game.Info.permadeathModeUniqueName = PermadeathModeUtility.GeneratePermadeathSaveName();
                }

                game.tickManager.gameStartAbsTick = GenTicks.ConfiguredTicksAbsAtGameStart;

                _ = Find.Scenario.parts.RemoveAll(part => part is ScenPart_GameStartDialog);
                var arrivalMethod    = Find.Scenario.AllParts.OfType <ScenPart_PlayerPawnsArriveMethod>().First();
                arrivalMethod.method = PlayerPawnsArriveMethod.Standing;

                var tile = TileFinder.RandomStartingTile();

                Find.GameInitData.startingAndOptionalPawns.Clear();

                for (var i = 1; i <= 3; i++)
                {
                    var pawn = StartingPawnUtility.NewGeneratedStartingPawn();
                    pawn.playerSettings.hostilityResponse = HostilityResponseMode.Ignore;
                    DefDatabase <SkillDef> .AllDefsListForReading.Do(skillDef => pawn.skills.GetSkill(skillDef).EnsureMinLevelWithMargin(1));
                    Find.GameInitData.startingAndOptionalPawns.Add(pawn);
                }

                var settlement = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);
                settlement.SetFaction(Find.GameInitData.playerFaction);
                settlement.Tile = tile;
                settlement.Name = NameGenerator.GenerateName(Faction.OfPlayer.def.factionNameMaker);
                Find.WorldObjects.Add(settlement);

                Current.Game.CurrentMap = MapGenerator.GenerateMap(mapSize, settlement, settlement.MapGeneratorDef, settlement.ExtraGenStepDefs, null);
                PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism);

                game.FinalizeInit();
                game.playSettings.useWorkPriorities = true;

                Find.CameraDriver.JumpToCurrentMapLoc(MapGenerator.PlayerStartSpot);
                Find.CameraDriver.ResetSize();
                Find.Scenario.PostGameStart();

                foreach (var researchProjectDef in DefDatabase <ResearchProjectDef> .AllDefs)
                {
                    game.researchManager.FinishProject(researchProjectDef, false, null);
                }

                GameComponentUtility.StartedNewGame();
                game.InitData = null;
            }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
            LongEventHandler.QueueLongEvent(delegate()
            {
                ScreenFader.SetColor(Color.black);
                ScreenFader.StartFade(Color.clear, 0.5f);
            }, null, false, null, true);
        }
示例#6
0
        public static void DoSingleTickDetour(TickManager __instance)
        {
            FieldInfo gameTicks = typeof(TickManager).GetField("ticksGameInt", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo nTicks    = typeof(TickManager).GetField("tickListNormal", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo rTicks    = typeof(TickManager).GetField("tickListRare", BindingFlags.NonPublic | BindingFlags.Instance);
            FieldInfo lTicks    = typeof(TickManager).GetField("tickListLong", BindingFlags.NonPublic | BindingFlags.Instance);

            List <Map> maps = Find.Maps;

            Parallel.For(0, maps.Count, i => { maps[i].MapPreTick(); });

            if (!DebugSettings.fastEcology)
            {
                gameTicks.SetValue(__instance, (int)gameTicks.GetValue(__instance) + 1);
            }
            else
            {
                gameTicks.SetValue(__instance, (int)gameTicks.GetValue(__instance) + 250);
            }
            Shader.SetGlobalFloat(ShaderPropertyIDs.GameSeconds, ((int)gameTicks.GetValue(__instance)).TicksToSeconds());

            ((TickList)nTicks.GetValue(__instance)).Tick();
            ((TickList)rTicks.GetValue(__instance)).Tick();
            ((TickList)lTicks.GetValue(__instance)).Tick();

            try
            {
                Find.DateNotifier.DateNotifierTick();
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }
            try
            {
                Find.Scenario.TickScenario();
            }
            catch (Exception ex2)
            {
                Log.Error(ex2.ToString());
            }
            try
            {
                Find.World.WorldTick();
            }
            catch (Exception ex3)
            {
                Log.Error(ex3.ToString());
            }
            try
            {
                Find.StoryWatcher.StoryWatcherTick();
            }
            catch (Exception ex4)
            {
                Log.Error(ex4.ToString());
            }
            try
            {
                Find.GameEnder.GameEndTick();
            }
            catch (Exception ex5)
            {
                Log.Error(ex5.ToString());
            }
            try
            {
                Find.Storyteller.StorytellerTick();
            }
            catch (Exception ex6)
            {
                Log.Error(ex6.ToString());
            }
            try
            {
                Current.Game.taleManager.TaleManagerTick();
            }
            catch (Exception ex7)
            {
                Log.Error(ex7.ToString());
            }
            try
            {
                Find.World.WorldPostTick();
            }
            catch (Exception ex8)
            {
                Log.Error(ex8.ToString());
            }
            for (int j = 0; j < maps.Count; j++)
            {
                maps[j].MapPostTick();
            }
            try
            {
                Find.History.HistoryTick();
            }
            catch (Exception ex9)
            {
                Log.Error(ex9.ToString());
            }
            GameComponentUtility.GameComponentTick();
            try
            {
                Find.LetterStack.LetterStackTick();
            }
            catch (Exception ex10)
            {
                Log.Error(ex10.ToString());
            }
            try
            {
                Find.Autosaver.AutosaverTick();
            }
            catch (Exception ex11)
            {
                Log.Error(ex11.ToString());
            }
            Debug.developerConsoleVisible = false;
        }