using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; /// /// 设计输入模块 /// public class UIInputDesign : ModuleUIInput { private bool isDownMouseLeft; private bool isDownMouseRight; private bool isDownMouseMiddle; private UIInputDesignUnit leftInputUnit; private UIInputDesignUnit rightInputUnit; private UIInputDesignUnit middleInputUnit; private UIInputDesignUnit scrollInputUnit; /// 设计视图相机模块 protected ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign; public override UIInputDesignUnit Current => leftInputUnit; public override event Action OnChangeInput; public override void ChangeInput(UIInputDesignUnit input) { leftInputUnit = input; OnChangeInput?.Invoke(input); } protected override void Awake() { ModuleCore.UIInputDesign = this; rightInputUnit = new IDesignMobile(); middleInputUnit = new IDesignScaleCamera(); scrollInputUnit = new IDesignScaleCamera(); } public override void Binding(VisualElement element) { element.RegisterCallback(MouseDown); element.RegisterCallback(MouseMove); element.RegisterCallback(MouseRelease); element.RegisterCallback(MouseRelease); element.RegisterCallback(ScrollWheel); } private void MouseDown(MouseDownEvent evt) { DataUIMouseInput data = CreateData(evt.localMousePosition, 0); if (evt.button == 0) { leftInputUnit.MouseDown(data); isDownMouseLeft = true; } if (evt.button == 1) { rightInputUnit.MouseDown(data); isDownMouseRight = true; } if (evt.button == 2) { middleInputUnit.MouseDown(data); isDownMouseMiddle = true; } } private void MouseMove(MouseMoveEvent evt) { DataUIMouseInput data = CreateData(evt.localMousePosition, 0); if (isDownMouseLeft) { leftInputUnit.MouseDrag(data); } if (isDownMouseRight) { rightInputUnit.MouseDrag(data); } if (isDownMouseMiddle) { middleInputUnit.MouseDrag(data); } if (evt.button == 0) { leftInputUnit.MouseMove(data); } if (evt.button == 1) { rightInputUnit.MouseMove(data); } if (evt.button == 2) { middleInputUnit.MouseMove(data); } } private void MouseRelease(MouseUpEvent evt) { DataUIMouseInput data = CreateData(evt.localMousePosition, 0); leftInputUnit.MouseRelease(data); isDownMouseLeft = false; rightInputUnit.MouseRelease(data); isDownMouseRight = false; middleInputUnit.MouseRelease(data); isDownMouseMiddle = false; } private void MouseRelease(MouseOutEvent evt) { DataUIMouseInput data = CreateData(evt.localMousePosition, 0); leftInputUnit.MouseRelease(data); isDownMouseLeft = false; rightInputUnit.MouseRelease(data); isDownMouseRight = false; middleInputUnit.MouseRelease(data); isDownMouseMiddle = false; } private void ScrollWheel(WheelEvent evt) { DataUIMouseInput data = CreateData(evt.localMousePosition, evt.delta.y); scrollInputUnit.ScrollWheel(data); } private DataUIMouseInput CreateData(Vector2 localMousePosition, float scrollWheel) { DataUIMouseInput data = new DataUIMouseInput(); data.ScrollWheel = scrollWheel; data.ViewPosition = ViewCamera.ScreenToViewPosition(localMousePosition); data.WorldPosition = ViewCamera.ScreenToWorldPosition(localMousePosition); data.ScreenPosition = localMousePosition; return data; } } public abstract class UIInputDesignUnit { /// 核心模块 protected virtual ModuleCore ModuleCore => ModuleCore.I; /// 设计视图相机模块 protected ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign; /// 按下鼠标 public virtual void MouseDown(DataUIMouseInput data) { } /// 拖拽鼠标 public virtual void MouseDrag(DataUIMouseInput data) { } /// 移动鼠标 public virtual void MouseMove(DataUIMouseInput data) { } /// 释放鼠标 public virtual void MouseRelease(DataUIMouseInput data) { } /// 鼠标滚轮 public virtual void ScrollWheel(DataUIMouseInput data) { } }