SamsonGame/Assets/Sources/Feel/MMTools/Tools/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs

94 lines
2.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MoreMountains.Tools
{
/// <summary>
/// Add this class to a canvas and it'll automatically reposition TouchPrefabs at the position of touches
/// You can set a higher TouchProvision if your game gets more than the default number (6) simultaneous touches
/// Disable/enable this mono for it to stop/work
/// </summary>
public class MMDebugTouchDisplay : MonoBehaviour
{
[Header("Bindings")]
/// the canvas to display the TouchPrefabs on
public Canvas TargetCanvas;
[Header("Touches")]
/// the prefabs to instantiate to signify the position of the touches
public RectTransform TouchPrefab;
/// the amount of these prefabs to pool and provision
public int TouchProvision = 6;
protected List<RectTransform> _touchDisplays;
/// <summary>
/// On Start we initialize our pool
/// </summary>
protected virtual void Start()
{
Initialization();
}
/// <summary>
/// Creates the pool of prefabs
/// </summary>
protected virtual void Initialization()
{
_touchDisplays = new List<RectTransform>();
for (int i = 0; i < TouchProvision; i++)
{
RectTransform touchDisplay = Instantiate(TouchPrefab);
touchDisplay.transform.SetParent(TargetCanvas.transform);
touchDisplay.name = "MMDebugTouchDisplay_" + i;
touchDisplay.gameObject.SetActive(false);
_touchDisplays.Add(touchDisplay);
}
this.enabled = false;
}
/// <summary>
/// On update we detect touches and move our prefabs at their position
/// </summary>
protected virtual void Update()
{
DisableAllDisplays();
DetectTouches();
}
/// <summary>
/// Acts on all touches
/// </summary>
protected virtual void DetectTouches()
{
for (int i = 0; i < Input.touchCount; ++i)
{
_touchDisplays[i].gameObject.SetActive(true);
_touchDisplays[i].position = Input.GetTouch(i).position;
}
}
/// <summary>
/// Disables all touch prefabs
/// </summary>
protected virtual void DisableAllDisplays()
{
foreach(RectTransform display in _touchDisplays)
{
display.gameObject.SetActive(false);
}
}
/// <summary>
/// When this mono gets disabled we turn all our prefabs off
/// </summary>
protected virtual void OnDisable()
{
DisableAllDisplays();
}
}
}