Files
Main/Assets/GameAssets/Resources/GameUI/Common/StarMove/StarMoveManager.cs
2025-01-25 04:38:09 +08:00

178 lines
4.7 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Thousandto.Plugins.Common;
using System;
using Thousandto.Core.Base;
namespace Thousandto.Plugins.Common
{
/// <summary>
/// 星星特效管理类
/// </summary>
public class StarMoveManager
{
#region//私有变量
private float _clearTime = 0f;
private StarEffectAttr _fristFreeObj = null;
private StarMoveManager _manager = null;
private List<StarEffectAttr> _freeList = new List<StarEffectAttr>();
private List<StarEffectAttr> _runList = new List<StarEffectAttr>();
#endregion
#region//公共变量
public StarMoveManager Manager
{
get { if (_manager == null)
{
_manager = new StarMoveManager();
}
return _manager;
}
}
public List<StarEffectAttr> FreeList
{
get
{
return _freeList;
}
set
{
_freeList = value;
}
}
public List<StarEffectAttr> RunList
{
get
{
return _runList;
}
set
{
_runList = value;
}
}
#endregion
#region//公共接口
public void Push(GameObject go,GameObject endGo,Vector3 startPos,Vector3 endPos,int count = 0,MyAction func = null )
{
if (_freeList != null)
{
StarEffectAttr tempObj = null;
if (_freeList.Count == 0)
{
//创建一个节点
GameObject cloneGo = UIUtility.Clone(go);
if (cloneGo != null)
{
tempObj = new StarEffectAttr(cloneGo, endGo, startPos, endPos, func);
tempObj.Index = count;
}
}
else
{
tempObj = _freeList[0];
tempObj.EndGo = endGo;
tempObj.EndPos = endPos;
tempObj.Index = count;
if (tempObj.PlayStarVfxCallBack == null)
{
tempObj.PlayStarVfxCallBack = func;
}
_freeList.Remove(_freeList[0]);
if (_freeList.Count > 0 && _clearTime == 0f)
{
_fristFreeObj = _freeList[0];
}
}
_runList.Add(tempObj);
tempObj.SetManager(this);
tempObj.PlayeVfxAction();
}
}
//插入等待释放列表
public void Pop(StarEffectAttr data)
{
if (_runList != null && _runList.Contains(data))
{
if (_freeList != null)
{
_freeList.Add(data);
}
_runList.Remove(data);
}
}
//移除和销毁所有特效
public void Destory()
{
Clear(_freeList);
Clear(_runList);
_fristFreeObj = null;
}
private void Clear(List<StarEffectAttr> list)
{
if (list != null)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i] != null)
{
list[i].Destory();
}
}
list.Clear();
}
}
//清理缓存处理
private void ClearCache()
{
if (_fristFreeObj != null)
{
if (_clearTime < 10f)
{
_clearTime += Time.deltaTime;
}
else
{
_clearTime = 0f;
if (_freeList != null && _freeList.Count > 0)
{
if (_fristFreeObj == _freeList[0])
{
//外部操作已经结束或者停止太久 释放缓存
Destory();
}
}
}
}
}
private void UpdateStarEffect()
{
for (int i = 0; i < _runList.Count; i++)
{
if (_runList[i] != null)
{
_runList[i].Update();
}
}
}
public void Update()
{
ClearCache();
UpdateStarEffect();
}
#endregion
}
}