NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Skill/SkillHandle.cs

119 lines
3.3 KiB
C#
Raw Normal View History

2023-12-28 13:49:45 +08:00
using System.Collections.Generic;
using Framework;
using Gameplay.Common;
using Gameplay.Skill.Charge;
2023-12-13 16:20:41 +08:00
using Gameplay.Unit;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Skill
{
using cfg.SkillCfg;
using Guide;
using Level;
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
public class SkillHandle
2023-08-22 19:08:45 +08:00
{
2023-10-19 15:00:19 +08:00
public readonly GameUnit owner;
public List<uint> cacheHitUnitIds = new List<uint>();
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
public readonly SkillRuntimeData runtimeData;
2023-08-22 19:08:45 +08:00
public ISkillCharge chargeLogic { get; private set; }
2023-08-22 19:08:45 +08:00
public bool canRelease
{
get
{
if (CodeDefine.Fight.SkipSkillCDCheck)
{
return true;
}
if (!owner.isReady) return false;
if (owner.statusData.isDead) return false;
return chargeLogic.nowStoreCount > 0;
2023-08-22 19:08:45 +08:00
}
}
2023-10-19 15:00:19 +08:00
public SkillHandle(GameUnit owner, DataSkill configData)
2023-08-22 19:08:45 +08:00
{
this.owner = owner;
2023-10-19 15:00:19 +08:00
runtimeData = new SkillRuntimeData(configData);
chargeLogic = SkillChargeFactory.CreateChargeLogic(this);
2023-08-22 19:08:45 +08:00
}
public void LogicUpdate(float dt)
{
// var scale = owner.fightData.skillCdReduceScale;
// runtimeData.remainCDTime -= dt * scale;
chargeLogic.TriggerTimeChange(dt);
}
public void TriggerNormalAttack()
{
chargeLogic.TriggerNormalAttack();
}
public void TriggerBeAttack()
{
chargeLogic.TriggerBeAttack();
}
public void ReduceSkillCd(float reduceTime)
{
if (chargeLogic is SkillChargeTime timeLogic)
{
timeLogic.AddPassTime(reduceTime);
}
}
public void ReduceSkillCdPercent(float reducePercent)
{
if (chargeLogic is SkillChargeTime timeLogic)
{
timeLogic.AddPassTime(timeLogic.rawConfig.ChargeParam * reducePercent);
}
2023-08-22 19:08:45 +08:00
}
public void AddSkillStoreCount(int addCount)
{
if (chargeLogic is BaseSkillCharge baseSkillCharge)
{
baseSkillCharge.AddStoreCount(addCount);
}
}
2023-08-22 19:08:45 +08:00
public void Use(int targetCellIndex)
{
if (!canRelease)
{
DebugUtil.LogError("技能未准备好或者CD未冷却");
return;
}
2024-05-17 15:37:56 +08:00
DebugUtil.LogG($"owner:{owner.GetUnitDesc()} 释放技能:{runtimeData.configData.ID} {runtimeData.configData.NameRead} 目标:{targetCellIndex}");
2025-04-09 16:00:50 +08:00
if (owner.debugShowInfo.cacheConfigId != 0)
{
EventManager.Instance.Send(EventManager.EventName.Guide_UseSkillPre, owner.debugShowInfo.cacheConfigId);
}
owner._UseSkill(targetCellIndex, this);
if (!CodeDefine.Fight.SkipSkillCDCheck)
{
chargeLogic.TriggerUse();
}
if (owner.debugShowInfo.cacheConfigId != 0)
{
EventManager.Instance.Send(EventManager.EventName.INFIGHT_AUDIO_USE_SKILL, owner.debugShowInfo.cacheConfigId);
}
2023-08-22 19:08:45 +08:00
}
public void TriggerSkillEnd()
{
// 技能结束时触发,重置技能CD
}
2023-08-22 19:08:45 +08:00
}
}