178 lines
4.7 KiB
C#
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
|
|
}
|
|
}
|
|
|