public AdnGestureManager(
            UIElement window, 
            AdnRenderer renderer)
        {
            _window = window;

            _renderer = renderer;

            _pointerMode = PointerMode.kIdleMode;

            _accumulator = new ValueAccumulator(
                -30.0 * 1000.0 / 5.0,
                -100.0 * 1000.0 / 5.0,
                -5.0 * 1000.0 / 5.0);

            _pointers = new Dictionary<uint, PointerPoint>();

            window.PointerMoved += OnPointerMoved;
            window.PointerPressed += OnPointerPressed;
            window.PointerReleased += OnPointerReleased;
            window.PointerWheelChanged += OnPointerWheelChanged;

            _gr = new GestureRecognizer();

            _gr.GestureSettings =
              GestureSettings.Tap |
              GestureSettings.Drag |
              GestureSettings.DoubleTap |
              GestureSettings.ManipulationScale;

            _gr.Tapped += OnTapped;
            _gr.ManipulationStarted += OnManipulationStarted;
            _gr.ManipulationUpdated += OnManipulationUpdated;
            _gr.ManipulationCompleted += OnManipulationCompleted;
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 public PointerModeAndResponse(PointerMode mode, EnabledEvent enabled, DisabledEvent disabled, ClickEvent clicked)
 {
     this.mode     = mode;
     this.enabled  = enabled;
     this.disabled = disabled;
     this.clicked  = clicked;
 }
Beispiel #3
0
 public TouchPointer( IntPtr id, Vector2 position, PointerMode mode )
     : this()
 {
     Id = id;
     Position = position;
     Mode = mode;
 }
Beispiel #4
0
 public void Deserialize(byte[] bytes, ref int offset)
 {
     this.username     = ByteSerializer.DeserializeString(bytes, ref offset);
     this.position     = ByteSerializer.DeserializeVector3(bytes, ref offset);
     this.pointerMode  = (PointerMode)ByteSerializer.DeserializeInt(bytes, ref offset);
     this.pointerColor = ByteSerializer.DeserializeColor(bytes, ref offset);
 }
    private void Start()
    {
        // Convert the struct array into a dictionary, with the keywords and the methods as the values.
        // This helps easily link the pointer mode to the UnityEvent to be invoked.
        int pointerModesCount = pointerModes.Length;

        for (int index = 0; index < pointerModesCount; index++)
        {
            PointerModeAndResponse pointerModeAndResponse = pointerModes[index];
            if (_pointerResponses.ContainsKey(pointerModeAndResponse.Mode))
            {
                Debug.LogFormat(LogType.Error, LogOption.NoStacktrace, null, $"Duplicate pointer mode \'{pointerModeAndResponse.Mode}\' specified in \'{gameObject.name}\'.");
            }
            else
            {
                _pointerResponses.Add(pointerModeAndResponse.Mode, pointerModeAndResponse);
            }
        }

        // Listen for mode changes
        AppServices.PointerStateService.ModeChanged += PointerStateService_ModeChanged;

        // Notify listeners of initial deactivated state
        for (int i = 0; i < (int)PointerMode.Count; i++)
        {
            PointerMode mode = (PointerMode)i;
            if (mode != AppServices.PointerStateService.Mode)
            {
                HandleDisabledMode(mode, null);
            }
        }

        // Notify listeners of initial activated state
        HandleEnabledMode(AppServices.PointerStateService.Mode, AppServices.PointerStateService.ModeData);
    }
Beispiel #6
0
 public void Drop(Part part, Part fromPart)
 {
     if (!KISAddonPointer.isRunning)
     {
         ModuleKISPickup pickupModule = GetActivePickupNearest(fromPart);
         if (pickupModule)
         {
             KISAddonPointer.allowPart  = KISAddonPointer.allowEva = KISAddonPointer.allowMount = KISAddonPointer.allowStatic = true;
             KISAddonPointer.allowStack = pickupModule.allowPartStack;
             KISAddonPointer.maxDist    = pickupModule.maxDistance;
             if (draggedItem != null)
             {
                 KISAddonPointer.scale = draggedItem.GetScale();
             }
             else
             {
                 KISAddonPointer.scale = 1;
             }
             KISAddonPointer.StartPointer(part, OnPointerAction, OnPointerState, pickupModule.transform);
             pointerMode = PointerMode.Drop;
         }
         else
         {
             KIS_Shared.DebugError("No active pickup nearest !");
         }
     }
     KISAddonCursor.StopPartDetection();
 }
Beispiel #7
0
        public IType?GetType(string name, PointerMode pointerMode = PointerMode.NotAPointer)
        {
            if (!_nameToValueType.TryGetValue(name, out IValueType valueType))
            {
                return(null);
            }

            return(GetType(valueType, pointerMode));
        }
    private void HandleDisabledMode(PointerMode mode, object modeData)
    {
        PointerModeAndResponse response = default;

        if (_pointerResponses.TryGetValue(mode, out response))
        {
            response.Disabled?.Invoke(mode, modeData);
        }
    }
Beispiel #9
0
 public readonly IType?GetTypeForPointerMode(PointerMode mode)
 {
     return(mode switch {
         PointerMode.NotAPointer => Value,
         PointerMode.Shared => SharedPointer,
         PointerMode.Weak => WeakPointer,
         PointerMode.Owned => OwnedPointer,
         PointerMode.Borrowed => BorrowedPointer,
         _ => null
     });
Beispiel #10
0
 public void DeselectSkill()
 {
     if (LeftButtons[selectedButtonIndex].currentState != UI_ButtonController.ButtonState.CoolDown)
     {
         LeftButtons[selectedButtonIndex].SetState(UI_ButtonController.ButtonState.Active);
     }
     CurrentPointerMode = PointerMode.Default;
     Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
     CurrentSelectedSkill = null;
 }
Beispiel #11
0
 public void SetPointer(PointerMode pointerMode)
 {
     if (_pointers.TryGetValue(pointerMode, out PointerData pointerData))
     {
         Cursor.SetCursor(pointerData.Texture, pointerData.Hotspot, CursorMode.Auto);
     }
     else
     {
         throw new UnityException("This pointer mode couldn't be found under Resources/Scriptable Objects/Pointers");
     }
 }
Beispiel #12
0
    public void SetPointerMode(PointerMode mode)
    {
        pointerMode = mode;
        switch (mode)
        {
        case PointerMode.MOVE:
            MenuManager.instance.MenuButtonClick((int)MenuManager.MenuType.NONE);
            break;

        case PointerMode.SELECT:
            ShowSelectPointer();
            break;
        }
    }
Beispiel #13
0
 public static void StartPointer(Part partToMoveAndAttach, PointerMode mode, bool partIsValid, bool evaIsValid, bool staticIsValid, float maxDistance, Transform from, bool sendMsgOnly)
 {
     if (!running)
     {
         KAS_Shared.DebugLog("StartPointer(pointer)");
         customRot       = Vector3.zero;
         allowPart       = partIsValid;
         allowEva        = evaIsValid;
         allowStatic     = staticIsValid;
         msgOnly         = sendMsgOnly;
         partToAttach    = partToMoveAndAttach;
         maxDist         = maxDistance;
         pointerMode     = mode;
         sourceTransform = from;
         ShowAttachHelpMsg();
         running = true;
     }
 }
Beispiel #14
0
 public static void StartPointer(Part partToMoveAndAttach, PointerMode mode, bool partIsValid, bool evaIsValid, bool staticIsValid, float maxDistance, Transform from, bool sendMsgOnly)
 {
     if (!running)
     {
         KAS_Shared.DebugLog("StartPointer(pointer)");
         customRot = Vector3.zero;
         allowPart = partIsValid;
         allowEva = evaIsValid;
         allowStatic = staticIsValid;
         msgOnly = sendMsgOnly;
         partToAttach = partToMoveAndAttach;
         maxDist = maxDistance;
         pointerMode = mode;
         sourceTransform = from;
         ShowAttachHelpMsg();
         running = true;             
     }
 }
Beispiel #15
0
        private List <BaseComponent> clipboard;     // буфер обмена, содержащий скопированные компоненты


        /// <summary>
        /// Конструктор
        /// </summary>
        public Editor(CompManager compManager, Log log)
        {
            this.compManager = compManager ?? throw new ArgumentNullException("compManager");
            this.log         = log ?? throw new ArgumentNullException("log");
            changes          = new List <Change>();
            changeStampCntr  = 0;
            modified         = false;
            pointerMode      = PointerMode.Select;
            selComponents    = new List <BaseComponent>();
            clipboard        = new List <BaseComponent>();

            EditorID             = GetRandomString(EditorIDLength);
            SchemeView           = null;
            FileName             = "";
            History              = new History(log);
            PasteSpecialParams   = new PasteSpecialParams();
            NewComponentTypeName = "";
        }
Beispiel #16
0
        public void OnMouseDown(UserControl canvas, MouseEventArgs e)
        {
            MyCanvas myCanvas = canvas as MyCanvas;
            if (myCanvas != null)
            {
                int count = myCanvas.ShapeList.Shapes.Count;
                bool found = false;
                for (int i = count - 1; i >= 0; i--) // перебираем все отрисованные фигуры
                {
                    int number = myCanvas.ShapeList.Shapes[i].ContainsPoint(e.Location);
                    if (number == 0)    // если есть попадание клика в фигуру
                    {                   // выделяем  фигуру
                        myCanvas.ShapeList.DeselectAll();
                        startPoint = e.Location; // запоминаем координаты клика
                        selectedShape = myCanvas.ShapeList.Shapes[i]; // запоминаем выделенную фигуру
                        selectedShape.IsSelected = true; // помечаем фигуру как выделенную
                        found = true;
                        pointerMode = PointerMode.Move; // переключаем режим выделения на перемещение
                        break;
                    }

                    if(number > 0)
                    {
                        myCanvas.ShapeList.DeselectAll();
                        startPoint = e.Location;
                        keyPointNumber = number; // запоминаем номер опорной точки выделенной фигуры
                        selectedShape = myCanvas.ShapeList.Shapes[i];
                        selectedShape.IsSelected = true;
                        found = true;
                        pointerMode = PointerMode.Resize; // переключаем режим выделения на изменение размера
                        break;
                    }
                }

                if (found == false) // если клик не попал ни в одну фигуру
                {
                    myCanvas.ShapeList.DeselectAll(); // снимаем выделение со всех фигур
                    selectedShape = null;
                    pointerMode = PointerMode.None; // обнуляем режим выделения
                }

            }
            myCanvas.Refresh();
        }
Beispiel #17
0
 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;
     }
 }
