public PlayerState(ResearchManager manager, IMyPlayer player, Ob_PlayerState info) { Manager = manager; Player = player; AdminMode = info.AdminMode; if (info?.States != null) { foreach (var state in info.States) { var def = Manager.Definitions.ResearchById(state.Id); if (def == null) { continue; } var ps = new PlayerResearchState(this, def); _researchStates.Add(def.Id, ps); } foreach (var state in info.States) { if (_researchStates.ContainsKey(state.Id)) { _researchStates[state.Id].Init(state); } } } }
public void init() { gm = GameManager.gm; rm = gm.getResearchManager(); player = gm.getPlayer(); recipeList = RecipeDatabase.load(); }
public void sendoff() { Hand hand = this.GetComponent <Hand>(); var objects = hand.AttachedObjects; //searches for child with Research Manager script foreach (var child in objects) { var attachedobject = child.attachedObject; ResearchManager sn = attachedobject.GetComponent <ResearchManager>(); if (sn == null) { attachedobject.AddComponent <ResearchManager>(); sn = attachedobject.GetComponent <ResearchManager>(); sn.StepsRequired = new List <ResearchMethods>(); sn.StepsTaken = new List <ResearchMethods>(); } attachedobject.transform.position = new Vector3(attachedobject.transform.position.x, attachedobject.transform.position.y - 20, attachedobject.transform.position.z); Rigidbody rb = attachedobject.GetComponent <Rigidbody>(); if (rb != null) { rb.useGravity = false; } hand.DetachObject(attachedobject, false); attachedobject.transform.parent = null; } }
public void SetBuildableSquadronsList(ResearchManager researchManager) { buildableSquadrons.Clear(); List<CampaignSquadron> squadrons = unitList.GetAllSquadrons(); foreach (CampaignSquadron squadron in squadrons) { CampaignSquadron newSquadron = new CampaignSquadron(); newSquadron.CopyData(squadron); newSquadron.canBuild = true; buildableSquadrons.Add(newSquadron); } foreach (CampaignSquadron squadron in buildableSquadrons) { foreach (Technology tech in researchManager.GetTechnologies()) { if (tech.researched) { tech.ModifiySquadron(squadron); } } } }
public override string GetInspectString() { if (powerTrader == null) { powerTrader = GetComp <CompPowerTrader>(); } if (manager == null) { manager = Find.ResearchManager; } if (manager.currentProj == null) { return("No project selected!"); } string inspect; float storage = this.GetStatValue(StatDef.Named("BOTR_Storage"), false); float remainingWork = manager.currentProj.baseCost - manager.currentProj.ProgressReal; if (storage <= remainingWork && powerTrader.PowerOn) { inspect = "Not enough storage for current project. Add drives or research some of it manually. /n"; inspect = inspect + "Storage: " + storage.ToString(); } else if (powerTrader.PowerOn) { inspect = "Storage: " + storage.ToString() + "\n"; inspect = inspect + "Memory: " + this.GetStatValue(StatDef.Named("BOTR_Memory"), false) + "\n"; inspect = inspect + "Research Progress (Pts/Required): " + Math.Round(points, 2).ToString() + "/" + Math.Round(remainingWork, 2).ToString(); } else { inspect = "No power. Any research progress is now lost."; } return(inspect); }
static void Postfix(ResearchManager __instance, float amount, Pawn researcher) { if (currentResearch != null && currentResearch.IsFinished) { __instance.currentProj = Queue.Next(currentResearch); } }
public static ResearchProjectDef ApplyPointsToExpertise(float points, Pawn pawn) { ResearchManager researchManager = Find.ResearchManager; ResearchProjectDef result; if (!researchManager.AnyProjectIsAvailable) { result = null; } else { IEnumerable <ResearchProjectDef> source = from x in DefDatabase <ResearchProjectDef> .AllDefsListForReading where x.CanStartNow select x; source.TryRandomElementByWeight((ResearchProjectDef x) => 1f / x.baseCost, out result); points *= 12f; //stangely, that number is 121f on the mod source. I'm assuming that's a typo. float total = result.baseCost; CompKnowledge techComp = pawn.TryGetComp <CompKnowledge>(); if (techComp != null) { Dictionary <ResearchProjectDef, float> expertise = techComp.expertise; float num = result.GetProgress(expertise); num += points / total; expertise[result] = (num > 1) ? 1 : num; } } return(result); }
static void ResearchPerformed(ResearchManager __instance, ref float amount, Pawn researcher) { // If pawn has an intellectual inspiration if (researcher.InspirationDef != DefDatabase <InspirationDef> .GetNamed("Frenzy_Research")) { return; } // Throw exception if InspirationDef is missing an instance of its Worker if (!(researcher.InspirationDef.Worker is InspirationWorker_Research)) { throw new Exception("InspirationDef is missing instance of InspirationWorker_Research."); } // Find the instance of the worker InspirationWorker_Research worker = researcher.InspirationDef.Worker as InspirationWorker_Research; // Track the research points consumed worker.UseInspirationResearchPoints(amount); // If the workers research point balance is less than or equal to 0, forcefully end the inspiration if (worker.ResearchPointsLeft <= 0) { researcher.mindState.inspirationHandler.EndInspiration(researcher.InspirationDef); } // Double the research point ouput amount *= 2; }
void Start() { if (ResearchManager.instance != null) { researchManager = ResearchManager.instance; } }
static void Postfix(AdvisorTriggerDiagnosisRoomRequired __instance, Patient patient) { if (!Main.enabled || Main.settings.SendtoHomeTreatmentChance == 0) { return; } try { if (!patient.FullyDiagnosed()) { Level level = patient.Level; ResearchManager researchManager = level.ResearchManager; var roomDef = patient.Illness.GetTreatmentRoom(patient, researchManager); patient.SendToTreatmentRoom(roomDef, true); bool haveRoom = GameAlgorithms.DoesHospitalHaveRoom(patient.Level.WorldState, roomDef._type); var knownedIllness = patient.Level.GameplayStatsTracker.HasIllnessBeenDiagnosedBefore(patient.Illness); var treatmentChance = patient.CalculateAverageTreatmentChance(roomDef); if (knownedIllness && (treatmentChance < Main.settings.SendtoHomeTreatmentChance)) { patient.SendHome(); } } } catch (Exception e) { Main.Logger.Error(e.ToString()); } }
protected ResearchProjectDef ApplyPointsToResearch(float points) { ResearchManager researchManager = Find.ResearchManager; if (!researchManager.AnyProjectIsAvailable) { return(null); } ResearchProjectDef research; IEnumerable <ResearchProjectDef> researchList = (from x in DefDatabase <ResearchProjectDef> .AllDefsListForReading where x.CanStartNow select x); ResearchProjectDef currentResearch = researchManager.currentProj; researchList.TryRandomElementByWeight((ResearchProjectDef x) => 1 / x.baseCost, out research); //points need to multiplied points *= 121f; researchManager.currentProj = research; researchManager.ResearchPerformed(points, null); researchManager.currentProj = currentResearch; return(research); }
public void init() { gm = GameManager.gm; bm = gm.getBoardManager(); cm = gm.getCraftManager(); rm = gm.getResearchManager(); player = gm.getPlayer(); }
public override bool CanBeDeveloped() { ResearchManager manager = player().research; return(base.CanBeDeveloped() && !manager.inProgress.Contains(this) && !manager.finished.Contains(this)); }
public static void ResearchFinishAllSRTS(ResearchManager __instance, ref Dictionary<ResearchProjectDef, float> ___progress) { foreach (ResearchProjectDef researchProjectDef in SRTSHelper.srtsDefProjects.Values) { ___progress[researchProjectDef] = SRTSHelper.GetResearchStat(researchProjectDef); } __instance.ReapplyAllMods(); }
public static bool Prefix(ResearchManager __instance, ResearchProjectDef proj, Pawn applyingPawn) { var expertise = applyingPawn.TryGetComp <CompKnowledge>()?.expertise; if (ModLister.RoyaltyInstalled && !expertise.EnumerableNullOrEmpty()) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("LetterTechprintAppliedPartIntro".Translate(proj.Named("PROJECT"))); stringBuilder.AppendLine(); if (proj.techprintCount > __instance.GetTechprints(proj)) { __instance.AddTechprints(proj, 1); if (proj.techprintCount == __instance.GetTechprints(proj)) { stringBuilder.AppendLine("LetterTechprintAppliedPartJustUnlocked".Translate(proj.Named("PROJECT"))); stringBuilder.AppendLine(); } else { stringBuilder.AppendLine("LetterTechprintAppliedPartNotUnlockedYet".Translate(__instance.GetTechprints(proj), proj.techprintCount.ToString(), proj.Named("PROJECT"))); stringBuilder.AppendLine(); } } //else if (expertise.ContainsKey(proj) && expertise[proj] >= 1f) else if (proj.IsKnownBy(applyingPawn)) { stringBuilder.AppendLine("LetterTechprintAppliedPartAlreadyResearched".Translate(proj.Named("PROJECT"))); stringBuilder.AppendLine(); } else { float num = 0f; if (expertise.ContainsKey(proj)) { num = (1 - expertise[proj]) * 0.5f; expertise[proj] += num; } else { expertise.Add(proj, 0.5f); num = 0.5f; } stringBuilder.AppendLine("LetterTechprintAppliedPartAlreadyUnlocked".Translate(num * 100, proj.Named("PROJECT"))); stringBuilder.AppendLine(); } if (applyingPawn != null) { stringBuilder.AppendLine("LetterTechprintAppliedPartExpAwarded".Translate(2000.ToString(), SkillDefOf.Intellectual.label, applyingPawn.Named("PAWN"))); applyingPawn.skills.Learn(SkillDefOf.Intellectual, 2000f, false); } if (stringBuilder.Length > 0) { Find.LetterStack.ReceiveLetter("LetterTechprintAppliedLabel".Translate(proj.Named("PROJECT")), stringBuilder.ToString().TrimEndNewlines(), LetterDefOf.PositiveEvent, null); } return(false); } return(true); }
private static void GrantMecResearch(ResearchProjectDef def) { ResearchManager manager = Find.ResearchManager; ResearchProjectDef oldDef = manager.currentProj; manager.currentProj = def; manager.InstantFinish(def, false); manager.currentProj = oldDef; }
// must be 'Awake' not 'Start' because this must be called before 'OnEnable', 'OnDisable' private void Awake() { gm = GameManager.gm; rm = gm.getResearchManager(); elementParent = "Scroll/Viewport/ResearchList"; state = "AVAILABLE"; // which pane if currently displayed gameObject.SetActive(false); }
public void Initialize() { if (instance == null) { instance = this; } else { Debug.LogError("You've put another research manager somewhere..."); } }
private void Awake() { m_moneyManager = FindObjectOfType <MoneyManager>(); m_housingManager = FindObjectOfType <HousingManager>(); m_distributionManager = FindObjectOfType <DistributionManager>(); m_researchManager = FindObjectOfType <ResearchManager>(); m_fabricatorManager = FindObjectOfType <FabricatorManager>(); m_saveManager = FindObjectOfType <SaveManager>(); m_saveManager.OnDataLoaded += OnDataLoaded; }
static bool Prefix(DiagnosisTreatmentComponent __instance, Patient patient, Staff ____doctor, Room ____room) { if (!Main.enabled) { return(true); } Level level = patient.Level; ResearchManager researchManager = level.ResearchManager; if (____doctor.ModifiersComponent != null) { ____doctor.ModifiersComponent.ApplyInteractWithOtherModifiers(patient); } float certainty = GameAlgorithms.GetDiagnosisCertainty(patient, ____room, ____doctor, researchManager).Certainty; patient.ReceiveDiagnosis(____room, ____doctor, certainty); ____room.OnUnitProcessed(); if (____room.Definition._type == RoomDefinition.Type.GPOffice) { if (patient.FullyDiagnosed()) { var roomDef = patient.Illness.GetTreatmentRoom(patient, researchManager); patient.SendToTreatmentRoom(roomDef, true); bool haveRoom = GameAlgorithms.DoesHospitalHaveRoom(patient.Level.WorldState, roomDef._type); var knownedIllness = patient.Level.GameplayStatsTracker.HasIllnessBeenDiagnosedBefore(patient.Illness); var treatmentChance = CalculateAverageTreatmentChance(patient, roomDef); if (knownedIllness && (haveRoom && treatmentChance < Main.settings.SendtoHomeTreatmentChance || !haveRoom && Main.settings.SendtoHomeIfRoomNotExists)) { SendHome(patient); //Main.Logger.Log($"send to home {patient.Name} room {roomDef._type} diagnosis {patient.DiagnosisCertainty} treatment {treatmentChance}"); } } else { patient.SendToDiagnosisRoom(Traverse.Create(__instance).Method("GetDiagnosisRoom", new Type[] { typeof(Patient), typeof(Staff) }).GetValue <Room>(patient, ____doctor)); } } else { Room bestRoomOfType = GameAlgorithms.GetBestRoomOfType(level.WorldState, RoomDefinition.Type.GPOffice, patient); if (bestRoomOfType != null) { patient.GotoRoom(bestRoomOfType, ReasonUseRoom.Diagnosis, false, -1); } else { patient.WaitForRoomToBeBuilt(RoomDefinition.Type.GPOffice, ReasonUseRoom.Diagnosis, GameAlgorithms.Config.PatientWaitLongTime); } } return(false); }
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); } } }
private void Awake() { gm = GameManager.gm; player = gm.getPlayer(); cm = gm.getCraftManager(); bm = gm.getBoardManager(); rm = gm.getResearchManager(); makeCraftList(); gameObject.SetActive(false); }
static bool Prefix(ResearchManager __instance, ResearchProject project, Level ___level) { if (!Main.enabled || !Main.settings.ToggleRepeatResearch || !project.Definition.Repeatable) { return(true); } RewardUtils.GiveAllRewards(null, project.Definition.Rewards, ___level.Metagame, null); ___level.Notifications.Send(new NotificationResearchComplete(___level.Notifications.MessageDefinitions._researchCompleteMessage, project.Definition, ___level)); __instance.OnResearchProjectComplete.InvokeSafe(project); ___level.ObjectiveEvents.OnGameEvent.InvokeSafe(ObjectiveGameEvent.ResearchProjectCompleted); return(false); }
private void Awake() { m_distributionManager = FindObjectOfType <DistributionManager>(); m_moneyManager = FindObjectOfType <MoneyManager>(); m_housingManager = FindObjectOfType <HousingManager>(); m_fabricatorManager = FindObjectOfType <FabricatorManager>(); m_researchManager = FindObjectOfType <ResearchManager>(); m_mainFilePath = Path.Combine(Application.persistentDataPath, FILE_NAME); m_vehiclesSavePath = Path.Combine(Application.persistentDataPath, VEHICLES_FILE_NAME); m_housesSavePath = Path.Combine(Application.persistentDataPath, HOUSES_FILE_NAME); m_researchSavePath = Path.Combine(Application.persistentDataPath, RESEARCH_FILE_NAME); }
public virtual void Start() { if (TurnManager.instance != null) { turnManager = TurnManager.instance; } if (ResearchManager.instance != null) { researchManager = ResearchManager.instance; } turnManager.EndTurnEvent.AddListener(DoEffect); cityBase = GetComponent<CityBase>(); }
public Research modifyToDefaultResearch(Research research, ResearchManager manager, string name, string descr, List <Research> dependencies, int cost, Effect effect) { research.active = true; research.alreadyResearchedAmount = 0; research.dependencies = dependencies; research.isFinished = false; research.researchCost = cost; research.effect = effect; research.resname = name; research.description = descr; research.manager = manager; return(research); }
void Awake() { if (instance == null) { instance = this; } else if (instance != this) { Destroy(gameObject); } progressResearchTier = new ProgressResearchTier(); progressResearchTier.AddListener(AddTier); //StartCoroutine (LoadScene ()); }
// Use this for initialization void Start() { GameWorldManager = FindObjectOfType <WorldManager>(); GameMapManager = FindObjectOfType <MapManager>(); GamePlayerCountryManager = GameMapManager.GamePlayerCountryManager; GameBattleManager = FindObjectOfType <BattleManager>(); GameCharacterManager = FindObjectOfType <CharacterManager>(); GameDeckManager = FindObjectOfType <DeckManager>(); GameIntelManager = FindObjectOfType <IntelManager>(); GameMilitaryManager = FindObjectOfType <MilitaryManager>(); GameResearchManager = FindObjectOfType <ResearchManager>(); GameTradeManager = FindObjectOfType <TradeManager>(); GameUnitManager = FindObjectOfType <UnitManager>(); //DontDestroyOnLoad(transform.gameObject); }
public PlayerInfo(Owners playerOwner, string playerRace, string flagName, string CivName, string HomeworldName, string leaderName) { this.playerOwner = playerOwner; this.playerRace = (Races)System.Enum.Parse(typeof(Races), playerRace); this.flagName = flagName; this.CivName = CivName; this.HomeworldName = HomeworldName; this.leaderName = leaderName; ownedStars = new Dictionary <uint, Star>(); researchManager = new ResearchManager(); ButtonManager.NextTurn += Turn; ButtonManager.NextTurnResearch += DoResearch; }
public static ResearchDefinition TryFindResearch(this ResearchManager manager, string key, out string msg) { var research = manager.Definitions.ResearchById(key); if (research == null) { StringBuilder msgResult = null; foreach (var res in manager.Definitions.Research) { if (!res.Id.StartsWith(key, StringComparison.OrdinalIgnoreCase) && !res.DisplayName.StartsWith(key, StringComparison.OrdinalIgnoreCase)) { continue; } if (research == null && msgResult == null) { research = res; continue; } if (msgResult == null) { msgResult = new StringBuilder("Could not find single research: "); } if (research != null) { msgResult.Append(research.Id); } research = null; msgResult.Append(", ").Append(res.Id); } if (msgResult != null) { msg = msgResult.ToString(); return(null); } } if (research == null) { msg = $"Could not find research: {key}"; return(null); } msg = null; return(research); }
//private void Awake() { // gm = GameManager.gm; // cm = gm.getCraftManager(); // player = gm.getPlayer(); //} // initialize name, ingredients, icon public void init(Recipe recipe) { panel = GetComponentInParent <CraftPanel>(); gm = GameManager.gm; cm = gm.getCraftManager(); rm = gm.getResearchManager(); player = gm.getPlayer(); this.recipe = recipe; name.text = this.recipe.getProduct().item.getName() + " x " + this.recipe.getProduct().count.ToString(); ingredients.text = generateIngredientsText(this.recipe.getIngredients()); requirements.text = generateRequirementsText(this.recipe); icon.sprite = recipe.getProduct().item.getIcon(); }