Throughout: Changed explicit references to VOID_Core.Instance to per-module, editor-aware 'core' properties. dev-EditorTWR
[VOID.git] / VOID_SurfAtmo.cs
blob:a/VOID_SurfAtmo.cs -> blob:b/VOID_SurfAtmo.cs
// VOID // VOID
// //
// VOID_SurfAtmo.cs // VOID_SurfAtmo.cs
// //
// Copyright © 2014, toadicus // Copyright © 2014, toadicus
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met: // are permitted provided that the following conditions are met:
// //
// 1. Redistributions of source code must retain the above copyright notice, // 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
// //
// 2. Redistributions in binary form must reproduce the above copyright notice, // 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 // this list of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution. // materials provided with the distribution.
// //
// 3. Neither the name of the copyright holder nor the names of its contributors may be used // 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. // 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, // 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 // 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, // 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 // 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, // 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 // 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. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   
using KSP; using KSP;
using System; using System;
using ToadicusTools; 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)
{ {
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 readonly VOID_DoubleValue trueAltitude = new VOID_DoubleValue(  
"Altitude (true)",  
delegate()  
{  
double alt_true = core.vessel.orbit.altitude - core.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 (core.vessel.terrainAltitude < 0 && core.vessel.mainBody.ocean )  
alt_true = core.vessel.orbit.altitude;  
return alt_true;  
},  
"m"  
);  
   
public static readonly VOID_StrValue surfLatitude = new VOID_StrValue(  
"Latitude",  
new Func<string> (() => VOID_Tools.GetLatitudeString(core.vessel))  
);  
   
public static readonly VOID_StrValue surfLongitude = new VOID_StrValue(  
"Longitude",  
new Func<string> (() => VOID_Tools.GetLongitudeString(core.vessel))  
);  
   
public static readonly VOID_StrValue vesselHeading = new VOID_StrValue(  
"Heading",  
delegate()  
{  
double heading = core.vessel.getSurfaceHeading();  
string cardinal = VOID_Tools.get_heading_text(heading);  
   
return string.Format(  
"{0}° {1}",  
heading.ToString("F2"),  
cardinal  
);  
}  
);  
   
public static readonly VOID_DoubleValue terrainElevation = new VOID_DoubleValue(  
"Terrain elevation",  
new Func<double> (() => core.vessel.terrainAltitude),  
"m"  
);  
   
public static readonly VOID_DoubleValue surfVelocity = new VOID_DoubleValue(  
"Surface velocity",  
new Func<double> (() => core.vessel.srf_velocity.magnitude),  
"m/s"  
);  
   
public static readonly VOID_DoubleValue vertVelocity = new VOID_DoubleValue(  
"Vertical speed",  
new Func<double> (() => core.vessel.verticalSpeed),  
"m/s"  
);  
   
public static readonly VOID_DoubleValue horzVelocity = new VOID_DoubleValue(  
"Horizontal speed",  
new Func<double> (() => core.vessel.horizontalSrfSpeed),  
"m/s"  
);  
   
public static readonly VOID_FloatValue temperature = new VOID_FloatValue(  
"Temperature",  
new Func<float> (() => core.vessel.flightIntegrator.getExternalTemperature()),  
"°C"  
);  
   
public static readonly VOID_DoubleValue atmDensity = new VOID_DoubleValue (  
"Atmosphere Density",  
new Func<double> (() => core.vessel.atmDensity * 1000f),  
"g/m³"  
);  
   
public static readonly VOID_DoubleValue atmPressure = new VOID_DoubleValue (  
"Pressure",  
new Func<double> (() => core.vessel.staticPressure),  
"atm"  
);  
   
public static readonly VOID_FloatValue atmLimit = new VOID_FloatValue(  
"Atmosphere Limit",  
new Func<float> (() => core.vessel.mainBody.maxAtmosphereAltitude),  
"m"  
);  
   
public static readonly VOID_StrValue currBiome = new VOID_StrValue(  
"Biome",  
new Func<string> (() => VOID_Tools.GetBiome(core.vessel).name)  
);  
   
}  
} }