diff options
Diffstat (limited to 'Client/Assembly-CSharp/Controller.cs')
-rw-r--r-- | Client/Assembly-CSharp/Controller.cs | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/Controller.cs b/Client/Assembly-CSharp/Controller.cs new file mode 100644 index 0000000..fd84caa --- /dev/null +++ b/Client/Assembly-CSharp/Controller.cs @@ -0,0 +1,157 @@ +using System; +using UnityEngine; + +public class Controller +{ + public bool AnyTouch + { + get + { + return this.Touches[0].IsDown || this.Touches[1].IsDown; + } + } + + public bool AnyTouchDown + { + get + { + return this.Touches[0].TouchStart || this.Touches[1].TouchStart; + } + } + + public bool AnyTouchUp + { + get + { + return this.Touches[0].TouchEnd || this.Touches[1].TouchEnd; + } + } + + public bool FirstDown + { + get + { + return this.Touches[0].TouchStart; + } + } + + public Vector2 DragPosition + { + get + { + return this.Touches[this.touchId].Position; + } + } + + public Vector2 DragStartPosition + { + get + { + return this.Touches[this.touchId].DownAt; + } + } + + public readonly Controller.TouchState[] Touches = new Controller.TouchState[2]; + + private Collider2D amTouching; + + private int touchId = -1; + + public class TouchState + { + public Vector2 DownAt; + + public Vector2 Position; + + public bool WasDown; + + public bool IsDown; + + public bool TouchStart; + + public bool TouchEnd; + } + + public Controller() + { + for (int i = 0; i < this.Touches.Length; i++) + { + this.Touches[i] = new Controller.TouchState(); + } + } + + public DragState CheckDrag(Collider2D coll, bool firstOnly = false) + { + if (!coll) + { + return DragState.NoTouch; + } + if (this.touchId <= -1) + { + if (firstOnly) + { + Controller.TouchState touchState = this.Touches[0]; + if (touchState.TouchStart && coll.OverlapPoint(touchState.Position)) + { + this.amTouching = coll; + this.touchId = 0; + return DragState.TouchStart; + } + } + else + { + for (int i = 0; i < this.Touches.Length; i++) + { + Controller.TouchState touchState2 = this.Touches[i]; + if (touchState2.TouchStart && coll.OverlapPoint(touchState2.Position)) + { + this.amTouching = coll; + this.touchId = i; + return DragState.TouchStart; + } + } + } + return DragState.NoTouch; + } + if (coll != this.amTouching) + { + return DragState.NoTouch; + } + if (this.Touches[this.touchId].IsDown) + { + return DragState.Dragging; + } + this.amTouching = null; + this.touchId = -1; + return DragState.Released; + } + + public void Update() + { + Controller.TouchState touchState = this.Touches[0]; + bool mouseButton = Input.GetMouseButton(0); + touchState.Position = Camera.main.ScreenToWorldPoint(Input.mousePosition); + touchState.TouchStart = (!touchState.IsDown && mouseButton); + if (touchState.TouchStart) + { + touchState.DownAt = touchState.Position; + } + touchState.TouchEnd = (touchState.IsDown && !mouseButton); + touchState.IsDown = mouseButton; + } + + public void Reset() + { + for (int i = 0; i < this.Touches.Length; i++) + { + this.Touches[i] = new Controller.TouchState(); + } + this.touchId = -1; + this.amTouching = null; + } + + public Controller.TouchState GetTouch(int i) + { + return this.Touches[i]; + } +} |