Skip to content

Commit cff6e7d

Browse files
committed
Added DecoupledCraftNameFix
1 parent eceb862 commit cff6e7d

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using System.Text.RegularExpressions;
2+
using HarmonyLib;
3+
using KSP.Messages;
4+
using KSP.Sim.impl;
5+
6+
namespace CommunityFixes.Fix.FairingEjectSidewaysFix;
7+
8+
[Fix("Decoupled craft name fix")]
9+
public class DecoupledCraftNameFix : BaseFix
10+
{
11+
public override void OnInitialized()
12+
{
13+
Messages.Subscribe<DecoupleMessage>(msg => HandleDecoupleMessage((DecoupleMessage)msg));
14+
Messages.Subscribe<VesselUndockedMessage>(msg => HandleUndockMessage((VesselUndockedMessage)msg));
15+
16+
HarmonyInstance.PatchAll(typeof(DecoupledCraftNameFix));
17+
}
18+
19+
private void HandleDecoupleMessage(DecoupleMessage decoupleMessage)
20+
{
21+
var part1Guid = new IGGuid(Guid.Parse(decoupleMessage.PartGuid));
22+
var part2Guid = decoupleMessage.OtherPartGuid;
23+
24+
var vessel1 = Game.UniverseModel.FindPartComponent(part1Guid)?.PartOwner?.SimulationObject?.Vessel;
25+
var vessel2 = Game.UniverseModel.FindPartComponent(part2Guid)?.PartOwner?.SimulationObject?.Vessel;
26+
27+
HandleSeparationEvent(vessel1, vessel2);
28+
}
29+
30+
private void HandleUndockMessage(VesselUndockedMessage undockMessage)
31+
{
32+
VesselComponent vessel1 = undockMessage.VesselOne?.Model;
33+
VesselComponent vessel2 = undockMessage.VesselTwo?.Model;
34+
35+
HandleSeparationEvent(vessel1, vessel2);
36+
}
37+
38+
private void HandleSeparationEvent(VesselComponent vessel1, VesselComponent vessel2)
39+
{
40+
Logger.LogDebug($"Separated: {vessel1?.Name}, {vessel2?.Name}");
41+
42+
if (vessel2 is not { Name: var newName } ||
43+
!newName.StartsWith("Default Name") ||
44+
string.IsNullOrEmpty(vessel1?.Name))
45+
{
46+
return;
47+
}
48+
49+
var match = Regex.Match(vessel1!.Name, @"-(\d+)$");
50+
newName = match.Success
51+
? Regex.Replace(vessel1.Name, @"-\d+$", $"-{int.Parse(match.Groups[1].Value) + 1}")
52+
: $"{vessel1.Name}-2";
53+
54+
Logger.LogDebug($"Renaming {vessel2.Name} to {newName}");
55+
56+
vessel2.SimulationObject.Name = newName;
57+
}
58+
59+
[HarmonyPatch(typeof(SpaceSimulation), nameof(SpaceSimulation.CreateCombinedVesselSimObject))]
60+
[HarmonyPrefix]
61+
public static void CreateCombinedVesselSimObjectPrefix(
62+
// ReSharper disable once InconsistentNaming
63+
ref string __state,
64+
VesselComponent masterVessel
65+
)
66+
{
67+
__state = masterVessel.Name;
68+
}
69+
70+
[HarmonyPatch(typeof(SpaceSimulation), nameof(SpaceSimulation.CreateCombinedVesselSimObject))]
71+
[HarmonyPostfix]
72+
public static void CreateCombinedVesselSimObjectPostfix(
73+
// ReSharper disable once InconsistentNaming
74+
string __state,
75+
// ReSharper disable once InconsistentNaming
76+
ref SimulationObjectModel __result
77+
)
78+
{
79+
__result.Name = __state;
80+
}
81+
}

0 commit comments

Comments
 (0)