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