﻿using System;
using System.Collections.Concurrent;
using UnityEngine;

/*
 * 子线程调用主线程中的方法
 * 当做中间桥梁
 * 
 */

public class Mostech_Loom : MonoBehaviour
{
	private static Mostech_Loom Instance;
	private ConcurrentQueue<Action> queue;
	private Action curAction;

	private Mostech_Loom() { }

	public static Mostech_Loom GetInstance()
	{
		return Instance;
	}

	void Awake()
	{
		Instance = this;
		queue = new ConcurrentQueue<Action>();
		QualitySettings.vSyncCount = 0;
		Application.targetFrameRate = 60;
	}

	/// <summary>
	/// 向主线程中添加事件
	/// </summary>
	/// <param name="action"></param>
	public void AddEventOnMainThread(Action action)
	{
		queue.Enqueue(action);
	}


	private void Update()
	{
		if (queue.Count > 0)
		{
			for (int i = 0; i < queue.Count; i++)
			{
				if (queue.TryDequeue(out curAction))
					curAction();
			}
		}
	}

	private void OnDestroy()
	{
		Instance = null;
	}
}
