public static PointersActivity Get() { if (instance == null) { instance = new PointersActivity(); } return(instance); }
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); } }
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(); }