Beispiel #18
0
        public IType GetType(IValueType valueType, PointerMode pointerMode)
        {
            if (!_valueTypes.TryGetValue(valueType, out TypeGroup typeGroup))
            {
                throw new ArgumentException("Value type is not registered", nameof(valueType));
            }

            IType?type = typeGroup.GetTypeForPointerMode(pointerMode);

            if (type == null)
            {
                IPointerType pointerType = new PointerTypeImpl(typeGroup.Value, pointerMode);
                type = pointerType;
                typeGroup.SetTypeForPointerMode(pointerMode, pointerType);
                _valueTypes[valueType] = typeGroup;
            }

            return(type);
        }
Beispiel #19
0
 public void SelectSkill(int skillID)
 {
     if (CurrentPointerMode != PointerMode.Default)
     {
         return;
     }
     Debug.Log("Selected skill " + skillID);
     AudioManager.PlaySound("click");
     if (skillID == 6)
     {
         GameManager.Instance.SkillList[skillID].ApplyEffects();
     }
     else
     {
         selectedButtonIndex = skillID;
         CurrentPointerMode  = PointerMode.Targeting;
         Cursor.SetCursor(TargetingCursorTexture, Vector2.zero, CursorMode.Auto);
         CurrentSelectedSkill = GameManager.Instance.SkillList[skillID];
     }
 }
        void OnPointerPressed(
            object sender,
            PointerRoutedEventArgs e)
        {
            _gr.ProcessDownEvent(
                e.GetCurrentPoint(_window));

            PointerPoint pointer =
                e.GetCurrentPoint(_window);

            switch (_pointerMode)
            {
                // First pointer being pressed
                case PointerMode.kIdleMode:

                    // No drag so far
                    _dragDistance = 0.0;

                    _pointers.Add(
                        pointer.PointerId,
                        pointer);

                    // Enter drag mode
                    _pointerMode = PointerMode.kBeginDragMode;
                    break;

                // Second finger being pressed
                case PointerMode.kBeginDragMode:
                case PointerMode.kDragMode:

                    if (_pointers.Count < 2)
                    {
                        _pointers.Add(
                            pointer.PointerId,
                            pointer);

                        _pointerMode = PointerMode.kScaleMode;
                    }
                    break;

                case PointerMode.kScaleMode:
                default:
                    break;
            }
        }
