forked from RemoteTechnologiesGroup/RemoteTech
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRTPartInfoReloader.cs
More file actions
122 lines (106 loc) · 4.64 KB
/
Copy pathRTPartInfoReloader.cs
File metadata and controls
122 lines (106 loc) · 4.64 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
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.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace RemoteTech
{
[KSPAddon(KSPAddon.Startup.EditorAny, false)]
class RTPartInfoReloader : MonoBehaviour
{
public void Start()
{
StartCoroutine(ReloadInfos());
}
private IEnumerator ReloadInfos()
{
yield return null;
var loadedParts = PartLoader.LoadedPartsList;
// find all RT parts
var rtPartList = loadedParts.Where(
part => part.partPrefab.Modules != null &&
(part.partPrefab.Modules.Contains<Modules.ModuleRTAntennaPassive>() ||
part.partPrefab.Modules.Contains<Modules.ModuleRTAntenna>() ||
part.partPrefab.Modules.Contains<Modules.ModuleSPU>() ||
part.partPrefab.Modules.Contains<Modules.ModuleSPUPassive>())
);
foreach (var rtPart in rtPartList)
{
var partHasTechPerk = rtPart.partPrefab.Modules.Contains<Modules.ModuleRTAntennaPassive>();
var techPerkRefreshed = false;
for (var i = rtPart.moduleInfos.Count - 1; i >= 0; --i)
{
var info = rtPart.moduleInfos[i];
var moduleName = info.moduleName;
if (moduleName == "Technology Perk" || moduleName == "Antenna" || moduleName == "Signal Processor" )
{
var moduleClassName = string.Empty;
if (moduleName == "Technology Perk") moduleClassName = "ModuleRTAntennaPassive";
if (moduleName == "Antenna") moduleClassName = "ModuleRTAntenna";
if (moduleName == "Signal Processor") moduleClassName = "ModuleSPU";
// no moduleClassName found, skip to the next part
if (moduleClassName == string.Empty) continue;
// otherwise refresh the infos
var newInfos = RefreshPartInfo(rtPart.partPrefab, moduleClassName);
if (newInfos != string.Empty)
{
if (moduleName == "Technology Perk")
{
techPerkRefreshed = true;
}
info.info = newInfos;
}
else
{
// Remove this info block, should only be the Technology Perk
rtPart.moduleInfos.RemoveAt(i);
}
}
}
// add a new info block for TechPerk
if (techPerkRefreshed == false && partHasTechPerk && rtPart.partPrefab.Modules.GetModule<Modules.ModuleRTAntennaPassive>().Unlocked)
{
rtPart.moduleInfos.Add(CreateTechPerkInfoforPart(rtPart.partPrefab));
}
}
}
/// <summary>
/// This method creates a new Info-block for the <paramref name="part"/> and
/// the <paramref name="moduleClassName"/> and returns a string. If no info
/// is available the result is an empty string.
/// </summary>
/// <param name="part">Part to get the infos</param>
/// <param name="moduleClassName">module class name for the <see cref="PartModule.GetInfo"/> call</param>
/// <returns>new info block</returns>
private static string RefreshPartInfo(Part part, string moduleClassName)
{
var newInfo = string.Empty;
foreach (var pm in part.Modules)
{
if (pm.moduleName == moduleClassName)
{
newInfo = pm.GetInfo();
}
}
return newInfo;
}
/// <summary>
/// This method creates a new AvailablePart.ModuleInfo object with
/// the Technology Perk info block.
/// </summary>
/// <param name="part">Part to get the infos</param>
/// <returns></returns>
private AvailablePart.ModuleInfo CreateTechPerkInfoforPart(Part part)
{
// Get the infos for the TechPerk info block
var perkInfos = RefreshPartInfo(part, "ModuleRTAntennaPassive");
// creates a new info block
var newPerkInfo = new AvailablePart.ModuleInfo
{
info = perkInfos,
moduleName = "Technology Perk"
};
return newPerkInfo;
}
}
}