diff --git a/kOS-EVA/Addon.cs b/kOS-EVA/Addon.cs index cad90b2..d1d43ab 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,6 +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")); // Set a default bootfilename, when no other has been set. if (shared.Vessel.isEVA && shared.KSPPart.GetComponentCached(ref _myprocessor).bootFile.ToLower() == "none" ) @@ -571,6 +573,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 || destPart.protoModuleCrew.Count() >= destPart.CrewCapacity) + { + 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 +624,4 @@ internal Vector3d v_rotate(Vector3d vec_from, Vector3d vec_to, double deg) #endregion } -} \ No newline at end of file +}