Files
2026-05-26 16:15:54 +08:00

76 lines
2.1 KiB
C#

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<ExplosionEnum, IExplosion> ExplosionDic;
private CompositeDisposable _disposable = new CompositeDisposable();
public ExplosionManager()
{
ExplosionDic = new Dictionary<ExplosionEnum, IExplosion>
{
{ 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<ExplosionClick>().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!");
}
}
}
}