--- a/VOID_HUD.cs +++ b/VOID_HUD.cs @@ -1,30 +1,38 @@ -// -// VOID_Hud.cs -// -// Author: -// toadicus <> -// -// Copyright (c) 2013 toadicus -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// - +// VOID +// +// VOID_HUD.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 KerbalEngineer.VesselSimulator; using KSP; -using UnityEngine; using System; using System.Collections.Generic; using System.Text; +using ToadicusTools; +using UnityEngine; namespace VOID { @@ -77,7 +85,7 @@ { this._Name = "Heads-Up Display"; - this._Active.value = true; + this.toggleActive = true; this._colorIndex = 0; @@ -110,9 +118,9 @@ leftHUD = new StringBuilder(); - VOID_Core.Instance.LabelStyles["hud"].alignment = TextAnchor.UpperRight; - - if (VOID_Core.Instance.powerAvailable) + VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; + + if (this.core.powerAvailable) { leftHUD.AppendFormat("Primary: {0} Inc: {1}", VOID_Data.primaryName.ValueUnitString(), @@ -137,11 +145,11 @@ } else { - VOID_Core.Instance.LabelStyles["hud"].normal.textColor = Color.red; + VOID_Styles.labelHud.normal.textColor = Color.red; leftHUD.Append(string.Intern("-- POWER LOST --")); } - GUILayout.Label(leftHUD.ToString(), VOID_Core.Instance.LabelStyles["hud"], GUILayout.ExpandWidth(true)); + GUILayout.Label(leftHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); if (!this.positionsLocked) { @@ -157,9 +165,9 @@ rightHUD = new StringBuilder(); - VOID_Core.Instance.LabelStyles["hud"].alignment = TextAnchor.UpperLeft; - - if (VOID_Core.Instance.powerAvailable) + VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; + + if (this.core.powerAvailable) { rightHUD.AppendFormat("Biome: {0} Sit: {1}", VOID_Data.currBiome.ValueUnitString(), @@ -181,15 +189,28 @@ VOID_Data.vesselHeading.ValueUnitString(), VOID_Data.vesselPitch.ToSIString(2) ); + + if ( + this.core.vessel.mainBody == this.core.HomeBody && + ( + this.core.vessel.situation == Vessel.Situations.FLYING || + this.core.vessel.situation == Vessel.Situations.SUB_ORBITAL || + this.core.vessel.situation == Vessel.Situations.LANDED || + this.core.vessel.situation == Vessel.Situations.SPLASHED + ) + ) + { + rightHUD.AppendFormat("\nRange to KSC: {0}", VOID_Data.downrangeDistance.ValueUnitString(2)); + } } else { - VOID_Core.Instance.LabelStyles["hud"].normal.textColor = Color.red; + VOID_Styles.labelHud.normal.textColor = Color.red; rightHUD.Append(string.Intern("-- POWER LOST --")); } - GUILayout.Label(rightHUD.ToString(), VOID_Core.Instance.LabelStyles["hud"], GUILayout.ExpandWidth(true)); + GUILayout.Label(rightHUD.ToString(), VOID_Styles.labelHud, GUILayout.ExpandWidth(true)); if (!this.positionsLocked) { @@ -201,25 +222,27 @@ public override void DrawGUI() { - if (!VOID_Core.Instance.LabelStyles.ContainsKey("hud")) - { - VOID_Core.Instance.LabelStyles["hud"] = new GUIStyle(GUI.skin.label); - } - - VOID_Core.Instance.LabelStyles["hud"].normal.textColor = textColors [ColorIndex]; + VOID_Styles.labelHud.normal.textColor = textColors [ColorIndex]; + + GUI.skin = this.core.Skin; + + if ((TimeWarp.WarpMode == TimeWarp.Modes.LOW) || (TimeWarp.CurrentRate <= TimeWarp.MaxPhysicsRate)) + { + SimManager.RequestSimulation(); + } this.leftHUDPos.value = GUI.Window( - VOID_Core.Instance.windowID, + this.core.windowID, this.leftHUDPos, - this.leftHUDWindow, + VOID_Tools.GetWindowHandler(this.leftHUDWindow), GUIContent.none, GUIStyle.none ); this.rightHUDPos.value = GUI.Window( - VOID_Core.Instance.windowID, + this.core.windowID, this.rightHUDPos, - this.rightHUDWindow, + VOID_Tools.GetWindowHandler(this.rightHUDWindow), GUIContent.none, GUIStyle.none ); @@ -243,75 +266,5 @@ GUILayout.ExpandWidth(false)); } } - - public static partial class VOID_Data - { - public static readonly VOID_StrValue expSituation = new VOID_StrValue( - "Situation", - new Func<string> (() => VOID_Core.Instance.vessel.GetExperimentSituation().HumanString()) - ); - - public static readonly VOID_DoubleValue vesselPitch = new VOID_DoubleValue( - "Pitch", - () => core.vessel.getSurfacePitch(), - "°" - ); - - public static readonly VOID_DoubleValue stageMassFlow = new VOID_DoubleValue( - "Stage Mass Flow", - delegate() - { - if (simManager.LastStage == null) - { - return double.NaN; - } - - double stageIsp = simManager.LastStage.isp; - double stageThrust = simManager.LastStage.actualThrust; - - return stageThrust / (stageIsp * KerbinGee); - }, - "Mg/s" - ); - - public static readonly VOID_DoubleValue burnTimeCompleteAtNode = new VOID_DoubleValue( - "Full burn time to complete at node", - delegate() - { - if (simManager.LastStage == null) - { - return double.NaN; - } - - double nextManeuverDV = core.vessel.patchedConicSolver.maneuverNodes[0].DeltaV.magnitude; - double stageThrust = simManager.LastStage.actualThrust; - - return burnTime(nextManeuverDV, totalMass, stageMassFlow, stageThrust); - }, - "s" - ); - - public static readonly VOID_DoubleValue burnTimeHalfDoneAtNode = new VOID_DoubleValue( - "Full burn time to be half done at node", - delegate() - { - if (simManager.LastStage == null) - { - return double.NaN; - } - - double nextManeuverDV = core.vessel.patchedConicSolver.maneuverNodes[0].DeltaV.magnitude / 2d; - double stageThrust = simManager.LastStage.actualThrust; - - return burnTime(nextManeuverDV, totalMass, stageMassFlow, stageThrust); - }, - "s" - ); - - private static double burnTime(double deltaV, double initialMass, double massFlow, double thrust) - { - return initialMass / massFlow * (Math.Exp(deltaV * massFlow / thrust) - 1d); - } - } }