Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
MultiMouse.cs
浏览该文件的文档.
1// Engine, Version=1.0.8083.41417, Culture=neutral, PublicKeyToken=null
2// Engine.Input.MultiMouse
3
4using Engine;
5using Engine.Input;
6
7public static class MultiMouse {
8 class MouseData {
9 // ReSharper disable MemberHidesStaticFromOuterClass
10 public bool IsConnected;
11
13
15
17 // ReSharper restore MemberHidesStaticFromOuterClass
18
19 public bool[] MouseButtonsDownArray = new bool[Enum.GetValues<MouseButton>().Length];
20
21 public bool[] MouseButtonsDownOnceArray = new bool[Enum.GetValues<MouseButton>().Length];
22
23 public bool[] MouseButtonsUpOnceArray = new bool[Enum.GetValues<MouseButton>().Length];
24 }
25
26 static MouseData[] _MouseData = [new(), new(), new(), new()];
27
28 public static event Action<MultiMouseEvent> MouseMove;
29
30 public static event Action<MultiMouseButtonEvent> MouseDown;
31
32 public static event Action<MultiMouseButtonEvent> MouseUp;
33
34 public static bool IsConnected(int mouseIndex) => _MouseData[mouseIndex].IsConnected;
35
36 public static Point2 MouseMovement(int mouseIndex) => _MouseData[mouseIndex].MouseMovement;
37
38 public static int MouseWheelMovement(int mouseIndex) => _MouseData[mouseIndex].MouseWheelMovement;
39
40 public static Point2 MousePosition(int mouseIndex) => _MouseData[mouseIndex].MousePosition;
41
42 public static bool IsMouseButtonDown(int mouseIndex, MouseButton mouseButton) => _MouseData[mouseIndex].MouseButtonsDownArray[(int)mouseButton];
43
44 public static bool IsMouseButtonDownOnce(int mouseIndex, MouseButton mouseButton) =>
45 _MouseData[mouseIndex].MouseButtonsDownOnceArray[(int)mouseButton];
46
47 public static bool IsMouseButtonUpOnce(int mouseIndex, MouseButton mouseButton) =>
48 _MouseData[mouseIndex].MouseButtonsUpOnceArray[(int)mouseButton];
49
50 public static void Clear() {
51 for (int i = 0; i < _MouseData.Length; i++) {
52 for (int j = 0; j < _MouseData[i].MouseButtonsDownArray.Length; j++) {
53 _MouseData[i].MouseButtonsDownArray[j] = false;
54 _MouseData[i].MouseButtonsDownOnceArray[j] = false;
55 _MouseData[i].MouseButtonsUpOnceArray[j] = false;
56 }
57 }
58 }
59
60 internal static void AfterFrame() {
61 for (int i = 0; i < _MouseData.Length; i++) {
62 for (int j = 0; j < _MouseData[i].MouseButtonsDownOnceArray.Length; j++) {
63 _MouseData[i].MouseButtonsDownOnceArray[j] = false;
64 _MouseData[i].MouseButtonsUpOnceArray[j] = false;
65 }
66 }
67 }
68
69 // ReSharper disable UnusedMember.Local
70 static void ProcessMouseDown(int mouseIndex, MouseButton mouseButton, Point2 position) {
73 MouseData obj = _MouseData[mouseIndex];
74 obj.MouseButtonsDownArray[(int)mouseButton] = true;
75 obj.MouseButtonsDownOnceArray[(int)mouseButton] = true;
76 if (MouseDown != null) {
77 MouseDown(new MultiMouseButtonEvent { MouseIndex = mouseIndex, Button = mouseButton, Position = position });
78 }
79 }
80 }
81
82 static void ProcessMouseUp(int mouseIndex, MouseButton mouseButton, Point2 position) {
85 MouseData obj = _MouseData[mouseIndex];
86 obj.MouseButtonsDownArray[(int)mouseButton] = false;
87 obj.MouseButtonsUpOnceArray[(int)mouseButton] = true;
88 if (MouseUp != null) {
89 MouseUp(new MultiMouseButtonEvent { MouseIndex = mouseIndex, Button = mouseButton, Position = position });
90 }
91 }
92 }
93
94 static void ProcessMouseMove(int mouseIndex, Point2 move) {
97 MouseData mouseData = _MouseData[mouseIndex];
98 int x = (int)Math.Round(1f * MathUtils.PowSign(move.X, 1.25f));
99 int y = (int)Math.Round(1f * MathUtils.PowSign(move.Y, 1.25f));
100 mouseData.MousePosition += new Point2(x, y);
101 mouseData.MousePosition.X = Math.Clamp(mouseData.MousePosition.X, 0, Window.Size.X - 1);
102 mouseData.MousePosition.Y = Math.Clamp(mouseData.MousePosition.Y, 0, Window.Size.Y - 1);
103 if (MouseMove != null) {
104 MouseMove(new MultiMouseEvent { MouseIndex = mouseIndex, Position = mouseData.MousePosition });
105 }
106 }
107 }
108 // ReSharper restore UnusedMember.Local
109
110 internal static void IsConnected(int mouseIndex, bool value) {
111 _MouseData[mouseIndex].IsConnected = value;
112 }
113
114 internal static void MouseMovement(int mouseIndex, Point2 value) {
115 _MouseData[mouseIndex].MouseMovement = value;
116 }
117
118 internal static void MouseWheelMovement(int mouseIndex, int value) {
119 _MouseData[mouseIndex].MouseWheelMovement = value;
120 }
121
122 internal static void Initialize() { }
123
124 internal static void Dispose() { }
125
126 internal static void BeforeFrame() { }
127}
static bool IsKeyboardVisible
static float PowSign(float x, float n)
static bool IsActive
static Point2 Size
static bool IsMouseButtonUpOnce(int mouseIndex, MouseButton mouseButton)
static bool IsConnected(int mouseIndex)
static int MouseWheelMovement(int mouseIndex)
static void MouseMovement(int mouseIndex, Point2 value)
static Action< MultiMouseButtonEvent > MouseUp
static void ProcessMouseMove(int mouseIndex, Point2 move)
static Action< MultiMouseButtonEvent > MouseDown
static void Dispose()
static void MouseWheelMovement(int mouseIndex, int value)
static void BeforeFrame()
static Action< MultiMouseEvent > MouseMove
static MouseData[] _MouseData
static void AfterFrame()
static bool IsMouseButtonDown(int mouseIndex, MouseButton mouseButton)
static void IsConnected(int mouseIndex, bool value)
static void Initialize()
static Point2 MousePosition(int mouseIndex)
static void Clear()
static void ProcessMouseUp(int mouseIndex, MouseButton mouseButton, Point2 position)
static Point2 MouseMovement(int mouseIndex)
static bool IsMouseButtonDownOnce(int mouseIndex, MouseButton mouseButton)
static void ProcessMouseDown(int mouseIndex, MouseButton mouseButton, Point2 position)