private void updateRemainingData() { List <ScienceData> dataList = new List <ScienceData>(); if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ready) { foreach (IScienceDataContainer container in FlightGlobals.ActiveVessel.FindPartModulesImplementing <IScienceDataContainer>()) { dataList.AddRange(container.GetData()); } if (dataList.Count > 0) { foreach (ScienceData data in dataList) { DMScienceData DMData = getDMScience(data.title, true); if (DMData != null) { ScienceSubject sub = ResearchAndDevelopment.GetSubjectByID(data.subjectID); if (sub != null) { sub.scientificValue *= DMData.SciVal; sub.science = Math.Max(0f, Math.Min(sub.scienceCap, sub.scienceCap - (sub.scienceCap * sub.scientificValue))); } } } } } }
private void RecoveryWatcher(float sci, ScienceSubject sub, ProtoVessel pv, bool reverse) { if (HighLogic.LoadedScene == GameScenes.SPACECENTER || HighLogic.LoadedScene == GameScenes.TRACKSTATION) { float DMScience = sci; DMUtils.DebugLog("Science Data Recovered For {0} Science", sci); DMScienceData DMData = DMScienceScenario.SciScenario.getDMScience(sub.title); if (DMData != null) { float oldSciVal = 0f; if (sub.scienceCap != 0) { oldSciVal = Math.Max(0f, 1f - ((sub.science - sci) / sub.scienceCap)); } DMScience = sub.subjectValue * DMData.BaseValue * DMData.SciVal * oldSciVal; DMScienceScenario.SciScenario.submitDMScience(DMData, DMScience); } if (DMScience != sci) { float extraScience = sci - DMScience; Debug.LogWarning(string.Format("[DMagic Orbital Science] [Asteroid Science Retrieval] Remove {0} Science From R&D Center After Asteroid Calculations", extraScience)); DMUtils.DebugLog("Remove {0} Science From R&D Center: From {1} To {2}", extraScience, ResearchAndDevelopment.Instance.Science, ResearchAndDevelopment.Instance.Science - extraScience); ResearchAndDevelopment.Instance.AddScience(-1f * extraScience, TransactionReasons.ScienceTransmission); } } }
private void RemoveDMScience(DMScienceData DMdata) { if (recoveredDMScience.ContainsKey(DMdata.Title)) { recoveredDMScience.Remove(DMdata.Title); } }
private void UpdateDMScience(DMScienceData DMData) { if (recoveredDMScience.ContainsKey(DMData.Title)) { DMScienceData DMSci = recoveredDMScience[DMData.Title]; DMSci.Science = DMData.Science; DMSci.SciVal = DMData.SciVal; } }
internal void submitDMScience(DMScienceData DMData, float science) { DMData.Science = Math.Min(DMData.Science + science, DMData.Cap); DMData.SciVal = ScienceValue(DMData.Science, DMData.Cap); UpdateDMScience(DMData); if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ready) { updateRemainingData(); } }
private void addDMScience(DMScienceData data) { if (!recoveredDMScience.ContainsKey(data.Title)) { recoveredDMScience.Add(data.Title, data); } else { UpdateDMScience(data); } }
private void scienceReceived(float sci, ScienceSubject sub, ProtoVessel pv, bool reverse) { if (HighLogic.LoadedSceneIsFlight) { DMScienceData DMData = DMScienceScenario.SciScenario.getDMScience(sub.title); if (DMData != null) { DMScienceScenario.SciScenario.submitDMScience(DMData, sci); } } }
private void scienceReceived(float sci, ScienceSubject sub, ProtoVessel pv, bool reverse) { if (sub == null) { return; } if (DMScienceScenario.SciScenario == null) { return; } sci /= HighLogic.CurrentGame.Parameters.Career.ScienceGainMultiplier; if (HighLogic.LoadedSceneIsFlight) { DMScienceData DMData = DMScienceScenario.SciScenario.getDMScience(sub.title); if (DMData != null) { DMScienceScenario.SciScenario.submitDMScience(DMData, sci); } } }
internal void RecordNewScience(string title, float baseval, float scv, float sci, float cap) { DMScienceData DMData = new DMScienceData(title, baseval, scv, sci, cap); addDMScience(DMData); }
private void RemoveDMScience(DMScienceData DMdata) { if (recoveredDMScience.ContainsKey(DMdata.Title)) recoveredDMScience.Remove(DMdata.Title); }
private void addDMScience(DMScienceData data) { if (!recoveredDMScience.ContainsKey(data.Title)) recoveredDMScience.Add(data.Title, data); else UpdateDMScience(data); }
internal void submitDMScience(DMScienceData DMData, float science) { DMData.Science = Math.Min(DMData.Science + science, DMData.Cap); DMData.SciVal = ScienceValue(DMData.Science, DMData.Cap); UpdateDMScience(DMData); if (HighLogic.LoadedSceneIsFlight && FlightGlobals.ready) updateRemainingData(); }