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(); 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().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(); Unit oldTarget = targetComponent.currTarget; targetComponent.currTarget = target; foreach (SkillOptionBase item in skillOption.value) { SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item); skillOptionLogicBase.HandleEvent(skillSender); } targetComponent.currTarget = oldTarget; } } }