I'd really like to comment but I don't have time.
[VOID.git] / VOID_SurfAtmo.cs
blob:a/VOID_SurfAtmo.cs -> blob:b/VOID_SurfAtmo.cs
  // VOID
// //
// VOID_Orbital.cs // VOID_SurfAtmo.cs
// //
// Author: // Copyright © 2014, toadicus
// 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 // 1. Redistributions of source code must retain the above copyright notice,
// it under the terms of the GNU General Public License as published by // this list of conditions and the following disclaimer.
// 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, // 2. Redistributions in binary form must reproduce the above copyright notice,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // this list of conditions and the following disclaimer in the documentation and/or other
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // materials provided with the distribution.
// GNU General Public License for more details.  
// //
// You should have received a copy of the GNU General Public License // 3. Neither the name of the copyright holder nor the names of its contributors may be used
// along with this program. If not, see <http://www.gnu.org/licenses/>. // 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 KSP;
using System; using System;
  using ToadicusTools;
using UnityEngine; using UnityEngine;
   
namespace VOID namespace VOID
{ {
public class VOID_SurfAtmo : VOID_WindowModule public class VOID_SurfAtmo : VOID_WindowModule
{ {
[AVOID_SaveValue("precisionValues")] [AVOID_SaveValue("precisionValues")]
protected long _precisionValues = 230584300921369395; protected VOID_SaveValue<long> _precisionValues;
protected IntCollection precisionValues; protected IntCollection precisionValues;
   
public VOID_SurfAtmo() public VOID_SurfAtmo()
{ {
this._Name = "Surface & Atmospheric Information"; this.Name = "Surface & Atmospheric Info";
   
this.WindowPos.x = Screen.width - 260f; this.WindowPos.x = Screen.width - 260f;
this.WindowPos.y = 85; this.WindowPos.y = 85;
   
  this._precisionValues = (VOID_SaveValue<long>)384307168202282325;
} }
   
public override void ModuleWindow(int _) public override void ModuleWindow(int id)
{ {
base.ModuleWindow (_);  
   
int idx = 0; int idx = 0;
   
GUILayout.BeginVertical(); GUILayout.BeginVertical();
   
this.precisionValues [idx]= (ushort)VOID_Data.trueAltitude.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.trueAltitude.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
VOID_Data.surfLatitude.DoGUIHorizontal (); VOID_Data.surfLatitudeString.DoGUIHorizontal();
   
VOID_Data.surfLongitude.DoGUIHorizontal (); VOID_Data.surfLongitudeString.DoGUIHorizontal();
   
VOID_Data.vesselHeading.DoGUIHorizontal (); VOID_Data.vesselHeading.DoGUIHorizontal();
   
this.precisionValues [idx]= (ushort)VOID_Data.terrainElevation.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.terrainElevation.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
this.precisionValues [idx]= (ushort)VOID_Data.surfVelocity.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.downrangeDistance.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
this.precisionValues [idx]= (ushort)VOID_Data.vertVelocity.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.surfVelocity.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
this.precisionValues [idx]= (ushort)VOID_Data.horzVelocity.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.vertVelocity.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
VOID_Data.temperature.DoGUIHorizontal ("F2"); this.precisionValues[idx] = (ushort)VOID_Data.horzVelocity.DoGUIHorizontal(this.precisionValues[idx]);
  idx++;
   
VOID_Data.atmDensity.DoGUIHorizontal (3); VOID_Data.temperature.DoGUIHorizontal("F2");
   
VOID_Data.atmPressure.DoGUIHorizontal ("F2"); this.precisionValues[idx] = (ushort)VOID_Data.atmDensity.DoGUIHorizontal(this.precisionValues[idx]);
  idx++;
   
this.precisionValues [idx]= (ushort)VOID_Data.atmLimit.DoGUIHorizontal (this.precisionValues [idx]); this.precisionValues[idx] = (ushort)VOID_Data.atmPressure.DoGUIHorizontal(this.precisionValues[idx]);
  idx++;
   
  this.precisionValues[idx] = (ushort)VOID_Data.atmLimit.DoGUIHorizontal(this.precisionValues[idx]);
idx++; idx++;
   
// Toadicus edit: added Biome // Toadicus edit: added Biome
VOID_Data.currBiome.DoGUIHorizontal (); VOID_Data.currBiome.DoGUIHorizontal();
   
GUILayout.EndVertical(); GUILayout.EndVertical();
GUI.DragWindow();  
  base.ModuleWindow(id);
} }
   
public override void LoadConfig () public override void LoadConfig(KSP.IO.PluginConfiguration config)
{ {
base.LoadConfig (); base.LoadConfig(config);
   
this.precisionValues = new IntCollection (4, this._precisionValues); this.precisionValues = new IntCollection(4, this._precisionValues);
} }
   
public override void _SaveToConfig (KSP.IO.PluginConfiguration config) public override void Save(KSP.IO.PluginConfiguration config, string sceneKey)
{ {
this._precisionValues = this.precisionValues.collection; this._precisionValues.value = this.precisionValues.collection;
   
base._SaveToConfig (config); base.Save(config, sceneKey);
} }
} }
   
public static partial class VOID_Data  
{  
public static VOID_DoubleValue trueAltitude = new VOID_DoubleValue(  
"Altitude (true)",  
delegate()  
{  
double alt_true = VOID_Core.Instance.vessel.orbit.altitude - VOID_Core.Instance.vessel.terrainAltitude;  
// HACK: This assumes that on worlds with oceans, all water is fixed at 0 m,  
// and water covers the whole surface at 0 m.  
if (VOID_Core.Instance.vessel.terrainAltitude < 0 && VOID_Core.Instance.vessel.mainBody.ocean )  
alt_true = VOID_Core.Instance.vessel.orbit.altitude;  
return alt_true;  
},  
"m"  
);  
   
public static VOID_StrValue surfLatitude = new VOID_StrValue(  
"Latitude",  
new Func<string> (() => Tools.GetLatitudeString(VOID_Core.Instance.vessel))  
);  
   
public static VOID_StrValue surfLongitude = new VOID_StrValue(  
"Longitude",  
new Func<string> (() => Tools.GetLongitudeString(VOID_Core.Instance.vessel))  
);  
   
public static VOID_StrValue vesselHeading = new VOID_StrValue(  
"Heading",  
delegate()  
{  
double heading = Tools.MuMech_get_heading(VOID_Core.Instance.vessel);  
string cardinal = Tools.get_heading_text(heading);  
   
return string.Format(  
"{0}° {1}",  
heading.ToString("F2"),  
cardinal  
);  
}  
);  
   
public static VOID_DoubleValue terrainElevation = new VOID_DoubleValue(  
"Terrain elevation",  
new Func<double> (() => VOID_Core.Instance.vessel.terrainAltitude),  
"m"  
);  
   
public static VOID_DoubleValue surfVelocity = new VOID_DoubleValue(  
"Surface velocity",  
new Func<double> (() => VOID_Core.Instance.vessel.srf_velocity.magnitude),  
"m/s"  
);  
   
public static VOID_DoubleValue vertVelocity = new VOID_DoubleValue(  
"Vertical speed",  
new Func<double> (() => VOID_Core.Instance.vessel.verticalSpeed),  
"m/s"  
);  
   
public static VOID_DoubleValue horzVelocity = new VOID_DoubleValue(  
"Horizontal speed",  
new Func<double> (() => VOID_Core.Instance.vessel.horizontalSrfSpeed),  
"m/s"  
);  
   
public static VOID_FloatValue temperature = new VOID_FloatValue(  
"Temperature",  
new Func<float> (() => VOID_Core.Instance.vessel.flightIntegrator.getExternalTemperature()),  
"°C"  
);  
   
public static VOID_DoubleValue atmDensity = new VOID_DoubleValue (  
"Atmosphere Density",  
new Func<double> (() => VOID_Core.Instance.vessel.atmDensity * 1000f),  
"g/m³"  
);  
   
public static VOID_DoubleValue atmPressure = new VOID_DoubleValue (  
"Pressure",  
new Func<double> (() => VOID_Core.Instance.vessel.staticPressure),  
"atm"  
);  
   
public static VOID_FloatValue atmLimit = new VOID_FloatValue(  
"Atmosphere Limit",  
new Func<float> (() => VOID_Core.Instance.vessel.mainBody.maxAtmosphereAltitude),  
"m"  
);  
   
public static VOID_StrValue currBiome = new VOID_StrValue(  
"Biome",  
new Func<string> (() => Tools.Toadicus_GetAtt(VOID_Core.Instance.vessel).name)  
);  
   
}  
} }