///
//  主要处理一些在物体外面的点击 物体需要做一些处理的
///

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class InputOutView : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{
    public delegate void InputOutViewEvent();

    public List<EventParams> InputOutViewEvents = new List<EventParams>();
    private bool isInputOutView = true;

    // Update is called once per frame
    private void LateUpdate()
    {
        if (Input.anyKey)
            if (isInputOutView)
            {
                var removes = new List<EventParams>();
                for (var i = 0; i < InputOutViewEvents.Count; i++)
                {
                    var param = InputOutViewEvents[i];
                    if (param._fun == null)
                    {
                        removes.Add(param);
                        continue;
                    }

                    param._fun();
                    if (param.isForver == false)
                    {
                        param.runtimes--;
                        if (param.runtimes <= 0) removes.Add(param);
                    }
                }

                for (var i = 0; i < removes.Count; i++) InputOutViewEvents.Remove(removes[i]);
            }
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        isInputOutView = false;
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        isInputOutView = false;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        isInputOutView = true;
    }

    public void Add(int times, bool isFover, InputOutViewEvent _fun)
    {
        var param = new EventParams();
        param.isForver = isFover;
        param.runtimes = times;
        param._fun = _fun;
        InputOutViewEvents.Add(param);
    }

    public class EventParams
    {
        public InputOutViewEvent _fun;
        public bool isForver;
        public int runtimes = 1;
    }
}