Beispiel #21
0
 public void OnAddPress()
 {
     pointerMode = PointerMode.Add;
     changePanel.SetActive(false);
     modeText.text = "Mode: add.";
 }
Beispiel #22
0
 public void OnSelectPress()
 {
     pointerMode = PointerMode.Select;
     changePanel.SetActive(true);
     modeText.text = "Mode: select.";
 }
 public static extern CublasStatus cublasSetPointerMode_v2(CudaBlasHandle handle, PointerMode mode);
Beispiel #24
0
 public void Drop(Part part, Part fromPart)
 {
     if (!KISAddonPointer.isRunning)
     {
         ModuleKISPickup pickupModule = GetActivePickupNearest(fromPart);
         if (pickupModule)
         {
             KISAddonPointer.allowPart = KISAddonPointer.allowEva = KISAddonPointer.allowMount = KISAddonPointer.allowStatic = true;
             KISAddonPointer.allowStack = pickupModule.allowPartStack;
             KISAddonPointer.maxDist = pickupModule.maxDistance;
             if (draggedItem != null)
             {
                 KISAddonPointer.scale = draggedItem.GetScale();
             }
             else
             {
                 KISAddonPointer.scale = 1;
             }
             KISAddonPointer.StartPointer(part, OnPointerAction, OnPointerState, pickupModule.transform);
             pointerMode = PointerMode.Drop;
         }
         else
         {
             KIS_Shared.DebugError("No active pickup nearest !");
         }
     }
     KISAddonCursor.StopPartDetection();
 }
