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