VOID_VesselInfo: Breaking out resource mass into two lines.
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -39,7 +39,7 @@
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("0.12.0.*")]
+[assembly: AssemblyVersion("0.13.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
//[assembly: AssemblyDelaySign(false)]
--- a/VOID.csproj
+++ b/VOID.csproj
@@ -96,6 +96,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VOID_HUDAdvanced.cs" />
<Compile Include="VOID_TWR.cs" />
+ <Compile Include="VOID_CareerStatus.cs" />
</ItemGroup>
<ProjectExtensions>
<MonoDevelop>
--- /dev/null
+++ b/VOID_CareerStatus.cs
@@ -1,1 +1,335 @@
-
+// VOID
+//
+// VOID_CareerStatus.cs
+//
+// Copyright © 2014, toadicus
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used
+// to endorse or promote products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using KSP;
+using System;
+using System.Text;
+using ToadicusTools;
+using UnityEngine;
+
+namespace VOID
+{
+ public class VOID_CareerStatus : VOID_WindowModule
+ {
+ public static VOID_CareerStatus Instance
+ {
+ get;
+ private set;
+ }
+
+ public static string formatDelta(double delta)
+ {
+ if (delta > 0)
+ {
+ return string.Format(string.Intern("<color='green'>{0:#,#.##}↑</color>"), delta);
+ }
+ else if (delta < 0)
+ {
+ return string.Format(string.Intern("<color='red'>{0:#,#.##}↓</color>"), delta);
+ }
+ else
+ {
+ return string.Intern("0");
+ }
+ }
+
+ public static string formatDelta(float delta)
+ {
+ return formatDelta((double)delta);
+ }
+
+ private int fontSize;
+ private Texture2D origFundsGreen;
+ private Texture2D origFundsRed;
+ private Texture2D origRepGreen;
+ private Texture2D origRepRed;
+ private Texture2D origScience;
+
+ public Texture2D fundsIconGreen
+ {
+ get;
+ private set;
+ }
+
+ public Texture2D fundsIconRed
+ {
+ get;
+ private set;
+ }
+
+ public Texture2D reputationIconGreen
+ {
+ get;
+ private set;
+ }
+
+ public Texture2D reputationIconRed
+ {
+ get;
+ private set;
+ }
+
+ public Texture2D scienceIcon
+ {
+ get;
+ private set;
+ }
+
+ public double lastFundsChange
+ {
+ get;
+ private set;
+ }
+
+ public float lastRepChange
+ {
+ get;
+ private set;
+ }
+
+ public float lastScienceChange
+ {
+ get;
+ private set;
+ }
+
+ public double currentFunds
+ {
+ get
+ {
+ if (Funding.Instance != null)
+ {
+ return Funding.Instance.Funds;
+ }
+ else
+ {
+ return double.NaN;
+ }
+ }
+ }
+
+ public float currentReputation
+ {
+ get
+ {
+ if (Reputation.Instance != null)
+ {
+ return Reputation.Instance.reputation;
+ }
+ else
+ {
+ return float.NaN;
+ }
+ }
+ }
+
+ public float currentScience
+ {
+ get
+ {
+ if (ResearchAndDevelopment.Instance != null)
+ {
+ return ResearchAndDevelopment.Instance.Science;
+ }
+ else
+ {
+ return float.NaN;
+ }
+ }
+ }
+
+ public override void ModuleWindow(int _)
+ {
+
+ /*if (this.fontSize != this.core.Skin.label.fontSize)
+ {
+ this.fontSize = this.core.Skin.label.fontSize;
+
+ this.fundsIconGreen = this.origFundsGreen.Clone().ResizeByHeight(this.fontSize);
+ this.fundsIconRed = this.origFundsRed.Clone().ResizeByHeight(this.fontSize);
+ this.reputationIconGreen = this.origRepGreen.Clone().ResizeByHeight(this.fontSize);
+ this.reputationIconRed = this.origRepRed.Clone().ResizeByHeight(this.fontSize);
+ this.scienceIcon = this.origScience.Clone().ResizeByHeight(this.fontSize);
+
+ GC.Collect();
+ }*/
+
+ GUILayout.BeginVertical();
+
+ // VOID_Data.fundingStatus.DoGUIHorizontal();
+
+ GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
+
+ GUILayout.Label(VOID_Data.fundingStatus.Label);
+ GUILayout.FlexibleSpace();
+ // GUILayout.Label(this.fundsIconGreen);
+ GUILayout.Label(VOID_Data.fundingStatus.Value, GUILayout.ExpandWidth(false));
+
+ GUILayout.EndHorizontal();
+
+ VOID_Data.reputationStatus.DoGUIHorizontal();
+
+ VOID_Data.scienceStatus.DoGUIHorizontal();
+
+ GUILayout.EndVertical();
+
+ GUI.DragWindow();
+ }
+
+ private void onFundsChange(double delta)
+ {
+ this.lastFundsChange = delta;
+ }
+
+ private void onRepChange(float delta)
+ {
+ this.lastRepChange = delta;
+ }
+
+ private void onScienceChange(float delta)
+ {
+ this.lastScienceChange = delta;
+ }
+
+ /*
+ * MissionRecoveryDialog::fundsIconGreen.name: UiElements_05
+ * MissionRecoveryDialog::fundsIconRed.name: UiElements_06
+ * MissionRecoveryDialog::reputationIconGreen.name: UiElements_07
+ * MissionRecoveryDialog::reputationIconRed.name: UiElements_08
+ * MissionRecoveryDialog::scienceIcon.name: UiElements_12
+ * */
+ public VOID_CareerStatus() : base()
+ {
+ VOID_CareerStatus.Instance = this;
+
+ this._Name = "Career Status";
+ this.fontSize = int.MinValue;
+
+ GameEvents.OnFundsChanged.Add(this.onFundsChange);
+ GameEvents.OnReputationChanged.Add(this.onRepChange);
+ GameEvents.OnScienceChanged.Add(this.onScienceChange);
+
+ foreach (Texture2D tex in Resources.FindObjectsOfTypeAll<Texture2D>())
+ {
+ if (
+ this.origFundsGreen != null &&
+ this.origFundsRed != null &&
+ this.origRepGreen != null &&
+ this.origRepRed != null &&
+ this.origScience != null
+ )
+ {
+ break;
+ }
+
+ switch (tex.name)
+ {
+ case "UiElements_05":
+ this.fundsIconGreen = this.origFundsGreen = tex;
+ break;
+ case "UiElements_06":
+ this.fundsIconRed = this.origFundsRed = tex;
+ break;
+ case "UiElements_07":
+ this.reputationIconGreen = this.origRepGreen = tex;
+ break;
+ case "UiElements_08":
+ this.reputationIconRed = this.origRepRed = tex;
+ break;
+ case "UiElements_12":
+ this.scienceIcon = this.origScience = tex;
+ break;
+ default:
+ continue;
+ }
+ }
+ }
+
+ ~VOID_CareerStatus()
+ {
+ GameEvents.OnFundsChanged.Remove(this.onFundsChange);
+ GameEvents.OnReputationChanged.Remove(this.onRepChange);
+ GameEvents.OnScienceChanged.Remove(this.onScienceChange);
+
+ VOID_CareerStatus.Instance = null;
+ }
+ }
+
+ public static partial class VOID_Data
+ {
+ public static readonly VOID_StrValue fundingStatus = new VOID_StrValue(
+ string.Intern("Funds"),
+ delegate()
+ {
+ if (VOID_CareerStatus.Instance == null)
+ {
+ return string.Empty;
+ }
+
+ return string.Format("√{0} ({1})",
+ VOID_CareerStatus.Instance.currentFunds,
+ VOID_CareerStatus.formatDelta(VOID_CareerStatus.Instance.lastFundsChange)
+ );
+ }
+ );
+
+ public static readonly VOID_StrValue reputationStatus = new VOID_StrValue(
+ string.Intern("Reputation"),
+ delegate()
+ {
+ if (VOID_CareerStatus.Instance == null)
+ {
+ return string.Empty;
+ }
+
+ return string.Format("{0} ({1})",
+ VOID_CareerStatus.Instance.currentReputation,
+ VOID_CareerStatus.formatDelta(VOID_CareerStatus.Instance.lastRepChange)
+ );
+ }
+ );
+
+ public static readonly VOID_StrValue scienceStatus = new VOID_StrValue(
+ string.Intern("Science"),
+ delegate()
+ {
+ if (VOID_CareerStatus.Instance == null)
+ {
+ return string.Empty;
+ }
+
+ return string.Format("{0} ({1})",
+ VOID_CareerStatus.Instance.currentScience,
+ VOID_CareerStatus.formatDelta(VOID_CareerStatus.Instance.lastScienceChange)
+ );
+ }
+ );
+ }
+}
+
+
--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -175,6 +175,8 @@
protected VOID_SaveValue<bool> _UseToolbarManager;
internal IButton ToolbarButton;
+ internal ApplicationLauncherButton AppLauncherButton;
+
/*
* Properties
* */
@@ -333,6 +335,12 @@
}
if (value == true)
{
+ if (this.AppLauncherButton != null)
+ {
+ ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton);
+ this.AppLauncherButton = null;
+ }
+
this.InitializeToolbarButton();
}
@@ -366,9 +374,9 @@
if (!this.UseToolbarManager)
{
- if (GUI.Button(VOIDIconPos, VOIDIconTexture, this.iconStyle) && this.VOIDIconLocked)
- {
- this.ToggleMainWindow();
+ if (this.AppLauncherButton == null)
+ {
+ this.InitializeAppLauncherButton();
}
}
else if (this.ToolbarButton == null)
@@ -483,6 +491,7 @@
double radius = this.vessel.Radius();
SimManager.Gravity = this.vessel.mainBody.gravParameter /
(radius * radius);
+ SimManager.minSimTime = (long)(this.updatePeriod * 1000);
SimManager.TryStartSimulation();
}
else if (!this.vesselSimActive)
@@ -900,6 +909,27 @@
};
Tools.PostDebugMessage(string.Format("{0}: Toolbar Button initialized.", this.GetType().Name));
+ }
+
+ protected void InitializeAppLauncherButton()
+ {
+ if (ApplicationLauncher.Ready)
+ {
+ this.AppLauncherButton = ApplicationLauncher.Instance.AddModApplication(
+ this.ToggleMainWindow, this.ToggleMainWindow,
+ HighLogic.LoadedScene.ToAppScenes(),
+ this.VOIDIconTexture
+ );
+
+ Tools.PostDebugMessage(
+ this,
+ "AppLauncherButton initialized in {0}",
+ Enum.GetName(
+ typeof(GameScenes),
+ HighLogic.LoadedScene
+ )
+ );
+ }
}
protected void ToggleMainWindow()
@@ -936,7 +966,12 @@
this.ToolbarButton.TexturePath = texturePath;
}
- this.VOIDIconTexture = GameDatabase.Instance.GetTexture(texturePath, false);
+ this.VOIDIconTexture = GameDatabase.Instance.GetTexture(texturePath.Replace("icon", "appIcon"), false);
+
+ if (this.AppLauncherButton != null)
+ {
+ this.AppLauncherButton.SetTexture(VOIDIconTexture);
+ }
}
protected void CheckAndSave()
@@ -988,6 +1023,27 @@
this.configDirty = false;
}
+ public void onSceneChangeRequested(GameScenes scene)
+ {
+ if (this.AppLauncherButton != null)
+ {
+ if (this is VOID_EditorCore)
+ {
+ if (!HighLogic.LoadedSceneIsEditor)
+ {
+ ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton);
+ }
+ }
+ else
+ {
+ if (!HighLogic.LoadedSceneIsFlight)
+ {
+ ApplicationLauncher.Instance.RemoveModApplication(this.AppLauncherButton);
+ }
+ }
+ }
+ }
+
protected VOID_Core()
{
this._Name = "VOID Core";
--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -231,7 +231,9 @@
this.core.windowID,
_Pos,
VOID_Tools.GetWindowHandler(this.ModuleWindow),
- this.Name
+ this.Name,
+ GUILayout.Width(this.defWidth),
+ GUILayout.Height(this.defHeight)
);
_Pos = Tools.ClampRectToScreen (_Pos);
--- a/VOID_Tools.cs
+++ b/VOID_Tools.cs
@@ -334,7 +334,11 @@
{
func(id);
}
+ #if DEBUG
catch (ArgumentException ex)
+ #else
+ catch (ArgumentException)
+ #endif
{
Debug.LogWarning(
string.Format("[{0}]: ArgumentException caught during window call.", func.Target.GetType().Name)
--- a/VOID_VesselInfo.cs
+++ b/VOID_VesselInfo.cs
@@ -66,7 +66,9 @@
VOID_Data.totalMass.DoGUIHorizontal ("F3");
- VOID_Data.comboResourceMass.DoGUIHorizontal ();
+ VOID_Data.stageResourceMass.DoGUIHorizontal("F2");
+
+ VOID_Data.resourceMass.DoGUIHorizontal("F2");
VOID_Data.stageDeltaV.DoGUIHorizontal (3, false);
@@ -131,7 +133,7 @@
);
public static readonly VOID_DoubleValue stageResourceMass = new VOID_DoubleValue(
- "Resource Mass (Current Stage)",
+ "Resource Mass (Stage)",
delegate()
{
if (SimManager.LastStage == null)