Beispiel #25
0
        /// <summary>Handles part drop action.</summary>
        /// <param name="part">A part being grabbed. It's either a real part or prefab depending on the
        /// source of the action.</param>
        /// <param name="fromPart">A part that was the source of the draggign action. If a world's part is
        /// grabbed than it will be that part. If part is being dragged from inventory then this parameter
        /// is an inventory reference.</param>
        public void Drop(Part part, Part fromPart)
        {
            grabbedPart = part;
            Logger.logInfo("End pickup of {0} from part: {1}", part, fromPart);
            if (!KISAddonPointer.isRunning) {
              var pickupModule = GetActivePickupNearest(fromPart);
              int unusedPartsCount;
              if (pickupModule && CheckMass(fromPart.transform.position, part,
                                    out unusedPartsCount, reportToConsole: true)) {
            KISAddonPointer.allowPart = true;
            KISAddonPointer.allowEva = true;
            KISAddonPointer.allowMount = true;
            KISAddonPointer.allowStatic = true;
            KISAddonPointer.allowStack = pickupModule.allowPartStack;
            KISAddonPointer.maxDist = pickupModule.maxDistance;
            KISAddonPointer.scale = draggedItem != null
            ? KIS_Shared.GetPartExternalScaleModifier(draggedItem.partNode)
            : 1;
            KISAddonPointer.StartPointer(part, OnPointerAction, OnPointerState, pickupModule.transform);

            pointerMode = pickupMode == PickupMode.Undock
            ? PointerMode.ReDock
            : PointerMode.Drop;
              }
            }
            KISAddonCursor.StopPartDetection();
        }
