public static void FinishCustomPrerequisites(ResearchProjectDef project, ResearchManager instance) { List <ResearchProjectDef> projects = SRTSMod.mod.settings.defProperties[srtsDefProjects.FirstOrDefault(x => x.Value == project).Key.defName].CustomResearch; foreach (ResearchProjectDef proj in projects) { if (!proj.IsFinished) { instance.FinishProject(proj, false, null); } } }
public override void Tick() { ticksLeft--; if (ticksLeft <= 0) { if (manager == null) { manager = Find.ResearchManager; } float storage = this.GetStatValue(StatDef.Named("BOTR_Storage"), false); if (manager.currentProj != null) { float remainingWork = manager.currentProj.baseCost - manager.currentProj.ProgressReal; if (manager != null && storage >= remainingWork) { if (powerTrader == null) { powerTrader = GetComp <CompPowerTrader>(); } if (powerTrader.PowerOn) { if (points >= manager.currentProj.baseCost - manager.currentProj.ProgressReal) { manager.FinishProject(manager.currentProj, true); points -= manager.currentProj.baseCost - manager.currentProj.ProgressReal; } else { ticksLeft = ticksBetweenPoint; points += this.GetStatValue(StatDef.Named("BOTR_Memory"), false); } } else { points = 0; } } } } base.Tick(); }
public void InitNewGame() { string str = (from mod in LoadedModManager.RunningMods select mod.ToString()).ToCommaList(); Log.Message("Initializing new game with mods " + str); if (maps.Any()) { Log.Error("Called InitNewGame() but there already is a map. There should be 0 maps..."); } else if (initData == null) { Log.Error("Called InitNewGame() but init data is null. Create it first."); } else { MemoryUtility.UnloadUnusedUnityAssets(); DeepProfiler.Start("InitNewGame"); try { Current.ProgramState = ProgramState.MapInitializing; IntVec3 intVec = new IntVec3(initData.mapSize, 1, initData.mapSize); Settlement settlement = null; List <Settlement> settlements = Find.WorldObjects.Settlements; for (int i = 0; i < settlements.Count; i++) { if (settlements[i].Faction == Faction.OfPlayer) { settlement = settlements[i]; break; } } if (settlement == null) { Log.Error("Could not generate starting map because there is no any player faction base."); } tickManager.gameStartAbsTick = GenTicks.ConfiguredTicksAbsAtGameStart; Map currentMap = MapGenerator.GenerateMap(intVec, settlement, settlement.MapGeneratorDef, settlement.ExtraGenStepDefs); worldInt.info.initialMapSize = intVec; if (initData.permadeath) { info.permadeathMode = true; info.permadeathModeUniqueName = PermadeathModeUtility.GeneratePermadeathSaveName(); } PawnUtility.GiveAllStartingPlayerPawnsThought(ThoughtDefOf.NewColonyOptimism); FinalizeInit(); Current.Game.CurrentMap = currentMap; Find.CameraDriver.JumpToCurrentMapLoc(MapGenerator.PlayerStartSpot); Find.CameraDriver.ResetSize(); if (Prefs.PauseOnLoad && initData.startedFromEntry) { LongEventHandler.ExecuteWhenFinished(delegate { tickManager.DoSingleTick(); tickManager.CurTimeSpeed = TimeSpeed.Paused; }); } Find.Scenario.PostGameStart(); if (Faction.OfPlayer.def.startingResearchTags != null) { foreach (ResearchProjectTagDef startingResearchTag in Faction.OfPlayer.def.startingResearchTags) { foreach (ResearchProjectDef allDef in DefDatabase <ResearchProjectDef> .AllDefs) { if (allDef.HasTag(startingResearchTag)) { researchManager.FinishProject(allDef); } } } } GameComponentUtility.StartedNewGame(); initData = null; } finally { DeepProfiler.End(); } } }