forked from KSP-RO/TestFlight
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTestFlightFailure_Engine.cs
123 lines (110 loc) · 4.06 KB
/
TestFlightFailure_Engine.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TestFlightAPI;
namespace TestFlight
{
public class TestFlightFailure_Engine : TestFlightFailureBase
{
[KSPField]
public string engineID = "all";
protected class EngineHandler
{
public EngineModuleWrapper.EngineIgnitionState ignitionState;
public EngineModuleWrapper engine;
public bool failEngine;
}
protected List<EngineHandler> engines = null;
public new bool TestFlightEnabled
{
get
{
// Make sure we have valid engines
if (engines == null)
{
Log("EngineBase: No valid engines found");
return false;
}
return TestFlightUtil.EvaluateQuery(Configuration, this.part);
}
}
public override void OnStart(StartState state)
{
base.OnStart(state);
StartCoroutine("Attach");
}
IEnumerator Attach()
{
while (this.part == null || this.part.partInfo == null || this.part.partInfo.partPrefab == null || this.part.Modules == null)
yield return null;
Startup();
}
public virtual void Startup()
{
engines = new List<EngineHandler>();
if (!String.IsNullOrEmpty(engineID))
{
if (engineID.ToLower() == "all")
{
List<ModuleEngines> engineMods = this.part.Modules.GetModules<ModuleEngines>();
foreach (ModuleEngines eng in engineMods)
{
string id = eng.engineID;
EngineModuleWrapper engine = new EngineModuleWrapper();
engine.InitWithEngine(this.part, id);
EngineHandler engineHandler = new EngineHandler();
engineHandler.engine = engine;
engineHandler.ignitionState = engine.IgnitionState;
engines.Add(engineHandler);
}
}
else if (engineID.Contains(","))
{
string[] sEngineIndices = engineID.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string sEngineIndex in sEngineIndices)
{
EngineModuleWrapper engine = new EngineModuleWrapper();
engine.InitWithEngine(this.part, sEngineIndex);
EngineHandler engineHandler = new EngineHandler();
engineHandler.engine = engine;
engineHandler.ignitionState = engine.IgnitionState;
engines.Add(engineHandler);
}
}
else
{
EngineModuleWrapper engine = new EngineModuleWrapper();
engine.InitWithEngine(this.part, engineID);
EngineHandler engineHandler = new EngineHandler();
engineHandler.engine = engine;
engineHandler.ignitionState = engine.IgnitionState;
engines.Add(engineHandler);
}
}
else
{
EngineModuleWrapper engine = new EngineModuleWrapper();
engine.Init(this.part);
EngineHandler engineHandler = new EngineHandler();
engineHandler.engine = engine;
engineHandler.ignitionState = engine.IgnitionState;
engines.Add(engineHandler);
}
}
public override void OnUpdate()
{
base.OnUpdate();
}
// Failure methods
public override void DoFailure()
{
base.DoFailure();
}
public override float DoRepair()
{
return base.DoRepair();
}
}
}