修改buff机制

main
刘涛 2023-11-15 16:09:10 +08:00
parent 3a7063757c
commit d604b2edd7
12 changed files with 92 additions and 34 deletions

View File

@ -28,7 +28,7 @@ namespace Gameplay.Buff
}
}
private bool _needRemove;
private bool _needRemove = false;
public bool needRemove
{
get
@ -36,13 +36,11 @@ namespace Gameplay.Buff
switch (configData.ExistType)
{
case EExistType.Once:
return true;
return _needRemove;
case EExistType.During:
return runtimeData.passTime >= configData.MaxExistTime;
case EExistType.Allways:
return false;
case EExistType.AfterReload:
return _needRemove;
default:
DebugUtil.LogError("暂未处理的buff existType:{0}",configData.ExistType);
return true;
@ -66,6 +64,7 @@ namespace Gameplay.Buff
this.creator = creator;
this.configData = configData;
isParamOverride = false;
_needRemove = false;
if (runtimeData == null)
{
runtimeData = new BuffRuntimeData();
@ -91,6 +90,16 @@ namespace Gameplay.Buff
}
public void Trigger()
{
_OnTrigger();
if (configData.ExistType == EExistType.Once)
{
_needRemove = true;
}
}
protected virtual void _OnTrigger()
{
@ -104,11 +113,11 @@ namespace Gameplay.Buff
public void TriggerAdd()
{
_OnAdd();
if (configData.TriggerType == ETriggerType.ON_ADD)
{
_OnTrigger();
Trigger();
}
_OnAdd();
if (configData.ExistType == EExistType.During ||
configData.ExistType == EExistType.Allways)
@ -136,11 +145,11 @@ namespace Gameplay.Buff
public void TriggerRemove()
{
_OnRemove();
if (configData.TriggerType == ETriggerType.ON_REMOVE)
{
_OnTrigger();
Trigger();
}
_OnRemove();
if (_existEffectData != null)
{
@ -158,7 +167,7 @@ namespace Gameplay.Buff
_remainTriggerTime -= dt;
if (_remainTriggerTime <= 0)
{
_OnTrigger();
Trigger();
_remainTriggerTime += configData.TiggerUnitTime;
}
}
@ -170,23 +179,13 @@ namespace Gameplay.Buff
{
runtimeData.passTime = 0;
}
public void TriggerOnReload()
public void SpecialTrigger(ETriggerType triggerType)
{
if (configData.TriggerType == ETriggerType.ON_RELOAD)
if (configData.TriggerType == triggerType)
{
_OnTrigger();
Trigger();
}
if (configData.ExistType == EExistType.AfterReload)
{
_needRemove = true;
}
_OnReload();
}
protected virtual void _OnReload()
{
}
protected virtual void _OnLogicUpdate(float dt)

View File

@ -207,6 +207,7 @@ namespace Gameplay.Buff
_unitDict.Add(c, unitManager);
_unitList.Add(unitManager);
// 默认全局buff
var autoRecoverMoraleBuff = CreateBuffById(c, InnerBuffID.AUTO_RECOVER_MORALE);
unitManager.AddBuff(autoRecoverMoraleBuff);

View File

@ -224,14 +224,29 @@ namespace Gameplay.Buff
}
public void TriggerReload()
{
_InnerTrigger(ETriggerType.ON_RELOAD);
}
public void TriggerEnterBattle()
{
_InnerTrigger(ETriggerType.ON_ENTER_BATTLE);
}
public void TriggerExitBattle()
{
_InnerTrigger(ETriggerType.ON_EXIT_BATTLE);
}
private void _InnerTrigger(ETriggerType triggerType)
{
for (int i = 0; i < totalBuffList.Count; i++)
{
var buff = totalBuffList[i];
if (buff.needRemove) continue;
buff.TriggerOnReload();
buff.SpecialTrigger(triggerType);
}
}
}
}

View File

@ -126,6 +126,8 @@ namespace Gameplay.Character
_characterDict.Add(character.GetID(), character);
_characterList.Add(character);
_AddToTroop(character);
character.buffManager.TriggerEnterBattle();
}
private void _RemoveCharacter(Character c,
@ -380,6 +382,8 @@ namespace Gameplay.Character
if (character.runtimeData.needRemove)
{
// 触发buff
character.buffManager.TriggerExitBattle();
_RemoveCharacter(character, i);
i--;
}

View File

@ -120,6 +120,11 @@ namespace Gameplay.Common
/// 第一次开枪时间
/// </summary>
public ObscuredFloat firstShootTime;
/// <summary>
/// 士气恢复缩放
/// </summary>
public ObscuredFloat moraleRecoverScale = 1f;
/// <summary>
/// 装弹时间

View File

@ -114,6 +114,11 @@ namespace Gameplay.Skill
var addUnit = new UnitSkillManager(charactor);
// 增加主动技能
await addUnit.AddSkill(charactor.runtimeData.configData.skillId);
// 获取主动技能
var skill = addUnit.positiveSkill;
// 增加附带的被动buff技能
addUnit.AddPassiveBuffIds(skill.runtimeData.configData.PassiveBuffIds);
_AddToManager(charactor, addUnit);
}
@ -125,6 +130,11 @@ namespace Gameplay.Skill
// 增加主动技能
await addUnit.AddSkill(vehicle.runtimeData.configData.skillId);
// 获取主动技能
var skill = addUnit.positiveSkill;
// 增加附带的被动buff技能
addUnit.AddPassiveBuffIds(skill.runtimeData.configData.PassiveBuffIds);
_AddToManager(vehicle, addUnit);
}

