/*
* @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;
}
}
}