Esempio n. 1
0
 private void InitDragAction(DragAction dragAction, GameObject target, ClickAction mouseActionFallback)
 {
     dragIniting             = true;
     this.dragAction         = dragAction;
     dragInitScreenPos       = Input.mousePosition;
     dragStartDist           = target is null ? 1 : Vector3.Distance(camera.transform.position, target.transform.position);
     dragTarget              = target;
     dragClickActionFallback = mouseActionFallback;
 }
Esempio n. 2
0
        private bool HandleDrag()
        {
            if (dragAction is null)
            {
                return(false);
            }

            if (dragIniting)
            {
                // Cancel if releases before starting drag
                if (!Input.GetKey(dragAction.specifiers.HasFlag(HotkeySpecifier.Secondary) ? secondaryKey : primaryKey))
                {
                    dragAction = null;

                    if (dragClickActionFallback && dragClickActionFallback.validate(dragTarget))
                    {
                        ExecuteClickAction(dragClickActionFallback, dragTarget);
                    }
                    return(false);
                }

                // Check if enough movement
                var dragDist = Vector2.Distance(dragInitScreenPos, Input.mousePosition);
                if (dragDist < minDragDist)
                {
                    return(true);
                }

                dragIniting = false;
                dragAction.start(dragTarget, GetDragPosition());
            }

            // End if released
            if (!Input.GetKey(dragAction.specifiers.HasFlag(HotkeySpecifier.Secondary) ? secondaryKey : primaryKey))
            {
                dragAction.end(dragTarget, GetDragPosition());
                if (!dragAction.specifiers.HasFlag(HotkeySpecifier.Persistent))
                {
                    _actions.Remove(dragAction);
                }
                dragAction = null;
                return(false);
            }

            dragAction.drag(dragTarget, GetDragPosition());


            return(true);

            Vector3 GetDragPosition() => camera.transform.position + camera.ScreenPointToRay(Input.mousePosition).direction *dragStartDist;
        }