namespace Gameplay.Skill.Charge { public class SkillChargeTime : BaseSkillCharge { private float _passTime; private readonly float _cdTime; public SkillChargeTime(SkillHandle skillHandle) : base(skillHandle) { _passTime = 0f; _cdTime = rawConfig.ChargeParam; } protected override void _OnTimeChange(float dt) { base._OnTimeChange(dt); var scaleTime = dt * skillHandle.owner.fightData.skillCdReduceScale; _UpdateTime(scaleTime); } public void ForceFullCharge() { nowStoreCount = _maxStoreCount; chargeProgress = 0f; } public void AddPassTime(float addTime) { _UpdateTime(addTime); } private void _UpdateTime(float dt) { if (nowStoreCount < _maxStoreCount) { _passTime += dt; if (_passTime >= _cdTime) { _passTime = 0f; nowStoreCount++; } chargeProgress = _passTime / _cdTime; } else { chargeProgress = 0f; _passTime = 0f; } } protected override void _OnUse() { base._OnUse(); _UpdateTime(0f); } } }