Example #1
0
 // Use this for initialization
 public virtual void Start()
 {
     stateLeft                  = STATELEFT.IDLE;
     fTimeDownDelay             = 0.2f;
     fTimeDoubleDelay           = 0.3f;
     fMinDistDrag               = 1.0f;
     Physics.queriesHitTriggers = true;
 }
Example #2
0
    public void OnLeftDown()
    {
        bDown     = true;
        fTimeDown = 0.0f;
        v3Down    = LibView.GetMouseLocation();

        switch (stateLeft)
        {
        case STATELEFT.IDLE:
            stateLeft = STATELEFT.PRESS;
            break;

        case STATELEFT.CLICK:
        case STATELEFT.DOUBLECLICK:
            stateLeft = STATELEFT.DOUBLEPRESS;
            break;
        }
    }
Example #3
0
    public void OnLeftUp()
    {
        bDown   = false;
        bHeld   = false;
        v3Down  = Vector3.zero;
        fTimeUp = 0.0f;

        switch (stateLeft)
        {
        case STATELEFT.PRESS:
            stateLeft = STATELEFT.CLICK;

            onMouseClick();
            break;

        case STATELEFT.DOUBLEPRESS:
            stateLeft = STATELEFT.DOUBLECLICK;

            onMouseDoubleClick();
            break;

        case STATELEFT.HELD:
            stateLeft = STATELEFT.IDLE;

            onMouseStopHold();
            break;

        case STATELEFT.DRAG:
            stateLeft = STATELEFT.IDLE;

            // For dragging, send a notification that dragging and holding has stopped
            onMouseStopHold();
            onMouseStopDrag();
            break;
        }
    }
Example #4
0
    public virtual void Update()
    {
        if (bDown)
        {
            //Note that this uses the real Time.deltaTime as opposed to the ContTime.fDeltaTime
            fTimeDown += Time.deltaTime;
        }
        else
        {
            fTimeUp += Time.deltaTime;
        }

        // Handle time related checks
        switch (stateLeft)
        {
        case STATELEFT.PRESS:
        case STATELEFT.DOUBLEPRESS:
            // Check if it's been pressed long enough to count as holding the mouse
            if (fTimeDown >= fTimeDownDelay)
            {
                bHeld     = true;
                stateLeft = STATELEFT.HELD;

                onMouseStartHold();
            }

            break;

        case STATELEFT.CLICK:
        case STATELEFT.DOUBLECLICK:
            if (fTimeUp >= fTimeDoubleDelay)
            {
                stateLeft = STATELEFT.IDLE;
            }

            break;
        }

        // Handle movement related checks
        switch (stateLeft)
        {
        case STATELEFT.PRESS:
        case STATELEFT.DOUBLEPRESS:
        case STATELEFT.HELD:
            // Check if the mouse has moved far enough to count as dragging
            if (Vector3.Distance(v3Down, LibView.GetMouseLocation()) >= fMinDistDrag)
            {
                stateLeft = STATELEFT.DRAG;

                if (stateLeft != STATELEFT.HELD)
                {
                    onMouseStartHold();
                }
                onMouseStartDrag();
            }

            break;
        }

        if (stateLeft == STATELEFT.DRAG)
        {
            // Check if we've dragged off of our object then released on another object
            if (Input.GetMouseButtonUp(0))
            {
                GameObject goReleasedOver = LibView.GetObjectUnderMouse();
                if (this.gameObject != goReleasedOver)
                {
                    // Then we've released the mouse over a new object after dragging
                    onMouseReleaseOther(goReleasedOver);

                    OnLeftUp();
                }
                //Otherwise we've released the mouse over ourselves, so we'll catch this with StopDrag
            }
        }
    }