76 lines
2.1 KiB
C#
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!");
|
|
}
|
|
}
|
|
}
|
|
} |