public static PointersActivity Get()
        {
            if (instance == null)
            {
                instance = new PointersActivity();
            }

            return(instance);
        }
示例#2
0
 private void UpdatePointerInteractionState(PointersActivity pointersActivity, NativeList <Entity> uiControls)
 {
     for (int i = 0; i < uiControls.Length; i++)
     {
         var control     = uiControls[i];
         var interaction = EntityManager.GetComponentData <PointerInteraction>(control);
         interaction.down = pointersActivity.IsPressed(control);
         interaction.over = pointersActivity.IsHover(control);
         EntityManager.SetComponentData(control, interaction);
     }
 }
示例#3
0
        protected override void OnUpdate()
        {
            var uiControls = new NativeList <Entity>(Allocator.Temp);

            GetInteractiveControlsSorted(ref uiControls);

            var pointers = PointerStateUtil.GetPointersState(input);

            ClearClickedState(uiControls);

            var pointersActivity = PointersActivity.Get();

            pointersActivity.ClearInvalidControls(EntityManager);

            for (int i = 0; i < pointers.Length; i++)
            {
                var pointer = pointers[i];

                float3 worldPoint          = new float3(pointer.pos.x, pointer.pos.y, 0.0f);
                var    pressedControl      = pointersActivity.GetPressedControl(pointer.id);
                var    hoverControl        = pointersActivity.GetHoverControl(pointer.id);
                var    controlUnderPointer = GetControlUnderPointer(uiControls, pointer.pos);

                if (pointer.down)
                {
                    pointersActivity.SetPressed(pointer.id, controlUnderPointer);
                    if (hoverControl != Entity.Null)
                    {
                        pointersActivity.ClearHover(pointer.id);
                    }
                    pointersActivity.SetHover(pointer.id, controlUnderPointer);
                }
                else if (pointer.up)
                {
                    if (controlUnderPointer != Entity.Null && controlUnderPointer == pressedControl &&
                        pointersActivity.GetPressCount(controlUnderPointer) == 1)
                    {
                        var interaction = EntityManager.GetComponentData <PointerInteraction>(controlUnderPointer);
                        interaction.clicked = true;
                        EntityManager.SetComponentData(controlUnderPointer, interaction);
                    }
                    pointersActivity.ClearPressed(pointer.id);
                    if (pointer.willGone)
                    {
                        pointersActivity.ClearHover(pointer.id);
                    }
                }
                else if (pointer.cancelled)
                {
                    pointersActivity.ClearPressed(pointer.id);
                    pointersActivity.ClearHover(pointer.id);
                }
                else
                {
                    if (hoverControl != controlUnderPointer)
                    {
                        pointersActivity.SetHover(pointer.id, controlUnderPointer);
                    }
                }
            }

            pointers.Dispose();
            UpdatePointerInteractionState(pointersActivity, uiControls);
            uiControls.Dispose();
        }