Example #1
0
    private void Update()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << Layer.SELECTABLE_GAME_OBJECT))
        {
            if (hit.collider)
            {
                var eventArgs = new EntityEventArgs(hit.collider.gameObject);
                if (Input.GetMouseButtonDown(0))
                {
                    OnSelectedEntityChanged?.Invoke(this, eventArgs);
                }

                if (entityArgs is null || !entityArgs.Equals(eventArgs))
                {
                    entityArgs = eventArgs;
                    OnHoverEntityEnter?.Invoke(this, entityArgs);
                }
            }
        }
        else
        {
            if (entityArgs != null)
            {
                OnHoverEntityExit?.Invoke(this, entityArgs);
                entityArgs = null;
            }
        }
    }