using UnityEngine;
using System.Collections;

namespace Touka.GameLogic {
    /// <summary>
    /// 单例类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class ToukaSingleton<T> where T : MonoBehaviour
    {
        private static T _instance;

        public static T GetInstance()
        {
            if (null == _instance)
            {
                _instance = Object.FindObjectOfType(typeof(T)) as T;
                if (null != _instance) return _instance;

                GameObject container = new GameObject
                {
                    name = typeof(T).ToString()
                };
                container.hideFlags = HideFlags.HideInHierarchy;
                _instance = container.AddComponent(typeof(T)) as T;
                Object.DontDestroyOnLoad(container); 
            }
            return _instance;
        }
    }

    public abstract class ToukaSingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour
    {
        public static T Instance
        {
            get { return ToukaSingleton<T>.GetInstance(); }
        }

        public static T GetInstance()
        {
            return ToukaSingleton<T>.GetInstance();
        }

        public virtual void Dispose()
        {

        }
    }
}
