private void UpdateWinchKeyGrab() { if (Input.GetKeyDown(grabHeadKey.ToLower())) { if (FlightGlobals.ActiveVessel.isEVA) { KASModuleWinch tmpGrabbbedHead = KAS_Shared.GetWinchModuleGrabbed(FlightGlobals.ActiveVessel); if (tmpGrabbbedHead) { tmpGrabbbedHead.DropHead(); return; } List <Collider> nearestColliders = new List <Collider>(Physics.OverlapSphere(FlightGlobals.ActiveVessel.transform.position, radius, 557059)); float shorterDist = Mathf.Infinity; KASModuleWinch nearestModuleWinch = null; foreach (Collider col in nearestColliders) { KASModuleWinchHead headModule = col.transform.gameObject.GetComponent <KASModuleWinchHead>(); if (!headModule) { continue; } // Check if the head is plugged if (headModule.connectedWinch.headState != KASModuleWinch.PlugState.Deployed) { continue; } // Check if it's a head grabbed by another kerbal eva if (headModule.connectedWinch.evaHolderPart) { continue; } // Select the nearest grabbable part float distToGrab = Vector3.Distance(FlightGlobals.ActiveVessel.transform.position, headModule.connectedWinch.part.transform.position); if (distToGrab <= shorterDist) { shorterDist = distToGrab; nearestModuleWinch = headModule.connectedWinch; } } //Grab nearest head if exist if (nearestModuleWinch) { nearestModuleWinch.GrabHead(FlightGlobals.ActiveVessel); return; } } } }
private void UpdateWinchMouseGrab() { if (Input.GetKeyDown(KeyCode.Mouse1)) { if (clickedWinch) { clickedWinch = null; return; } if (FlightGlobals.ActiveVessel.isEVA) { KerbalEVA kerbalEva = KAS_Shared.GetKerbalEvaUnderCursor(); if (kerbalEva) { KASModuleWinch winchModule = KAS_Shared.GetWinchModuleGrabbed(kerbalEva.vessel); if (winchModule) { clickedWinch = winchModule; return; } } Transform headTransform = KAS_Shared.GetTransformUnderCursor(); if (headTransform) { KASModuleWinchHead winchHeadModule = headTransform.gameObject.GetComponent <KASModuleWinchHead>(); if (winchHeadModule) { float dist = Vector3.Distance(FlightGlobals.ActiveVessel.transform.position, headTransform.position); if (dist <= radius) { clickedWinch = winchHeadModule.connectedWinch; return; } } } } } }