private void Pickup() { icon = new KIS_IconViewer(draggedPart, draggedIconResolution); KISAddonCursor.StartPartDetection(); grabActive = false; KISAddonCursor.CursorDisable(); if (HighLogic.LoadedSceneIsFlight) { InputLockManager.SetControlLock(ControlTypes.VESSEL_SWITCHING, "KISpickup"); // Disable jetpack mouse control (workaround as SetControlLock didn't have any effect on this) KerbalEVA Keva = FlightGlobals.ActiveVessel.rootPart.GetComponent <KerbalEVA>(); if (Keva) { if (Keva.JetpackDeployed) { Keva.JetpackDeployed = false; jetpackLock = true; KIS_Shared.DebugLog("Jetpack mouse input disabled"); } } } }
void OnMouseGrabEnterPart(Part part) { if (!grabActive) { return; } grabOk = false; if (!HighLogic.LoadedSceneIsFlight) { return; } if (KISAddonPointer.isRunning) { return; } if (hoverInventoryGui()) { return; } if (draggedPart == part) { return; } ModuleKISPartDrag pDrag = part.GetComponent <ModuleKISPartDrag>(); ModuleKISPartMount parentMount = null; if (part.parent) { parentMount = part.parent.GetComponent <ModuleKISPartMount>(); } ModuleKISItem item = part.GetComponent <ModuleKISItem>(); // Drag part over another one if possible (ex : mount) if (draggedPart && pDrag) { KISAddonCursor.CursorEnable(pDrag.dragIconPath, pDrag.dragText, '(' + pDrag.dragText2 + ')'); return; } if (draggedPart) { KISAddonCursor.CursorDisable(); return; } // Do nothing if part is EVA if (part.vessel.isEVA) { return; } // Check part distance if (!HasActivePickupInRange(part)) { KISAddonCursor.CursorEnable("KIS/Textures/tooFar", "Too far", "(Move closer to the part)"); return; } // Check part mass float pMass = (part.mass + part.GetResourceMass()); float pickupMaxMass = GetAllPickupMaxMassInRange(part); if (pMass > pickupMaxMass) { KISAddonCursor.CursorEnable("KIS/Textures/tooHeavy", "Too heavy", "(Bring more kerbal [" + pMass + " > " + pickupMaxMass + ")"); return; } // Check if part can be detached and grabbed if (!parentMount) { if (part.children.Count > 0 || part.parent) { //Part with a child or a parent if (item) { if (item.allowPartAttach == 0) { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Can't grab", "(This part can't be detached)"); return; } else if (item.allowPartAttach == 2) { ModuleKISPickup pickupModule = GetActivePickupNearest(part, canPartAttachOnly: true); if (!pickupModule) { if (FlightGlobals.ActiveVessel.isEVA) { KISAddonCursor.CursorEnable("KIS/Textures/needtool", "Tool needed", "(This part can't be detached without a tool)"); return; } else { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Not supported", "(Detach function is not supported on this part)"); return; } } } } else { ModuleKISPickup pickupModule = GetActivePickupNearest(part, canPartAttachOnly: true); if (!pickupModule) { if (FlightGlobals.ActiveVessel.isEVA) { KISAddonCursor.CursorEnable("KIS/Textures/needtool", "Tool needed", "(This part can't be detached without a tool)"); return; } else { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Not supported", "(Detach function is not supported on this part)"); return; } } } } else { // Part without childs and parent if (item) { if (item.staticAttached && item.allowStaticAttach == 2) { ModuleKISPickup pickupModule = GetActivePickupNearest(part, canStaticAttachOnly: true); if (!pickupModule) { if (FlightGlobals.ActiveVessel.isEVA) { KISAddonCursor.CursorEnable("KIS/Textures/needtool", "Tool needed", "(This part can't be detached from the ground without a tool)"); return; } else { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Not supported", "(Detach from ground function is not supported on this part)"); return; } } } } } } // check number of part attached if (part.parent) { if (part.children.Count > 0) { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Can't grab", "(" + (part.children.Count + 1) + " parts is attached to it)"); return; } } else { if (part.children.Count > 1) { KISAddonCursor.CursorEnable("KIS/Textures/forbidden", "Can't grab", "(" + part.children.Count + " parts is attached to it)"); return; } } // Grab icon if (part.children.Count > 0 || part.parent) { KISAddonCursor.CursorEnable("KIS/Textures/grabOk", "Detach & Grab", '(' + part.partInfo.title + ')'); } else { KISAddonCursor.CursorEnable("KIS/Textures/grabOk", "Grab", '(' + part.partInfo.title + ')'); } part.SetHighlight(true, false); grabOk = true; }