--- a/VOID_HUD.cs +++ b/VOID_HUD.cs @@ -1,149 +1,187 @@ +// VOID // -// VOID_Hud.cs +// VOID_HUD.cs // -// Author: -// toadicus <> +// Copyright © 2014, toadicus +// All rights reserved. // -// Copyright (c) 2013 toadicus +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: // -// 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. +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. // -// 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. +// 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. // -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. +// 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 { - public class VOID_HUD : VOID_Module, IVOID_Module + public class VOID_HUD : VOID_HUDModule, IVOID_Module { /* * Fields * */ - protected new bool _hasConfigurables = true; - - [AVOID_SaveValue("colorIndex")] - protected VOID_SaveValue<int> _colorIndex = 0; - - protected List<Color> textColors = new List<Color>(); - - protected GUIStyle labelStyle; - - protected Vessel vessel = null; + protected HUDWindow leftHUD; + protected HUDWindow rightHUD; /* * Properties * */ - public int ColorIndex - { - get - { - return this._colorIndex; - } - set - { - if (this._colorIndex >= this.textColors.Count - 1) - { - this._colorIndex = 0; - return; - } - - this._colorIndex = value; - } - } /* * Methods * */ public VOID_HUD() : base() { - this._Name = "Heads-Up Display"; - this.textColors.Add(Color.green); - this.textColors.Add(Color.black); - this.textColors.Add(Color.white); - this.textColors.Add(Color.red); - this.textColors.Add(Color.blue); - this.textColors.Add(Color.yellow); - this.textColors.Add(Color.gray); - this.textColors.Add(Color.cyan); - this.textColors.Add(Color.magenta); + this.Name = "Heads-Up Display"; - this.labelStyle = new GUIStyle (); - this.labelStyle.normal.textColor = this.textColors [this.ColorIndex]; + this.toggleActive = true; + + this.leftHUD = new HUDWindow("leftHUD", this.leftHUDWindow, new Rect(Screen.width * .375f - 300f, 0f, 300f, 90f)); + this.Windows.Add(this.leftHUD); + + this.rightHUD = new HUDWindow("rightHUD", this.rightHUDWindow, new Rect(Screen.width * .625f, 0f, 300f, 90f)); + this.Windows.Add(this.rightHUD); Tools.PostDebugMessage ("VOID_HUD: Constructed."); } - public override void DrawGUI() + protected void leftHUDWindow(int id) { - Tools.PostDebugMessage ("VOID_HUD: Drawing GUI."); + StringBuilder leftHUD; - GUI.skin = VOID_Core.Instance.Skin; + leftHUD = new StringBuilder(); - if (vessel == null) + VOID_Styles.labelHud.alignment = TextAnchor.UpperRight; + + if (this.core.powerAvailable) { - vessel = FlightGlobals.ActiveVessel; - } - - if (vessel != FlightGlobals.ActiveVessel) - { - vessel = FlightGlobals.ActiveVessel; - } - - if (VOID_Core.Instance.powerAvailable) - { - labelStyle.normal.textColor = textColors [ColorIndex]; - - GUI.Label ( - new Rect ((Screen.width * .2083f), 0, 300f, 70f), - "Obt Alt: " + Tools.MuMech_ToSI (vessel.orbit.altitude) + "m" + - " Obt Vel: " + Tools.MuMech_ToSI (vessel.orbit.vel.magnitude) + "m/s" + - "\nAp: " + Tools.MuMech_ToSI (vessel.orbit.ApA) + "m" + - " ETA " + Tools.ConvertInterval (vessel.orbit.timeToAp) + - "\nPe: " + Tools.MuMech_ToSI (vessel.orbit.PeA) + "m" + - " ETA " + Tools.ConvertInterval (vessel.orbit.timeToPe) + - "\nInc: " + vessel.orbit.inclination.ToString ("F3") + "°", - labelStyle); - // Toadicus edit: Added "Biome: " line to surf/atmo HUD - GUI.Label ( - new Rect ((Screen.width * .625f), 0, 300f, 90f), - "Srf Alt: " + Tools.MuMech_ToSI (Tools.TrueAltitude (vessel)) + "m" + - " Srf Vel: " + Tools.MuMech_ToSI (vessel.srf_velocity.magnitude) + "m/s" + - "\nVer: " + Tools.MuMech_ToSI (vessel.verticalSpeed) + "m/s" + - " Hor: " + Tools.MuMech_ToSI (vessel.horizontalSrfSpeed) + "m/s" + - "\nLat: " + Tools.GetLatitudeString (vessel, "F3") + - " Lon: " + Tools.GetLongitudeString (vessel, "F3") + - "\nHdg: " + Tools.MuMech_get_heading (vessel).ToString ("F2") + "° " + - Tools.get_heading_text (Tools.MuMech_get_heading (vessel)) + - "\nBiome: " + Tools.Toadicus_GetAtt (vessel).name, - labelStyle); + leftHUD.AppendFormat("Primary: {0} Inc: {1}", + VOID_Data.primaryName.ValueUnitString(), + VOID_Data.orbitInclination.ValueUnitString("F3") + ); + leftHUD.AppendFormat("\nObt Alt: {0} Obt Vel: {1}", + VOID_Data.orbitAltitude.ToSIString(), + VOID_Data.orbitVelocity.ToSIString() + ); + leftHUD.AppendFormat("\nAp: {0} ETA {1}", + VOID_Data.orbitApoAlt.ToSIString(), + VOID_Data.timeToApo.ValueUnitString() + ); + leftHUD.AppendFormat("\nPe: {0} ETA {1}", + VOID_Data.oribtPeriAlt.ToSIString(), + VOID_Data.timeToPeri.ValueUnitString() + ); + leftHUD.AppendFormat("\nTot Δv: {0} Stg Δv: {1}", + VOID_Data.totalDeltaV.ToSIString(2), + VOID_Data.stageDeltaV.ToSIString(2) + ); } else { - labelStyle.normal.textColor = Color.red; - GUI.Label (new Rect ((Screen.width * .2083f), 0, 300f, 70f), "-- POWER LOST --", labelStyle); - GUI.Label (new Rect ((Screen.width * .625f), 0, 300f, 70f), "-- POWER LOST --", labelStyle); + VOID_Styles.labelHud.normal.textColor = Color.red; + leftHUD.Append(string.Intern("-- POWER LOST --")); } + + GUILayout.Label( + leftHUD.ToString(), + VOID_Styles.labelHud, + GUILayout.ExpandWidth(true), + GUILayout.ExpandHeight(true) + ); + + if (!this.positionsLocked) + { + GUI.DragWindow(); + } + + GUI.BringWindowToBack(id); } - public override void DrawConfigurables() + protected void rightHUDWindow(int id) { - if (GUILayout.Button ("Change HUD color", GUILayout.ExpandWidth (false))) + StringBuilder rightHUD; + + rightHUD = new StringBuilder(); + + VOID_Styles.labelHud.alignment = TextAnchor.UpperLeft; + + if (this.core.powerAvailable) { - ++this.ColorIndex; + rightHUD.AppendFormat("Biome: {0} Sit: {1}", + VOID_Data.currBiome.ValueUnitString(), + VOID_Data.expSituation.ValueUnitString() + ); + rightHUD.AppendFormat("\nSrf Alt: {0} Srf Vel: {1}", + VOID_Data.trueAltitude.ToSIString(), + VOID_Data.surfVelocity.ToSIString() + ); + rightHUD.AppendFormat("\nVer: {0} Hor: {1}", + VOID_Data.vertVelocity.ToSIString(), + VOID_Data.horzVelocity.ToSIString() + ); + rightHUD.AppendFormat("\nLat: {0} Lon: {1}", + VOID_Data.surfLatitude.ValueUnitString(), + VOID_Data.surfLongitude.ValueUnitString() + ); + rightHUD.AppendFormat("\nHdg: {0} Pit: {1}", + 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_Styles.labelHud.normal.textColor = Color.red; + rightHUD.Append(string.Intern("-- POWER LOST --")); + } + + + GUILayout.Label( + rightHUD.ToString(), + VOID_Styles.labelHud, + GUILayout.ExpandWidth(true), + GUILayout.ExpandHeight(true) + ); + + if (!this.positionsLocked) + { + GUI.DragWindow(); + } + + GUI.BringWindowToBack(id); } } }