Beispiel #26
0
 public void DisableAttachMode()
 {
     // Skip incompatible modes.
     if (pointerMode == PointerMode.ReDock) {
       return;
     }
     // Cancelling "detach parts" mode.
     if (!KISAddonPointer.isRunning) {
       detachActive = false;
       cursorMode = CursorMode.Nothing;
       KISAddonCursor.StopPartDetection();
       KISAddonCursor.CursorDefault();
     }
     // Cancelling "attach moving part" mode.
     if (KISAddonPointer.isRunning && pointerMode == PointerMode.Attach) {
       KIS_UISoundPlayer.instance.PlayClick();
       pointerMode = KISAddonPickup.PointerMode.Drop;
     }
 }
Beispiel #27
0
        public override void OnMouseDown(DrawArea drawArea, System.Windows.Forms.MouseEventArgs e)
        {
            this.pointerMode = PointerMode.None;
            Point point = new Point(e.X, e.Y);

            //检测指针是否能够处于“改变图元尺寸”的模式(图元被选择并且在锚点内按下鼠标)
            if (drawArea.GraphicsList.Selection != null)
            {
                foreach (DrawObject o in drawArea.GraphicsList.Selection)
                {
                    int handleNumber = o.HitTest(point);             //判断点与图元之间的位置关系
                    if (handleNumber > 0)                            //点在锚点上
                    {
                        pointerMode              = PointerMode.Size; //改变图形大小
                        this.resizedObject       = o;
                        this.resizedObjectHandle = handleNumber;
                        drawArea.GraphicsList.UnselectAll();
                        o.Selected = true;
                        break;
                    }
                }
            }
            //检测指针是否能够处于“移动图元”的模式(鼠标在图元内部按下)
            if (pointerMode == PointerMode.None)
            {
                DrawObject o = null;
                for (int i = 0; i < drawArea.GraphicsList.Count; i++)
                {
                    if (drawArea.GraphicsList[i].HitTest(point) == 0)
                    {
                        o = drawArea.GraphicsList[i];//点击在图元内部
                        break;
                    }
                }
                if (o != null)
                {
                    pointerMode = PointerMode.Move;//移动图形
                    //没按Control键 并且 该图元没被选
                    if ((Control.ModifierKeys & Keys.Control) == 0 && o.Selected == false)
                    {
                        drawArea.GraphicsList.UnselectAll();
                    }

                    //选择被点击的图元
                    o.Selected      = true;
                    drawArea.Cursor = Cursors.SizeAll;
                }
                //检测指针是否能够处于“净”的模式(鼠标在图元外部按下)
                if (pointerMode == PointerMode.None)
                {
                    if ((Control.ModifierKeys & Keys.Control) == 0)
                    {
                        drawArea.GraphicsList.UnselectAll();
                    }

                    pointerMode = PointerMode.Net;
                }
                lastPoint.X      = e.X;
                lastPoint.Y      = e.Y;
                startPoint.X     = e.X;
                startPoint.Y     = e.Y;
                drawArea.Capture = true;
                drawArea.Refresh();
                //净模式下绘制可逆线
                if (pointerMode == PointerMode.Net)
                {
                    ControlPaint.DrawReversibleFrame(drawArea.RectangleToScreen(DrawRectanlge.GetNormalizedRectangle(startPoint, lastPoint)),
                                                     Color.Black, FrameStyle.Dashed);
                }
            }
        }
