private void OnPointerState(KISAddonPointer.PointerTarget pTarget, KISAddonPointer.PointerState pState, Part hoverPart, AttachNode hoverNode)
 {
     if (pState == KISAddonPointer.PointerState.OnMouseEnterNode)
     {
         if (pTarget == KISAddonPointer.PointerTarget.PartMount)
         {
             string keyAnchor = "[" + GameSettings.Editor_toggleSymMethod.name + "]";
             KISAddonCursor.CursorEnable("KIS/Textures/mount", "Mount", "(Press " + keyAnchor + " to change node, [Escape] to cancel)");
         }
         if (pTarget == KISAddonPointer.PointerTarget.PartNode)
         {
             pointerMode = pointerMode;
         }
     }
     if (pState == KISAddonPointer.PointerState.OnMouseExitNode || pState == KISAddonPointer.PointerState.OnChangeAttachNode)
     {
         pointerMode = pointerMode;
     }
 }
        private void OnPointerAction(KISAddonPointer.PointerTarget pointerTarget, Vector3 pos, Quaternion rot, Part tgtPart, string srcAttachNodeID = null, AttachNode tgtAttachNode = null)
        {
            if (pointerTarget == KISAddonPointer.PointerTarget.PartMount)
            {
                if (movingPart)
                {
                    MoveAttach(tgtPart, pos, rot, srcAttachNodeID, tgtAttachNode);
                }
                else
                {
                    CreateAttach(tgtPart, pos, rot, srcAttachNodeID, tgtAttachNode);
                }
                ModuleKISPartMount pMount = tgtPart.GetComponent <ModuleKISPartMount>();
                if (pMount)
                {
                    pMount.sndFxStore.audio.Play();
                }
            }

            if (pointerTarget == KISAddonPointer.PointerTarget.Part ||
                pointerTarget == KISAddonPointer.PointerTarget.PartNode ||
                pointerTarget == KISAddonPointer.PointerTarget.Static ||
                pointerTarget == KISAddonPointer.PointerTarget.KerbalEva)
            {
                if (pointerMode == PointerMode.Drop)
                {
                    if (movingPart)
                    {
                        MoveDrop(tgtPart, pos, rot);
                    }
                    else
                    {
                        CreateDrop(tgtPart, pos, rot);
                    }
                }
                if (pointerMode == PointerMode.Attach)
                {
                    if (movingPart)
                    {
                        MoveAttach(tgtPart, pos, rot, srcAttachNodeID, tgtAttachNode);
                    }
                    else
                    {
                        CreateAttach(tgtPart, pos, rot, srcAttachNodeID, tgtAttachNode);
                    }
                    // sound
                    ModuleKISPickup modulePickup = GetActivePickupNearest(pos);
                    if (tgtPart)
                    {
                        if (modulePickup)
                        {
                            AudioSource.PlayClipAtPoint(GameDatabase.Instance.GetAudioClip(modulePickup.attachPartSndPath), pos);
                        }
                    }
                }
            }
            draggedItem = null;
            draggedPart = null;
            movingPart  = null;
            KISAddonCursor.CursorDefault();
        }
 // apply the screw/weld property
 public override void OnAttachToolUsed(Part srcPart, Part tgtPart, KISAttachType moveType, KISAddonPointer.PointerTarget pointerTarget)
 {
     base.OnAttachToolUsed(srcPart, tgtPart, moveType, pointerTarget);
     //Debug.Log("OnItemMove2 begin" + (srcPart == null ? "null" : srcPart.name) + " => " +
     //    (tgtPart == null ? "null" : tgtPart.name) + ", " + moveType + ", " + pointerTarget);
     //set welded if needed
     if ((moveType == KISAttachType.ATTACH) &&
         srcPart.Modules.Contains("ModuleAttachMode")
         )
     {
         ModuleAttachMode mkpam = srcPart.Modules["ModuleAttachMode"] as ModuleAttachMode;
         mkpam.isWelded = isWeldingTool;
         //Debug.Log("OnItemMove2 " + isWeldingTool);
     }
 }