CTT/Server/Hotfix/Game/SkillSystem/NewSkill/Component/SkillOptions/SkillOptionLogic_延迟操作.cs

48 lines
1.9 KiB
C#
Executable File

using Cal;
namespace ET
{
public class SkillOptionLogic_: SkillOptionLogicBase
{
public override SkillOptionType skillOptionType => SkillOptionType.;
public override SkillOptionBase skillOptionBase { get; set; }
SkillOption_ skillOption;
public override void HandleEvent(ISkillSender skillSender)
{
skillOption = skillOptionBase.As<SkillOption_>();
if (!SkillHelper.GetParam(skillOption.time, skillSender.skillConfigId, out float delayTime))
return;
ExecuteAsync(skillSender,delayTime).Coroutine();
}
private async ETTask ExecuteAsync(ISkillSender skillSender, float delayTime)
{
Unit target = skillSender.caster.GetComponent<TargetableUnitComponent>().currTarget;
long targetInstanceId = target.InstanceId;
await TimerComponent.Instance.WaitAsync((long) delayTime * 1000);
if (target.InstanceId != targetInstanceId)
{
Log.Error($"taget is null where id is {target?.Id} {target.InstanceId} old instanceId = {targetInstanceId}");
return;
}
if (!skillSender.caster)
{
Log.Error($"caster is null where id is {target?.Id}");
return;
}
TargetableUnitComponent targetComponent = skillSender.caster.GetComponent<TargetableUnitComponent>();
Unit oldTarget = targetComponent.currTarget;
targetComponent.currTarget = target;
foreach (SkillOptionBase item in skillOption.value)
{
SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item);
skillOptionLogicBase.HandleEvent(skillSender);
}
targetComponent.currTarget = oldTarget;
}
}
}