Beispiel #28
0
        public override void OnMouseUp(DrawArea drawArea, System.Windows.Forms.MouseEventArgs e)
        {
            if (drawArea.GraphicsList.Selection != null)
            {
                for (int i = 0; i < drawArea.GraphicsList.Selection.Count; i++)
                {
                    if (drawArea.GraphicsList.Selection[i] is DrawLine)
                    {
                        //如果线发生改变则需要判断线两端连接的结点状态以及重新进行深度优先搜索
                        DrawLine drawLine = drawArea.GraphicsList.Selection[i] as DrawLine;
                        CF.ChangeLineLink(drawArea, drawLine, e);
                    }
                    else if (drawArea.GraphicsList.Selection[i] is DrawBreak)
                    {
                        //如果是开关
                        DrawBreak drawBreak = drawArea.GraphicsList.Selection[i] as DrawBreak;
                        //根据开关开闭状态给开关对应的结点加边
                        if (drawBreak.OpenOrClose == true)
                        {
                            //给开关两端的首结点连线
                            CF.AddEdge(drawArea, drawBreak);
                        }
                        else
                        {
                            //断开开关两端的首结点连线
                            CF.ReduceEdge(drawArea, drawBreak);
                        }
                    }
                    else if (drawArea.GraphicsList.Selection[i] is DrawKnife)
                    {
                        //如果是刀闸
                        DrawKnife drawKnife = drawArea.GraphicsList.Selection[i] as DrawKnife;
                        //根据开关开闭状态给开关对应的结点加边
                        if (drawKnife.OpenOrClose == true)
                        {
                            //给开关两端的首结点连线
                            CF.AddEdge(drawArea, drawKnife);
                        }
                        else
                        {
                            //断开开关两端的首结点连线
                            CF.ReduceEdge(drawArea, drawKnife);
                        }
                    }
                }
            }
            if (drawArea.IsTest == true)
            {
                //进行测试
                CF.BeginTest(drawArea);
            }


            //空画矩形
            if (pointerMode == PointerMode.Net)
            {
                // 移除旧的矩形
                ControlPaint.DrawReversibleFrame(
                    drawArea.RectangleToScreen(DrawRectanlge.GetNormalizedRectangle(startPoint, lastPoint)),
                    Color.Black,
                    FrameStyle.Dashed);

                // 选择在矩形框中的图元
                drawArea.GraphicsList.SelectInRectangle(DrawRectanlge.GetNormalizedRectangle(startPoint, lastPoint));
                pointerMode = PointerMode.None;
            }

            if (resizedObject != null)
            {
                //改变大小之后
                resizedObject.Normalize();
                resizedObject = null;
            }
            drawArea.Capture = false;
            drawArea.Refresh();
        }
        void OnPointerMoved(
            object sender, 
            PointerRoutedEventArgs e)
        {
            _gr.ProcessMoveEvents(
                e.GetIntermediatePoints(_window));

            PointerPoint pointer =
                e.GetCurrentPoint(_window);

            if (_pointers.ContainsKey(pointer.PointerId))
                _pointers[pointer.PointerId] = pointer;

            switch (_pointerMode)
            {
                case PointerMode.kBeginDragMode:

                    _previousPointerPos =
                        pointer.Position;

                    _pointerMode = PointerMode.kDragMode;
                    break;

                case PointerMode.kDragMode:

                    double xOffset =
                        _previousPointerPos.X -
                        pointer.Position.X;

                    double yOffset =
                        _previousPointerPos.Y -
                        pointer.Position.Y;

                    _dragDistance += GetDistance(
                       _previousPointerPos,
                       pointer.Position);

                    _previousPointerPos =
                        pointer.Position;

                    _renderer.Rotate(
                        (float)xOffset,
                        (float)yOffset);

                    break;

                case PointerMode.kScaleMode:

                    var pointers =
                        _pointers.Values.ToList();

                    double dist = GetDistance(
                        ToDeviceCoordinate(pointers[0].RawPosition),
                        ToDeviceCoordinate(pointers[1].RawPosition));

                    double accZoom =
                        _accumulator.Accumulate(dist);

                    _renderer.SetZoom((float)accZoom * 5.0f / 1000.0f);

                    break;

                case PointerMode.kIdleMode:

                   Point pos = ToDeviceCoordinate(
                        pointer.RawPosition);

                    _renderer.CheckPreSelection(
                         (float)pos.X,
                         (float)pos.Y);

                    break;

                default:
                    break;
            }
        }
