public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
{
GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;
if (null == senderObj) return false;
Scene scene = senderObj.Scene;
EntityInfo obj = senderObj.GfxObj;
if (obj == null) {
return false;
}
long durationTime = m_DurationTime;
long intervalTime = m_IntervalTime;
if (durationTime <= 0) {
durationTime = (long)senderObj.ConfigData.duration;
}
if (intervalTime <= 0) {
intervalTime = (long)senderObj.ConfigData.interval;
}
if (curSectionTime < StartTime) {
return true;
}
if (curSectionTime > StartTime + durationTime) {
return false;
}
if (m_LastTime + intervalTime < curSectionTime) {
m_LastTime = curSectionTime;
int targetType = scene.EntityController.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq);
int impactId = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
int senderId;
int targetId;
scene.EntityController.CalcSenderAndTarget(senderObj, out senderId, out targetId);
if (senderObj.ConfigData.aoeType != (int)SkillAoeType.Unknown) {
float minDistSqr = float.MaxValue;
TriggerUtil.AoeQuery(senderObj, instance, senderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
if (distSqr < minDistSqr) {
minDistSqr = distSqr;
targetId = objId;
}
return true;
});
}
Dictionary<string, object> args;
TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
scene.EntityController.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, targetId, impactId, args);
}
return true;
}