using System.Collections.Generic; using asap.core; using Script.RuntimeScript.Interface; namespace Script.RuntimeScript { public partial class GameBroadLogic { private List _effectList = new List(); 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().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, }