/* * @author Valentin Simonov / http://va.lent.in/ */ using System.Text; using TouchScript.Hit; using TouchScript.Pointers; using UnityEngine; namespace TouchScript.Utils { /// /// Utility methods to work with Pointers. /// public static class PointerUtils { private static StringBuilder sb; /// /// Determines whether the pointer is over its target GameObject. /// /// The pointer. /// true if the pointer is over the GameObject; false otherwise. public static bool IsPointerOnTarget(Pointer pointer) { if (pointer == null) return false; return IsPointerOnTarget(pointer, pointer.GetPressData().Target); } /// /// Determines whether the pointer is over a specific GameObject. /// /// The pointer. /// The target. /// true if the pointer is over the GameObject; false otherwise. public static bool IsPointerOnTarget(IPointer pointer, Transform target) { HitData hit; return IsPointerOnTarget(pointer, target, out hit); } /// /// Determines whether the pointer is over a specific GameObject. /// /// The pointer. /// The target. /// The hit. /// true if the pointer is over the GameObject; false otherwise. public static bool IsPointerOnTarget(IPointer pointer, Transform target, out HitData hit) { hit = default(HitData); if (pointer == null || target == null) return false; hit = pointer.GetOverData(); if (hit.Target == null) return false; return hit.Target.IsChildOf(target); } /// /// Formats currently pressed buttons as a string. /// /// The buttons state. /// Formatted string of currently pressed buttons. public static string PressedButtonsToString(Pointer.PointerButtonState buttons) { initStringBuilder(); PressedButtonsToString(buttons, sb); return sb.ToString(); } /// /// Formats currently pressed buttons as a string. /// /// The buttons state. /// The string builder to use. public static void PressedButtonsToString(Pointer.PointerButtonState buttons, StringBuilder builder) { if ((buttons & Pointer.PointerButtonState.FirstButtonPressed) != 0) builder.Append("1"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.SecondButtonPressed) != 0) builder.Append("2"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.ThirdButtonPressed) != 0) builder.Append("3"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.FourthButtonPressed) != 0) builder.Append("4"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.FifthButtonPressed) != 0) builder.Append("5"); else builder.Append("_"); } /// /// Formats the state of buttons as a string. /// /// The buttons state. /// Formatted string of the buttons state. public static string ButtonsToString(Pointer.PointerButtonState buttons) { initStringBuilder(); ButtonsToString(buttons, sb); return sb.ToString(); } /// /// Formats the state of buttons as a string. /// /// The buttons state. /// The string builder to use. public static void ButtonsToString(Pointer.PointerButtonState buttons, StringBuilder builder) { if ((buttons & Pointer.PointerButtonState.FirstButtonDown) != 0) builder.Append("v"); else if ((buttons & Pointer.PointerButtonState.FirstButtonUp) != 0) builder.Append("^"); else if ((buttons & Pointer.PointerButtonState.FirstButtonPressed) != 0) builder.Append("1"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.SecondButtonDown) != 0) builder.Append("v"); else if ((buttons & Pointer.PointerButtonState.SecondButtonUp) != 0) builder.Append("^"); else if ((buttons & Pointer.PointerButtonState.SecondButtonPressed) != 0) builder.Append("2"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.ThirdButtonDown) != 0) builder.Append("v"); else if ((buttons & Pointer.PointerButtonState.ThirdButtonUp) != 0) builder.Append("^"); else if ((buttons & Pointer.PointerButtonState.ThirdButtonPressed) != 0) builder.Append("3"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.FourthButtonDown) != 0) builder.Append("v"); else if ((buttons & Pointer.PointerButtonState.FourthButtonUp) != 0) builder.Append("^"); else if ((buttons & Pointer.PointerButtonState.FourthButtonPressed) != 0) builder.Append("4"); else builder.Append("_"); if ((buttons & Pointer.PointerButtonState.FifthButtonDown) != 0) builder.Append("v"); else if ((buttons & Pointer.PointerButtonState.FifthButtonUp) != 0) builder.Append("^"); else if ((buttons & Pointer.PointerButtonState.FifthButtonPressed) != 0) builder.Append("5"); else builder.Append("_"); } /// /// Adds pressed state to downed buttons. /// /// The buttons state. /// Changed buttons state. public static Pointer.PointerButtonState DownPressedButtons(Pointer.PointerButtonState buttons) { if ((buttons & Pointer.PointerButtonState.FirstButtonPressed) != 0) buttons |= Pointer.PointerButtonState.FirstButtonDown; if ((buttons & Pointer.PointerButtonState.SecondButtonPressed) != 0) buttons |= Pointer.PointerButtonState.SecondButtonDown; if ((buttons & Pointer.PointerButtonState.ThirdButtonPressed) != 0) buttons |= Pointer.PointerButtonState.ThirdButtonDown; if ((buttons & Pointer.PointerButtonState.FourthButtonPressed) != 0) buttons |= Pointer.PointerButtonState.FourthButtonDown; if ((buttons & Pointer.PointerButtonState.FifthButtonPressed) != 0) buttons |= Pointer.PointerButtonState.FifthButtonDown; return buttons; } /// /// Adds downed state to pressed buttons. /// /// The buttons state. /// Changed buttons state. public static Pointer.PointerButtonState PressDownButtons(Pointer.PointerButtonState buttons) { if ((buttons & Pointer.PointerButtonState.FirstButtonDown) != 0) buttons |= Pointer.PointerButtonState.FirstButtonPressed; if ((buttons & Pointer.PointerButtonState.SecondButtonDown) != 0) buttons |= Pointer.PointerButtonState.SecondButtonPressed; if ((buttons & Pointer.PointerButtonState.ThirdButtonDown) != 0) buttons |= Pointer.PointerButtonState.ThirdButtonPressed; if ((buttons & Pointer.PointerButtonState.FourthButtonDown) != 0) buttons |= Pointer.PointerButtonState.FourthButtonPressed; if ((buttons & Pointer.PointerButtonState.FifthButtonDown) != 0) buttons |= Pointer.PointerButtonState.FifthButtonPressed; return buttons; } /// /// Converts pressed buttons to up state. /// /// The buttons state. /// Changed buttons state. public static Pointer.PointerButtonState UpPressedButtons(Pointer.PointerButtonState buttons) { var btns = Pointer.PointerButtonState.Nothing; if ((buttons & Pointer.PointerButtonState.FirstButtonPressed) != 0) btns |= Pointer.PointerButtonState.FirstButtonUp; if ((buttons & Pointer.PointerButtonState.SecondButtonPressed) != 0) btns |= Pointer.PointerButtonState.SecondButtonUp; if ((buttons & Pointer.PointerButtonState.ThirdButtonPressed) != 0) btns |= Pointer.PointerButtonState.ThirdButtonUp; if ((buttons & Pointer.PointerButtonState.FourthButtonPressed) != 0) btns |= Pointer.PointerButtonState.FourthButtonUp; if ((buttons & Pointer.PointerButtonState.FifthButtonPressed) != 0) btns |= Pointer.PointerButtonState.FifthButtonUp; return btns; } private static void initStringBuilder() { if (sb == null) sb = new StringBuilder(); sb.Length = 0; } } }