From 9d4e4da9c8d6d9375be6ebbcfee358cca73dedf0 Mon Sep 17 00:00:00 2001 From: numberlesstim <117858473+numberlesstim@users.noreply.github.com> Date: Wed, 14 Feb 2024 16:10:33 +0100 Subject: [PATCH 1/3] Crew transfers Adds a "TRANSFERCREW" suffix, that enables crew transfers via kOS --- kOS-EVA/Addon.cs | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/kOS-EVA/Addon.cs b/kOS-EVA/Addon.cs index cad90b2..dc1db73 100644 --- a/kOS-EVA/Addon.cs +++ b/kOS-EVA/Addon.cs @@ -60,6 +60,7 @@ private void InitializeSuffixes() AddSuffix("JUMP", new NoArgsVoidSuffix(Jump)); AddSuffix("SPRINT", new SetSuffix(() => evacontrol.Sprint, value => evacontrol.Sprint = value)); AddSuffix("STATE", new Suffix(() => kerbaleva.fsm.currentState.name)); + AddSuffix("TRANSFERCREW", new TwoArgsSuffix(TransferCrew, "Transfer CrewMember to the Part")); // Set a default bootfilename, when no other has been set. if (shared.Vessel.isEVA && shared.KSPPart.GetComponentCached(ref _myprocessor).bootFile.ToLower() == "none" ) @@ -571,6 +572,46 @@ private void TurnTo(Vector direction) CheckEvaController(); this.evacontrol.LookDirection = direction.ToVector3D(); } + + private BooleanValue TransferCrew(CrewMember kerbal, Suffixed.Part.PartValue aimedPart) + { + Part destPart = null; + ProtoCrewMember safeCrewMember = null; + + foreach (var vesselPart in shared.Vessel.Parts) + { + if (vesselPart.uid() == aimedPart.Part.uid()) + { + destPart = vesselPart; + break; + } + } + + foreach (var vesselCrew in shared.Vessel.GetVesselCrew()) + { + if (vesselCrew.name.ToLower() == kerbal.Name.ToLower()) + { + safeCrewMember = vesselCrew; + break; + } + } + + if (safeCrewMember == null || destPart == null) + { + return false; + } + + var transfer = CrewTransfer.Create(safeCrewMember.seat.part, safeCrewMember, delegate { }); + try + { + transfer.MoveCrewTo(destPart); + } + catch (Exception ex) + { + Debug.LogWarning("kOSEVA: CrewTransfer failed: " + ex.ToString()); + } + return true; + } #endregion #region internal functions @@ -582,4 +623,4 @@ internal Vector3d v_rotate(Vector3d vec_from, Vector3d vec_to, double deg) #endregion } -} \ No newline at end of file +} From 825d9cb9de2272d9453610b78b792076cda8306e Mon Sep 17 00:00:00 2001 From: numberlesstim <117858473+numberlesstim@users.noreply.github.com> Date: Wed, 14 Feb 2024 18:23:29 +0100 Subject: [PATCH 2/3] CrewTransfer fix 1 Added check if target Part has a free seat --- kOS-EVA/Addon.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kOS-EVA/Addon.cs b/kOS-EVA/Addon.cs index dc1db73..d218b3f 100644 --- a/kOS-EVA/Addon.cs +++ b/kOS-EVA/Addon.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Linq; using System.Text; @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Reflection; +using kOS.Utilities; namespace kOS.AddOns.kOSEVA { @@ -60,7 +61,7 @@ private void InitializeSuffixes() AddSuffix("JUMP", new NoArgsVoidSuffix(Jump)); AddSuffix("SPRINT", new SetSuffix(() => evacontrol.Sprint, value => evacontrol.Sprint = value)); AddSuffix("STATE", new Suffix(() => kerbaleva.fsm.currentState.name)); - AddSuffix("TRANSFERCREW", new TwoArgsSuffix(TransferCrew, "Transfer CrewMember to the Part")); + AddSuffix("TRANSFERCREW", new TwoArgsSuffix(TransferCrew, "Transfer CrewMember to the Part")); // Set a default bootfilename, when no other has been set. if (shared.Vessel.isEVA && shared.KSPPart.GetComponentCached(ref _myprocessor).bootFile.ToLower() == "none" ) @@ -596,7 +597,7 @@ private BooleanValue TransferCrew(CrewMember kerbal, Suffixed.Part.PartValue aim } } - if (safeCrewMember == null || destPart == null) + if (safeCrewMember == null || destPart == null || destPart.protoModuleCrew.Count() >= destPart.CrewCapacity) { return false; } From ffaaa7c9e2d4e383eab3c13271bdb707cb72cf0e Mon Sep 17 00:00:00 2001 From: numberlesstim <117858473+numberlesstim@users.noreply.github.com> Date: Wed, 14 Feb 2024 18:24:04 +0100 Subject: [PATCH 3/3] whitespaces... --- kOS-EVA/Addon.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kOS-EVA/Addon.cs b/kOS-EVA/Addon.cs index d218b3f..d1d43ab 100644 --- a/kOS-EVA/Addon.cs +++ b/kOS-EVA/Addon.cs @@ -61,7 +61,7 @@ private void InitializeSuffixes() AddSuffix("JUMP", new NoArgsVoidSuffix(Jump)); AddSuffix("SPRINT", new SetSuffix(() => evacontrol.Sprint, value => evacontrol.Sprint = value)); AddSuffix("STATE", new Suffix(() => kerbaleva.fsm.currentState.name)); - AddSuffix("TRANSFERCREW", new TwoArgsSuffix(TransferCrew, "Transfer CrewMember to the Part")); + AddSuffix("TRANSFERCREW", new TwoArgsSuffix(TransferCrew, "Transfer CrewMember to the Part")); // Set a default bootfilename, when no other has been set. if (shared.Vessel.isEVA && shared.KSPPart.GetComponentCached(ref _myprocessor).bootFile.ToLower() == "none" )