Beispiel #30
0
 public void EnableAttachMode()
 {
     // Skip incompatible modes.
     if (pointerMode == PointerMode.ReDock) {
       return;
     }
     // Check if pickup module is present on the active vessel.
     List<ModuleKISPickup> pickupModules =
       FlightGlobals.ActiveVessel.FindPartModulesImplementing<ModuleKISPickup>();
     if (cursorMode != CursorMode.Nothing || !pickupModules.Any()) {
       return;
     }
     // Entering "detach parts" mode.
     if (!KISAddonPointer.isRunning && !draggedPart) {
       KISAddonCursor.StartPartDetection(OnMouseDetachPartClick, OnMouseDetachEnterPart,
                                 null, OnMouseDetachExitPart);
       KISAddonCursor.CursorEnable("KIS/Textures/detach", "Detach");
       detachActive = true;
       cursorMode = CursorMode.Detach;
     }
     // Entering "attach moving part" mode.
     if (KISAddonPointer.isRunning
     && KISAddonPointer.pointerTarget != KISAddonPointer.PointerTarget.PartMount
     && pointerMode == KISAddonPickup.PointerMode.Drop) {
       if (CheckIsAttachable(grabbedPart, reportToConsole: true)) {
     KIS_UISoundPlayer.instance.PlayClick();
     pointerMode = KISAddonPickup.PointerMode.Attach;
       }
     }
 }
