2023-12-28 13:49:45 +08:00
|
|
|
|
using System.Collections.Generic;
|
2024-06-12 19:09:10 +08:00
|
|
|
|
using Framework;
|
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;
|
2024-10-16 20:47:56 +08:00
|
|
|
|
using Gameplay.Guide;
|
|
|
|
|
|
using Gameplay.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;
|
2023-11-15 13:15:57 +08:00
|
|
|
|
|
|
|
|
|
|
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 bool canRelease
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
2024-09-12 14:11:38 +08:00
|
|
|
|
if (!owner.isReady) return false;
|
|
|
|
|
|
if (owner.statusData.isDead) return false;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
return runtimeData.remainCDTime <= 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
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);
|
2023-08-22 19:08:45 +08:00
|
|
|
|
|
2024-10-16 20:47:56 +08:00
|
|
|
|
if (GuideManager.Instance.IsGuiding && // 新手引导特殊处理
|
|
|
|
|
|
null != LevelManager.Instance.CurrentLevel &&
|
|
|
|
|
|
100002 == LevelManager.Instance.CurrLevel.Cfg.Id &&
|
|
|
|
|
|
owner is Character.Character character &&
|
|
|
|
|
|
100003 == character.ConfigId) // 克劳迪亚
|
|
|
|
|
|
runtimeData.remainCDTime = 0f;
|
|
|
|
|
|
else
|
|
|
|
|
|
// 一开始处于不可释放状态
|
|
|
|
|
|
runtimeData.remainCDTime = runtimeData.maxCdTime;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void LogicUpdate(float dt)
|
|
|
|
|
|
{
|
2024-07-17 19:11:14 +08:00
|
|
|
|
var scale = owner.fightData.skillCdReduceScale;
|
|
|
|
|
|
runtimeData.remainCDTime -= dt * scale;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void ReduceSkillCd(float reduceTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
runtimeData.remainCDTime -= reduceTime;
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Use(int targetCellIndex)
|
|
|
|
|
|
{
|
2024-09-12 14:11:38 +08:00
|
|
|
|
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}");
|
2024-07-17 19:11:14 +08:00
|
|
|
|
runtimeData.remainCDTime = runtimeData.maxCdTime;
|
2023-12-26 13:00:53 +08:00
|
|
|
|
owner._UseSkill(targetCellIndex, this);
|
2024-06-12 19:09:10 +08:00
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2024-03-28 13:19:52 +08:00
|
|
|
|
|
|
|
|
|
|
public void TriggerSkillEnd()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 技能结束时触发,重置技能CD
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2023-08-22 19:08:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|