NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Buff/BuffManager.cs

248 lines
8.2 KiB
C#
Raw Normal View History

2023-10-19 15:00:19 +08:00
using System.Collections.Generic;
using Gameplay.Level;
2023-10-19 15:00:19 +08:00
using Gameplay.Pool;
2023-08-22 19:08:45 +08:00
using Gameplay.Vehicle.Impl;
using UnityEngine;
namespace Gameplay.Buff
{
using cfg.BuffCfg;
using Framework;
2023-10-19 15:00:19 +08:00
using Bullet;
using Character;
using Skill;
using Common;
2023-08-22 19:08:45 +08:00
public class BuffManager
{
private static BuffManager _instance;
public static BuffManager instance
{
get
{
// if (_instance == null)
// {
// DebugUtil.LogError("Buff尚未初始化,请先初始化");
// return null;
// }
2023-08-22 19:08:45 +08:00
return _instance;
}
}
public static BuffManager CreateInstance()
{
if (_instance != null)
{
DebugUtil.LogError("请勿重复创建BuffManager");
return _instance;
}
_instance = new BuffManager();
return _instance;
}
2023-10-19 15:00:19 +08:00
private readonly Dictionary<GameUnit, UnitBuffManager> _unitDict;
private readonly List<UnitBuffManager> _unitList;
2023-08-22 19:08:45 +08:00
2023-11-15 15:20:43 +08:00
private readonly Dictionary<int, SideBuffManager> _sideBuffManagerDict;
2023-08-22 19:08:45 +08:00
private BuffManager()
{
_unitDict = new Dictionary<GameUnit, UnitBuffManager>();
_unitList = new List<UnitBuffManager>();
2023-11-15 15:20:43 +08:00
_sideBuffManagerDict = new Dictionary<int, SideBuffManager>();
2023-08-22 19:08:45 +08:00
}
public void Init()
{
2023-10-19 15:00:19 +08:00
DebugUtil.Log("[Init]------BuffManager");
2023-08-22 19:08:45 +08:00
}
public void Dispose()
2023-10-19 15:00:19 +08:00
{
DebugUtil.Log("[Dispose]------BuffManager");
_instance = null;
2023-10-19 15:00:19 +08:00
}
public static DataBuff GetBuffConfigById(int id)
2023-08-22 19:08:45 +08:00
{
return TableManager.Instance.Tables.BuffConfig.Get(id);
}
2023-10-19 15:00:19 +08:00
public BaseBuff CreateBuffById(GameUnit creator,
2023-08-22 19:08:45 +08:00
int id)
{
var buffConfig = GetBuffConfigById(id);
BaseBuff buff = null;
switch (buffConfig.BuffType)
{
case EBuffType.NormalDamage:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<NormalDamageBuff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.MoraleDamage:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<MoraleDamageBuff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.AutoRecoverMorale:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<AutoRecoverMoraleBuff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.AddMorale:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<AddMoraleBuff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.AddShield:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<AddShieldBuff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.BulletDamage1:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<BulletDamage1Buff>();
2023-08-22 19:08:45 +08:00
break;
case EBuffType.BulletDamage2:
buff = ObjPoolManager.instance.Get<BuffBulletDamage2>();
break;
case EBuffType.BulletDamage3:
buff = ObjPoolManager.instance.Get<BuffBulletDamage3>();
break;
2023-08-22 19:08:45 +08:00
case EBuffType.ShowEffect:
2023-10-19 15:00:19 +08:00
buff = ObjPoolManager.instance.Get<CreateEffectBuff>();
break;
case EBuffType.ChangeProp:
buff = ObjPoolManager.instance.Get<BuffChangeProp>();
break;
case EBuffType.LoopRecoverMorale:
buff = ObjPoolManager.instance.Get<BuffLoopAddMorale>();
break;
case EBuffType.Chaos:
buff = ObjPoolManager.instance.Get<StatusBuffChaos>();
break;
case EBuffType.Stun:
buff = ObjPoolManager.instance.Get<StatusBuffStun>();
break;
case EBuffType.LockPos:
buff = ObjPoolManager.instance.Get<StatusBuffLockPos>();
2023-08-22 19:08:45 +08:00
break;
2023-10-19 15:00:19 +08:00
case EBuffType.Retreat:
buff = ObjPoolManager.instance.Get<StatusBuffRetreat>();
break;
case EBuffType.NoRetreat:
buff = ObjPoolManager.instance.Get<StatusBuffNoRetreat>();
break;
case EBuffType.FillBullet:
buff = ObjPoolManager.instance.Get<BuffFillBullet>();
2023-08-22 19:08:45 +08:00
break;
2023-10-24 13:20:13 +08:00
case EBuffType.ClearDBuff:
buff = ObjPoolManager.instance.Get<BuffClearDBuff>();
break;
case EBuffType.ClearPBuff:
buff = ObjPoolManager.instance.Get<BuffClearPBuff>();
break;
2023-10-31 16:17:06 +08:00
case EBuffType.ClearSBuff:
buff = ObjPoolManager.instance.Get<BuffClearSBuff>();
break;
case EBuffType.StandTriggerBuff:
buff = ObjPoolManager.instance.Get<BuffStandTrigger>();
break;
case EBuffType.LoopRecoverShiled:
buff = ObjPoolManager.instance.Get<BuffLoopAddShiled>();
break;
2023-11-15 15:20:43 +08:00
case EBuffType.AddMoreleFromSkill:
buff = ObjPoolManager.instance.Get<SkillBuffAddMorale>();
break;
2023-08-22 19:08:45 +08:00
default:
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("CreateBuffById: UnHandle buffType:{0}", buffConfig.BuffType);
2023-08-22 19:08:45 +08:00
break;
}
2023-10-19 15:00:19 +08:00
if (buff != null)
{
buff.Ctor(creator, buffConfig);
}
2023-08-22 19:08:45 +08:00
return buff;
}
2023-10-19 15:00:19 +08:00
public static void ReturnBuff<T>(T buff) where T : BaseBuff
{
ObjPoolManager.instance.Return(buff);
}
2023-08-22 19:08:45 +08:00
public void AddBuff(GameUnit unit,
BaseBuff buff)
{
switch (unit.gameunitType)
{
case EGameUnitType.Character:
case EGameUnitType.Vehicle:
var unitManager = _unitDict[unit];
unitManager.AddBuff(buff);
break;
2023-10-19 15:00:19 +08:00
case EGameUnitType.Summon:
// TODO: 召唤物暂时不吃buff
break;
2023-08-22 19:08:45 +08:00
default:
DebugUtil.LogError("暂未实现");
break;
}
}
public void InitVehicle(NormalVehicle vehicle)
{
if (_unitDict.ContainsKey(vehicle))
{
DebugUtil.LogError("FATA ERROR: 不应该出现两个相同的vehicle");
return;
}
var unitManager = new UnitBuffManager(vehicle);
_unitDict.Add(vehicle, unitManager);
_unitList.Add(unitManager);
// 双向绑定
vehicle.buffManager = unitManager;
}
public void InitCharacter(Character c)
{
if (_unitDict.ContainsKey(c))
{
DebugUtil.LogError("FATA ERROR: 不应该出现两个相同的character");
return;
}
var unitManager = new UnitBuffManager(c);
_unitDict.Add(c, unitManager);
_unitList.Add(unitManager);
2023-11-15 16:09:10 +08:00
// 默认全局buff
2023-10-19 15:00:19 +08:00
var autoRecoverMoraleBuff = CreateBuffById(c, InnerBuffID.AUTO_RECOVER_MORALE);
2023-08-22 19:08:45 +08:00
unitManager.AddBuff(autoRecoverMoraleBuff);
// 双向绑定
c.buffManager = unitManager;
}
public void RemoveCharacter(Character c)
{
if (!_unitDict.ContainsKey(c))
{
DebugUtil.LogError("FATA ERROR: 不应该出现不存在的character");
return;
}
var unitManager = _unitDict[c];
_unitDict.Remove(c);
_unitList.Remove(unitManager);
}
2023-08-22 19:08:45 +08:00
public void LogicUpdate(float dt)
{
if (SkillManager.instance.needSkillPaused)
{
return;
}
for (var i = 0; i < _unitList.Count; ++i)
{
var unit = _unitList[i];
unit.LogicUpdate(dt);
}
}
}
}