Esempio n. 1
0
        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;
                    }
                }
            }
        }
Esempio n. 2
0
        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;
                            }
                        }
                    }
                }
            }
        }