View File

@ -54,6 +54,16 @@ namespace Gameplay.Skill
return true;
}
public void AddPassiveBuffIds(List<int> buffIds)
{
if (buffIds == null || buffIds.Count == 0) return;
for (var i = 0; i < buffIds.Count; ++i)
{
var buffId = buffIds[i];
owner.buffManager.AddBuffById(buffId);
}
}
public void LogicUpdate(float dt)
{
for (var i = 0; i < handles.Count; ++i)

View File

@ -1,6 +1,7 @@
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay.Buff;
using Gameplay.Bullet;
using Gameplay.Common;
using Gameplay.Level;
@ -65,10 +66,13 @@ namespace Gameplay.Vehicle.Impl
_InitFsm();
EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_READY, this);
isReady = true;
BuffManager.instance.InitVehicle(this);
await SkillManager.instance.InitVehicle(this);
buffManager.TriggerEnterBattle();
isReady = true;
EventManager.Instance.Send(EventManager.EventName.INFIGHT_UNIT_READY, this);
}
private void _InitProps()

View File

@ -64,8 +64,6 @@ namespace Gameplay.Vehicle
private void _AddVehicle(NormalVehicle vehicle)
{
_vehicles.Add(vehicle);
BuffManager.instance.InitVehicle(vehicle);
}
private void _RegistEvents()

View File

@ -103,6 +103,14 @@ namespace cfg.BuffCfg
/// 每X秒回复Y点护甲值
/// </summary>
LoopRecoverShiled = 22,
/// <summary>
/// 添加己方全局buff
/// </summary>
AddSelfSideBuff = 23,
/// <summary>
/// 移除己方全局buff
/// </summary>
RemoveSelfSideBuff = 24,
}
}

View File

@ -23,10 +23,6 @@ namespace cfg.BuffCfg
/// 持续一段时间
/// </summary>
During = 2,
/// <summary>
/// 换弹后移除
/// </summary>
AfterReload = 3,
}
}

View File

@ -31,6 +31,14 @@ namespace cfg.BuffCfg
/// 换弹时触发
/// </summary>
ON_RELOAD = 4,
/// <summary>
/// 上场时触发
/// </summary>
ON_ENTER_BATTLE = 5,
/// <summary>
/// 下场时触发
/// </summary>
ON_EXIT_BATTLE = 6,
}
}