using System;
using UnityEngine;
using UnityEngine.EventSystems;
using System.Text;
public class FunctionTimer : MonoBehaviour
{
static System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
public static void TotalTimer(Action callback)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(); });
}
public static void TotalTimer<T>(Action<T> callback, T value)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value); });
}
public static void TotalTimer<T, T1>(Action<T, T1> callback, T value, T1 value1)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1); });
}
public static void TotalTimer<T, T1, T2>(Action<T, T1, T2> callback, T value, T1 value1, T2 value2)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1, value2); });
}
public static void TotalTimer<T, T1, T2, T3>(Action<T, T1, T2, T3> callback, T value, T1 value1, T2 value2, T3 value3)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1, value2, value3); });
}
public static void UIEventTimer(GameObject value)
{
Compute<IPointerUpHandler>(value,(com) => {
com.OnPointerUp(new PointerEventData(EventSystem.current));
});
Compute<IPointerEnterHandler>(value, (com) => {
com.OnPointerEnter(new PointerEventData(EventSystem.current));
});
Compute<IPointerExitHandler>(value, (com) => {
com.OnPointerExit(new PointerEventData(EventSystem.current));
});
Compute<IPointerDownHandler>(value, (com) => {
com.OnPointerDown(new PointerEventData(EventSystem.current));
});
Compute<IPointerClickHandler>(value, (com) => {
com.OnPointerClick(new PointerEventData(EventSystem.current));
});
Compute<IInitializePotentialDragHandler>(value, (com) => {
com.OnInitializePotentialDrag(new PointerEventData(EventSystem.current));
});
Compute<IDragHandler>(value, (com) => {
com.OnDrag(new PointerEventData(EventSystem.current));
});
Compute<IEndDragHandler>(value, (com) => {
com.OnEndDrag(new PointerEventData(EventSystem.current));
});
Compute<IDropHandler>(value, (com) => {
com.OnDrop(new PointerEventData(EventSystem.current));
});
Compute<IScrollHandler>(value, (com) => {
com.OnScroll(new PointerEventData(EventSystem.current));
});
Compute<IUpdateSelectedHandler>(value, (com) => {
com.OnUpdateSelected(new BaseEventData(EventSystem.current));
});
Compute<ISelectHandler>(value, (com) => {
com.OnSelect(new BaseEventData(EventSystem.current));
});
Compute<IDeselectHandler>(value, (com) => {
com.OnDeselect(new BaseEventData(EventSystem.current));
});
Compute<IMoveHandler>(value, (com) => {
com.OnMove(new AxisEventData(EventSystem.current));
});
Compute<ISubmitHandler>(value, (com) => {
com.OnSubmit(new BaseEventData(EventSystem.current));
});
Compute<ICancelHandler>(value, (com) => {
com.OnCancel(new BaseEventData(EventSystem.current));
});
}
private static void Compute<T>(GameObject value, Action<T> callback) where T : IEventSystemHandler
{
var coms = value.GetComponents<T>();
foreach (var com in coms)
{
output(com.GetType().Name, typeof(T).Name, () => { callback(com); });
}
}
private static void output(string className, string function,Action callback )
{
sw.Restart();
sw.Start();
callback();
sw.Stop();
Debug.Log(string.Format("<color=#00ff00>className:[ {0} ] \t functionName:[ {1} ] \t timeConsuming:[ {2} ] </color>",
className, function, sw.ElapsedMilliseconds));
}
private void Awake()
{
UIEventTimer(gameObject);
}
}