diff --git a/GameData/DynamicBatteryStorage/DynamicBatteryStorageSettings.cfg b/GameData/DynamicBatteryStorage/DynamicBatteryStorageSettings.cfg index 0cf0465..522361a 100644 --- a/GameData/DynamicBatteryStorage/DynamicBatteryStorageSettings.cfg +++ b/GameData/DynamicBatteryStorage/DynamicBatteryStorageSettings.cfg @@ -946,7 +946,7 @@ DYNAMICBATTERYSTORAGE // Field to poll in editor editorFieldName = CurrentElectricalGeneration // Field to poll in flight - flightFieldName = MaximumElectricalGeneration + flightFieldName = MaxElectricalGeneration // Multiply the output by these if you need to. Convention is that a consumer is negative. editorValueScalar = 1.0 flightValueScalar = 1.0 diff --git a/GameData/DynamicBatteryStorage/Plugins/DynamicBatteryStorage.dll b/GameData/DynamicBatteryStorage/Plugins/DynamicBatteryStorage.dll index 6b81b77..52c5160 100644 Binary files a/GameData/DynamicBatteryStorage/Plugins/DynamicBatteryStorage.dll and b/GameData/DynamicBatteryStorage/Plugins/DynamicBatteryStorage.dll differ diff --git a/GameData/DynamicBatteryStorage/Versioning/DynamicBatteryStorage.version b/GameData/DynamicBatteryStorage/Versioning/DynamicBatteryStorage.version index 51f91b4..085a382 100644 --- a/GameData/DynamicBatteryStorage/Versioning/DynamicBatteryStorage.version +++ b/GameData/DynamicBatteryStorage/Versioning/DynamicBatteryStorage.version @@ -6,7 +6,7 @@ { "MAJOR":2, "MINOR":3, - "PATCH":6, + "PATCH":7, "BUILD":0 }, "KSP_VERSION": diff --git a/Source/DynamicBatteryStorage/UI/SystemsMonitorUI.cs b/Source/DynamicBatteryStorage/UI/SystemsMonitorUI.cs index 4d9a376..bac94f3 100644 --- a/Source/DynamicBatteryStorage/UI/SystemsMonitorUI.cs +++ b/Source/DynamicBatteryStorage/UI/SystemsMonitorUI.cs @@ -243,7 +243,7 @@ protected void OnGUIAppLauncherReady() showWindow = false; Utils.Log("[SystemsMonitorUI]: App Launcher Ready", Utils.LogType.UI); - if (ApplicationLauncher.Ready && stockToolbarButton == null) + if (ApplicationLauncher.Ready && stockToolbarButton == null && Settings.Enabled) { if (HighLogic.LoadedSceneIsFlight || HighLogic.LoadedSceneIsEditor) stockToolbarButton = ApplicationLauncher.Instance.AddModApplication( @@ -293,7 +293,7 @@ public void ResetAppLauncher() Utils.Log("[SystemsMonitorUI]: Reset App Launcher", Utils.LogType.UI); FindData(); - if (stockToolbarButton == null) + if (stockToolbarButton == null && Settings.Enabled) { stockToolbarButton = ApplicationLauncher.Instance.AddModApplication( OnToolbarButtonOn, diff --git a/Source/DynamicBatteryStorage/UI/ToolbarAdvanced.cs b/Source/DynamicBatteryStorage/UI/ToolbarAdvanced.cs index 1c93b17..10daef8 100644 --- a/Source/DynamicBatteryStorage/UI/ToolbarAdvanced.cs +++ b/Source/DynamicBatteryStorage/UI/ToolbarAdvanced.cs @@ -121,17 +121,25 @@ public void Initialize(Transform root, ToolbarPanel parentPanel) constantOnButton.onClick.AddListener(delegate { SetConstantState(true); }); userConsumptionInput.contentType = InputField.ContentType.DecimalNumber; + userConsumptionInput.characterValidation = InputField.CharacterValidation.Decimal; userConsumptionInput.onValueChanged.AddListener(delegate { OnManualGenerationChange(); }); userGenerationInput.contentType = InputField.ContentType.DecimalNumber; + userGenerationInput.characterValidation = InputField.CharacterValidation.Decimal; userGenerationInput.onValueChanged.AddListener(delegate { OnManualGenerationChange(); }); + SectionEnabled = false; advancedObject.SetActive(false); dbsObject.SetActive(false); Localize(); - + SetupTooltips(root, Tooltips.FindTextTooltipPrefab()); } + protected void OnDestroy() + { + + InputLockManager.RemoveControlLock("DBSFocus"); + } protected void Localize() { headerText.text = Localizer.Format("#LOC_DynamicBatteryStorage_AdvancedPanel_AdvancedTitle"); @@ -189,6 +197,22 @@ public void Update(VesselElectricalData data) protected void UpdateAdvanced() { /// what, all event driven? you monster + if (userGenerationInput.isFocused || userConsumptionInput + .isFocused) + { + if (InputLockManager.IsUnlocked(ControlTypes.KEYBOARDINPUT)) + { + InputLockManager.SetControlLock(ControlTypes.KEYBOARDINPUT, "DBSFocus"); + } + + } + else + { + if (InputLockManager.IsLocked(ControlTypes.KEYBOARDINPUT)) + { + InputLockManager.RemoveControlLock("DBSFocus"); + } + } } protected void UpdateDBS() { @@ -269,7 +293,22 @@ public void SetTabState(bool state) } public void OnManualGenerationChange() { - mainPanel.PowerUI.SetManualPowerInputs(float.Parse(userGenerationInput.text), float.Parse(userConsumptionInput.text)); + + + mainPanel.PowerUI.SetManualPowerInputs( + ValidateManualInput(userGenerationInput), + ValidateManualInput(userConsumptionInput)); + } + + protected float ValidateManualInput(InputField handler) + { + string input = handler.text; + + if (!float.TryParse(input, out float result)) + { + result = 0f; + } + return result; } public void SetConstantState(bool state) { diff --git a/Source/DynamicBatteryStorage/UI/ToolbarPower.cs b/Source/DynamicBatteryStorage/UI/ToolbarPower.cs index 2ff83ca..8846420 100644 --- a/Source/DynamicBatteryStorage/UI/ToolbarPower.cs +++ b/Source/DynamicBatteryStorage/UI/ToolbarPower.cs @@ -136,8 +136,14 @@ protected void UpdatePowerFlowAndBatteryFields(VesselElectricalData data) double netPower = data.CurrentConsumption + data.GetSimulatedElectricalProdution() + userGeneration - userConsumption; data.GetElectricalChargeLevels(out double EC, out double maxEC); - - batteryText.text = String.Format("{0:F0} / {1:F0} ({2:F1}%)", EC, maxEC, EC / maxEC * 100d); + if (maxEC > 0) + { + batteryText.text = String.Format("{0:F0} / {1:F0} ({2:F1}%)", EC, maxEC, EC / maxEC * 100d); + } + else + { + batteryText.text = "-"; + } if (EC <= 0.001) { batteryText.color = colorBadText; diff --git a/Source/DynamicBatteryStorage/UI/ToolbarSituation.cs b/Source/DynamicBatteryStorage/UI/ToolbarSituation.cs index 070b638..98d5c79 100644 --- a/Source/DynamicBatteryStorage/UI/ToolbarSituation.cs +++ b/Source/DynamicBatteryStorage/UI/ToolbarSituation.cs @@ -298,7 +298,7 @@ protected double CalculateOcclusionTime(CelestialBody body, double bodyOrbitHeig { if (bodyOrbitHeight == 0d) { - return body.rotationPeriod; + return body.rotationPeriod /2d; } else diff --git a/changelog.txt b/changelog.txt index c46ca3a..c1999ff 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,12 @@ +v2.3.7 +------ +- Fixed a config issue that stopped fission reactors being measured in flight +- Added input locking to the advanced generation/consumption text fields +- Added input validation to the advanced generation/consumption text fields +- Fixed NaN displayed when vessel maximum power is 0 +- Fixed missing divide by two in dark time calculation at the surface of bodies +- SM window will now disable itself when Kerbalism is enabled as well as the rest of the mod + v2.3.6 ------ - Changed how fission reactors are measured in-flight so they don't result in miscalculation of vessel generation (requires latest SH version) diff --git a/readme.txt b/readme.txt index 18df0e6..967f99b 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ ============================== -Dynamic Battery Storage v2.3.6 +Dynamic Battery Storage v2.3.7 ============================== A small utility mod for Kerbal Space Program, intended to support my other projects. Effectively required by Near Future Electrical, CryoEngines, KerballAtomics and CryoTanks.