Files
2024-11-20 15:21:28 +01:00

105 lines
2.6 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Device)]
[Tooltip("Gets info on a touch event.")]
public class GetTouchInfo : FsmStateAction
{
[Tooltip("Filter by a Finger ID. You can store a Finger ID in other Touch actions, e.g., Touch Event.")]
public FsmInt fingerId;
[Tooltip("If true, all screen coordinates are returned normalized (0-1), otherwise in pixels.")]
public FsmBool normalize;
[UIHint(UIHint.Variable)]
public FsmVector3 storePosition;
[UIHint(UIHint.Variable)]
public FsmFloat storeX;
[UIHint(UIHint.Variable)]
public FsmFloat storeY;
[UIHint(UIHint.Variable)]
public FsmVector3 storeDeltaPosition;
[UIHint(UIHint.Variable)]
public FsmFloat storeDeltaX;
[UIHint(UIHint.Variable)]
public FsmFloat storeDeltaY;
[UIHint(UIHint.Variable)]
public FsmFloat storeDeltaTime;
[UIHint(UIHint.Variable)]
public FsmInt storeTapCount;
public bool everyFrame = true;
float screenWidth;
float screenHeight;
public override void Reset()
{
fingerId = new FsmInt { UseVariable = true };
normalize = true;
storePosition = null;
storeDeltaPosition = null;
storeDeltaTime = null;
storeTapCount = null;
everyFrame = true;
}
public override void OnEnter()
{
screenWidth = Screen.width;
screenHeight = Screen.height;
DoGetTouchInfo();
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
DoGetTouchInfo();
}
void DoGetTouchInfo()
{
if (Input.touchCount > 0)
{
foreach (var touch in Input.touches)
{
if (fingerId.IsNone || touch.fingerId == fingerId.Value)
{
float x = normalize.Value == false ? touch.position.x : touch.position.x / screenWidth;
float y = normalize.Value == false ? touch.position.y : touch.position.y / screenHeight;
if (!storePosition.IsNone)
{
storePosition.Value = new Vector3(x, y, 0);
}
storeX.Value = x;
storeY.Value = y;
float deltax = normalize.Value == false ? touch.deltaPosition.x : touch.deltaPosition.x / screenWidth;
float deltay = normalize.Value == false ? touch.deltaPosition.y : touch.deltaPosition.y / screenHeight;
if (!storeDeltaPosition.IsNone)
{
storeDeltaPosition.Value = new Vector3(deltax, deltay, 0);
}
storeDeltaX.Value = deltax;
storeDeltaY.Value = deltay;
storeDeltaTime.Value = touch.deltaTime;
storeTapCount.Value = touch.tapCount;
}
}
}
}
}
}