示例#1
0
 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);
             }
         }
     }
 }
示例#2
0
 public void init()
 {
     gm         = GameManager.gm;
     rm         = gm.getResearchManager();
     player     = gm.getPlayer();
     recipeList = RecipeDatabase.load();
 }
示例#3
0
    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;
        }
    }
示例#4
0
    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);
                }
            }
        }
    }
示例#5
0
        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);
        }
示例#6
0
 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;
        }
示例#9
0
 void Start()
 {
     if (ResearchManager.instance != null)
     {
         researchManager = ResearchManager.instance;
     }
 }
示例#10
0
        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());
            }
        }
示例#11
0
        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);
        }
示例#12
0
 public void init()
 {
     gm     = GameManager.gm;
     bm     = gm.getBoardManager();
     cm     = gm.getCraftManager();
     rm     = gm.getResearchManager();
     player = gm.getPlayer();
 }
示例#13
0
    public override bool CanBeDeveloped()
    {
        ResearchManager manager = player().research;

        return(base.CanBeDeveloped() &&
               !manager.inProgress.Contains(this) &&
               !manager.finished.Contains(this));
    }
示例#14
0
 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();
 }
示例#15
0
        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);
        }
示例#16
0
        private static void GrantMecResearch(ResearchProjectDef def)
        {
            ResearchManager    manager = Find.ResearchManager;
            ResearchProjectDef oldDef  = manager.currentProj;

            manager.currentProj = def;
            manager.InstantFinish(def, false);
            manager.currentProj = oldDef;
        }
示例#17
0
    // 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);
    }
示例#18
0
 public void Initialize()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Debug.LogError("You've put another research manager somewhere...");
     }
 }
示例#19
0
    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;
    }
示例#20
0
        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);
        }
示例#21
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);
                }
            }
        }
示例#22
0
    private void Awake()
    {
        gm     = GameManager.gm;
        player = gm.getPlayer();
        cm     = gm.getCraftManager();
        bm     = gm.getBoardManager();
        rm     = gm.getResearchManager();

        makeCraftList();

        gameObject.SetActive(false);
    }
示例#23
0
 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);
 }
示例#24
0
    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);
    }
示例#25
0
	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>();
	}
示例#26
0
 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);
 }
示例#27
0
    void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }
        progressResearchTier = new ProgressResearchTier();
        progressResearchTier.AddListener(AddTier);

        //StartCoroutine (LoadScene ());
    }
示例#28
0
 // 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;
    }
示例#30
0
        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);
        }
示例#31
0
    //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();
    }