您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
54 行
1.5 KiB
54 行
1.5 KiB
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace GameplayIngredients.Managers
|
|
{
|
|
[AddComponentMenu(ComponentMenu.managersPath + "Single Update Manager")]
|
|
[NonExcludeableManager]
|
|
public class SingleUpdateManager : Manager
|
|
{
|
|
public delegate void SingleUpdate();
|
|
|
|
List<SingleUpdate> updateList;
|
|
|
|
private void OnEnable()
|
|
{
|
|
updateList = new List<SingleUpdate>();
|
|
}
|
|
|
|
public void Register(SingleUpdate update)
|
|
{
|
|
if (!updateList.Any(o => o == update))
|
|
{
|
|
updateList.Add(update);
|
|
}
|
|
else
|
|
Debug.LogWarning("SingleUpdateManager: Already found an entry for this SingleUpdate, ignoring.");
|
|
}
|
|
|
|
public void Remove(SingleUpdate update)
|
|
{
|
|
if(updateList.Any(o => o == update))
|
|
{
|
|
updateList.RemoveAll(o => o == update);
|
|
}
|
|
else
|
|
Debug.LogWarning("SingleUpdateManager: Did not found a matching entry for given SingleUpdate, cannot remove.");
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
// Process all Currently Registered (Copy as Array)
|
|
foreach(var update in updateList.ToArray())
|
|
{
|
|
update?.Invoke();
|
|
}
|
|
|
|
// Remove all nulls (Destroyed Objects) in updateList
|
|
updateList.RemoveAll(o => o == null);
|
|
}
|
|
}
|
|
}
|
|
|
|
|