Deepened the tabular hash nesting.
[AntennaRange.git] / Extensions.cs
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace AntennaRange
{
        public static class Extensions
        {
                public static double DistanceTo(this Vessel vesselOne, Vessel vesselTwo)
                {
                        return (vesselOne.GetWorldPos3D() - vesselTwo.GetWorldPos3D()).magnitude;
                }
 
                public static double DistanceTo(this Vessel vessel, CelestialBody body)
                {
                        return (vessel.GetWorldPos3D() - body.position).magnitude;
                }
 
                public static double DistanceTo(this IAntennaRelay relay, Vessel Vessel)
                {
                        return relay.vessel.DistanceTo(Vessel);
                }
 
                public static double DistanceTo(this IAntennaRelay relay, CelestialBody body)
                {
                        return relay.vessel.DistanceTo(body);
                }
 
                public static double DistanceTo(this IAntennaRelay relayOne, IAntennaRelay relayTwo)
                {
                        return relayOne.DistanceTo(relayTwo.vessel);
                }
 
                public static IEnumerable<IAntennaRelay> GetAntennaRelays (this Vessel vessel)
                {
                        Tools.PostDebugMessage(string.Format(
                                "{0}: Getting antenna relays from vessel {1}.",
                                "IAntennaRelay",
                                vessel.name
                        ));
 
                        List<IAntennaRelay> Transmitters;
 
                        if (vessel.loaded) {
                                Tools.PostDebugMessage(string.Format(
                                        "{0}: vessel {1} is loaded.",
                                        "IAntennaRelay",
                                        vessel.name
                                        ));
 
                                Transmitters = vessel.Parts
                                        .SelectMany (p => p.Modules.OfType<IAntennaRelay> ())
                                        .ToList();
                        } else {
                                Tools.PostDebugMessage(string.Format(
                                        "{0}: vessel {1} is not loaded.",
                                        "IAntennaRelay",
                                        vessel.name
                                        ));
 
                                Transmitters = new List<IAntennaRelay>();
 
                                foreach (ProtoPartModuleSnapshot ms in vessel.protoVessel.protoPartSnapshots.SelectMany(ps => ps.modules))
                                {
                                        if (ms.IsAntenna())
                                        {
                                                Transmitters.Add(new ProtoAntennaRelay(ms, vessel));
                                        }
                                }
                        }
 
                        Tools.PostDebugMessage(string.Format(
                                "{0}: vessel {1} has {2} transmitters.",
                                "IAntennaRelay",
                                vessel.name,
                                Transmitters.Count
                                ));
 
                        return Transmitters;
                }
 
                public static bool IsAntenna (this PartModule module)
                {
                        return module.Fields.GetValue<bool> ("IsAntenna");
                }
 
                public static bool IsAntenna(this ProtoPartModuleSnapshot protomodule)
                {
                        bool result;
 
                        return Boolean.TryParse (protomodule.moduleValues.GetValue ("IsAntenna") ?? "False", out result)
                                ? result : false;
                }
        }
}