2D-Platformer/Assets/Scripts/UI/WindowDraggingSystem.cs
2022-02-12 12:53:50 +02:00

58 lines
No EOL
1.6 KiB
C#

using Markers;
using UI;
using Unity.Entities;
using UnityEngine;
using Zenject;
namespace Events
{
public class WindowDraggingSystem : ComponentSystem
{
[Inject] private readonly Camera camera;
protected override void OnUpdate()
{
Entities.ForEach(
(
Entity entity,
RectTransform transform,
ref EnabledComponentData enabled,
ref WindowComponentData window,
ref WindowDragEventData e) =>
{
RectTransformUtility.ScreenPointToLocalPointInRectangle(
(RectTransform)transform.parent,
Input.mousePosition,
camera,
out var localMousePos);
var mouseDelta = localMousePos - e.LastMousePos;
e.LastMousePos = localMousePos;
transform.anchoredPosition += mouseDelta * 0.5f;
if (!Input.GetMouseButton(0))
{
PostUpdateCommands.RemoveComponent<WindowDragEventData>(entity);
}
});
Entities.WithAllReadOnly<RectTransform>()
.WithNone<WindowDragEventData>()
.ForEach(
(Entity entity, WindowButtonPropertiesData windowProperties) =>
{
var transform = EntityManager.GetComponentObject<RectTransform>(entity);
if (RectTransformUtility.RectangleContainsScreenPoint(windowProperties.DragArea, Input.mousePosition) &&
Input.GetMouseButton(0))
{
RectTransformUtility.ScreenPointToLocalPointInRectangle(
(RectTransform)transform.parent,
Input.mousePosition,
camera,
out var localMousePos);
PostUpdateCommands.AddComponent(entity, new WindowDragEventData { LastMousePos = localMousePos });
}
});
}
}
}