82 lines
2.4 KiB
C#
82 lines
2.4 KiB
C#
using System.Collections.Generic;
|
|
using asap.core;
|
|
using Script.RuntimeScript.Interface;
|
|
|
|
namespace Script.RuntimeScript
|
|
{
|
|
public partial class GameBroadLogic
|
|
{
|
|
private List<BroadEffectInterface> _effectList = new List<BroadEffectInterface>();
|
|
|
|
private BroadEffectState _broadState = BroadEffectState.None;
|
|
|
|
public void AddToEffectList(BroadEffectInterface item)
|
|
{
|
|
_effectList.Add(item);
|
|
if (this._broadState == BroadEffectState.None)
|
|
{
|
|
this._broadState = BroadEffectState.Check;
|
|
}
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
switch (_broadState)
|
|
{
|
|
case BroadEffectState.None:
|
|
break;
|
|
case BroadEffectState.Check:
|
|
case BroadEffectState.OverCheck:
|
|
bool haveEffect = CheckCanPlayEffect(_broadState == BroadEffectState.OverCheck);
|
|
if (haveEffect == false)
|
|
{
|
|
_broadState = BroadEffectState.AllOver;
|
|
}
|
|
break;
|
|
case BroadEffectState.Playing:
|
|
break;
|
|
case BroadEffectState.AllOver:
|
|
_broadState = BroadEffectState.None;
|
|
GContext.container.Resolve<DiggingGameManager>().GameState = SandDigGameState.PropEffectEnd;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private bool CheckCanPlayEffect(bool overCheck)
|
|
{
|
|
if (_effectList.Count > 0)
|
|
{
|
|
_effectList.Sort((a, b) => a.PlayEffectPriority.CompareTo(b.PlayEffectPriority));
|
|
_broadState = BroadEffectState.Playing;
|
|
DiggingGameManager.LogError("_effectList.Count ::" + _effectList.Count);
|
|
PlayEffect(_effectList[0], overCheck);
|
|
if (_effectList.Count > 0)//防止 被ClearEffect 清空
|
|
_effectList.RemoveAt(0);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private void PlayEffect(BroadEffectInterface item, bool overCheck)
|
|
{
|
|
item.PlayEffect(overCheck);
|
|
}
|
|
|
|
private void ClearEffect()
|
|
{
|
|
_effectList.Clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum BroadEffectState
|
|
{
|
|
None,
|
|
Check,
|
|
Playing,
|
|
AllOver,
|
|
OverCheck,
|
|
} |