using System.Collections.Generic; using asap.core; using cfg; using Script.RuntimeScript.ExplosionEffect.Effect; using Script.RuntimeScript.GameLogic; using UniRx; using UnityEngine; namespace Script.RuntimeScript.ExplosionEffect { public class ExplosionManager { private Dictionary ExplosionDic; private CompositeDisposable _disposable = new CompositeDisposable(); public ExplosionManager() { ExplosionDic = new Dictionary { { ExplosionEnum.Row, new RowExplosion() }, { ExplosionEnum.Col, new ColExplosion() }, { ExplosionEnum.Bomb, new BombExplosion() } }; } public void Init() { AddEvent(); } public void Reset() { CleanEvent(); } private void AddEvent() { GContext.OnEvent().Subscribe(OnExplosion).AddTo(_disposable); } private void CleanEvent() { _disposable.Dispose(); } private void OnExplosion(ExplosionClick param) { SpecialEventItem item = param.effect as SpecialEventItem; switch (item.Data.Config.DiggingType) { case RowClear: CastExplosion(ExplosionEnum.Row,item); break; case ColumnClear: CastExplosion(ExplosionEnum.Col,item); break; case BombClear: CastExplosion(ExplosionEnum.Bomb,item); break; } } private void CastExplosion(ExplosionEnum explosionType,SpecialEventItem item) { if (ExplosionDic.TryGetValue(explosionType, out IExplosion explosion)) { explosion.Play(item); } else { Debug.LogError("explosion type not found!"); } } } }