forked from Nivekk/KOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBindingsFlightStats.cs
More file actions
79 lines (60 loc) · 3.56 KB
/
BindingsFlightStats.cs
File metadata and controls
79 lines (60 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace kOS
{
[kOSBinding("ksp")]
public class BindingsFlightStats : Binding
{
public override void AddTo(BindingManager manager)
{
manager.AddGetter("ALT:RADAR", delegate(CPU cpu) { return cpu.Vessel.heightFromTerrain > 0 ? Mathf.Min(cpu.Vessel.heightFromTerrain, (float)cpu.Vessel.altitude) : (float)cpu.Vessel.altitude; });
manager.AddGetter("ALT:APOAPSIS", delegate(CPU cpu) { return cpu.Vessel.orbit.ApA; });
manager.AddGetter("ALT:PERIAPSIS", delegate(CPU cpu) { return cpu.Vessel.orbit.PeA; });
manager.AddGetter("ETA:APOAPSIS", delegate(CPU cpu) { return cpu.Vessel.orbit.timeToAp; });
manager.AddGetter("ETA:PERIAPSIS", delegate(CPU cpu) { return cpu.Vessel.orbit.timeToPe; });
manager.AddGetter("MISSIONTIME", delegate(CPU cpu) { return cpu.Vessel.missionTime; });
manager.AddGetter("TIME", delegate(CPU cpu) { return new kOS.TimeSpan(Planetarium.GetUniversalTime()); });
manager.AddGetter("STATUS", delegate(CPU cpu) { return cpu.Vessel.situation.ToString().Replace("_", " "); });
manager.AddGetter("COMMRANGE", delegate(CPU cpu) { return VesselUtils.GetCommRange(cpu.Vessel); });
manager.AddGetter("INCOMMRANGE", delegate(CPU cpu) { return Convert.ToDouble(CheckCommRange(cpu.Vessel)); });
manager.AddGetter("AV", delegate(CPU cpu) { return cpu.Vessel.transform.InverseTransformDirection(cpu.Vessel.rigidbody.angularVelocity); });
manager.AddGetter("STAGE", delegate(CPU cpu) { return new StageValues(cpu.Vessel); });
manager.AddGetter("ENCOUNTER", delegate(CPU cpu) { return VesselUtils.TryGetEncounter(cpu.Vessel); });
manager.AddGetter("NEXTNODE", delegate(CPU cpu)
{
var vessel = cpu.Vessel;
if (!vessel.patchedConicSolver.maneuverNodes.Any()) { throw new kOSException("No maneuver nodes present!"); }
return Node.FromExisting(vessel, vessel.patchedConicSolver.maneuverNodes[0]);
});
// Things like altitude, mass, maxthrust are now handled the same for other ships as the current ship
manager.AddGetter("SHIP", delegate(CPU cpu) { return new VesselTarget(cpu.Vessel, cpu); });
// These are now considered shortcuts to SHIP:suffix
foreach (String scName in VesselTarget.ShortCuttableShipSuffixes)
{
manager.AddGetter(scName, delegate(CPU cpu) { return new VesselTarget(cpu.Vessel, cpu).GetSuffix(scName); });
}
manager.AddSetter("VESSELNAME", delegate(CPU cpu, object value) { cpu.Vessel.vesselName = value.ToString(); });
}
private static float getLattitude(CPU cpu)
{
float retVal = (float)cpu.Vessel.latitude;
if (retVal > 90) return 90;
if (retVal < -90) return -90;
return retVal;
}
private static float getLongitude(CPU cpu)
{
float retVal = (float)cpu.Vessel.longitude;
while (retVal > 180) retVal -= 360;
while (retVal < -180) retVal += 360;
return retVal;
}
private static bool CheckCommRange(Vessel vessel)
{
return (VesselUtils.GetDistanceToKerbinSurface(vessel) < VesselUtils.GetCommRange(vessel));
}
}
}