Beispiel #31
0
 public PointerTypeImpl(IValueType destinationType, PointerMode mode)
 {
     DestinationType = destinationType;
     Mode            = mode;
 }
        private void ShowList(SerializedProperty list)
        {
            using (new EditorGUI.IndentLevelScope())
            {
                // remove the keywords already assigned from the registered list
                var handler        = (PointerModeHandler)target;
                var availableModes = new PointerMode[0];

                if (handler.PointerModes != null && allPointerModes != null)
                {
                    availableModes = allPointerModes.Except(handler.PointerModes
                                                            .Select(PointerModeAndResponse => PointerModeAndResponse.Mode))
                                     .OrderBy(pointerMode => pointerMode.ToString())
                                     .ToArray();
                }

                // keyword rows
                int listSize = list == null ? 0 : list.arraySize;
                for (int index = 0; index < listSize; index++)
                {
                    // the element
                    SerializedProperty pointerModeAndResponseProperty = list.GetArrayElementAtIndex(index);
                    SerializedProperty modeProperty      = pointerModeAndResponseProperty.FindPropertyRelative("mode");
                    PointerMode        modePropertyValue = (PointerMode)modeProperty.enumValueIndex;

                    // draw element expander
                    GUILayout.BeginHorizontal();

                    bool elementExpanded = EditorGUILayout.PropertyField(
                        pointerModeAndResponseProperty,
                        new GUIContent(modeProperty.enumDisplayNames[(int)modePropertyValue]));

                    GUILayout.FlexibleSpace();

                    // the remove element button
                    bool elementRemoved = GUILayout.Button(RemoveButtonContent, EditorStyles.miniButton, MiniButtonWidth);

                    GUILayout.EndHorizontal();

                    if (elementRemoved)
                    {
                        list.DeleteArrayElementAtIndex(index);

                        if (index == list.arraySize)
                        {
                            EditorGUI.indentLevel--;
                            return;
                        }
                    }

                    bool invalidMode = true;
                    if (allPointerModes != null)
                    {
                        foreach (PointerMode mode in allPointerModes)
                        {
                            if (mode == modePropertyValue)
                            {
                                invalidMode = false;
                                break;
                            }
                        }
                    }

                    if (invalidMode)
                    {
                        EditorGUILayout.HelpBox("Registered mode is not recognized!", MessageType.Error);
                    }

                    if (!elementRemoved && elementExpanded)
                    {
                        PointerMode[] pointerModes = availableModes
                                                     .Concat(new[] { modePropertyValue })
                                                     .OrderBy(pointerMode => modeProperty.enumDisplayNames[(int)pointerMode])
                                                     .ToArray();

                        string[] pointerModeStrings = pointerModes
                                                      .Select(pointerMode => modeProperty.enumDisplayNames[(int)pointerMode])
                                                      .ToArray();

                        int previousSelection = ArrayUtility.IndexOf(pointerModes, modePropertyValue);
                        int currentSelection  = EditorGUILayout.Popup("Mode", previousSelection, pointerModeStrings);

                        if (currentSelection != previousSelection)
                        {
                            modeProperty.enumValueIndex = (int)pointerModes[currentSelection];
                        }

                        SerializedProperty enabledProperty = pointerModeAndResponseProperty.FindPropertyRelative("enabled");
                        EditorGUILayout.PropertyField(enabledProperty, true);

                        SerializedProperty disabledProperty = pointerModeAndResponseProperty.FindPropertyRelative("disabled");
                        EditorGUILayout.PropertyField(disabledProperty, true);

                        SerializedProperty clickedProperty = pointerModeAndResponseProperty.FindPropertyRelative("clicked");
                        EditorGUILayout.PropertyField(clickedProperty, true);
                    }
                }

                // add button row
                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.FlexibleSpace();

                    // the add element button
                    if (GUILayout.Button(AddButtonContent, EditorStyles.miniButton, MiniButtonWidth))
                    {
                        var index = list.arraySize;
                        list.InsertArrayElementAtIndex(index);
                        var elementProperty             = list.GetArrayElementAtIndex(index);
                        SerializedProperty modeProperty = elementProperty.FindPropertyRelative("mode");
                        modeProperty.enumValueIndex = (int)PointerMode.Invalid;
                    }
                }
            }
        }
        void OnPointerReleased(
           object sender,
           PointerRoutedEventArgs e)
        {
            PointerPoint pointer =
                e.GetCurrentPoint(_window);

            if (!_pointers.ContainsKey(pointer.PointerId))
                return;

            _gr.ProcessUpEvent(
                e.GetCurrentPoint(_window));

            _pointers.Remove(pointer.PointerId);

            switch (_pointerMode)
            {
                case PointerMode.kBeginDragMode:
                case PointerMode.kDragMode:

                    if (_dragDistance < 5)
                    {
                        Point pos = ToDeviceCoordinate(
                            pointer.RawPosition);

                        _renderer.CheckSelection(
                            (float)pos.X,
                            (float)pos.Y);
                    }

                    _pointerMode = PointerMode.kIdleMode;

                    break;

                case PointerMode.kScaleMode:

                    _pointerMode = PointerMode.kBeginDragMode;
                    _accumulator.SetCurrentValue(0);
                    break;

                default:
                    break;
            }
        }
Beispiel #34
0
 public TypeSpecifierParseNode(string name, PointerMode pointerMode)
 {
     Name        = name;
     PointerMode = pointerMode;
 }
Beispiel #35
0
 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;
     }
 }