GameFramework.Skill.Trigers.PeriodicallyImpactTrigger.Execute C# (CSharp) Method

Execute() public method

public Execute ( object sender, SkillInstance instance, long delta, long curSectionTime ) : bool
sender object
instance SkillSystem.SkillInstance
delta long
curSectionTime long
return bool
        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;
        }

Usage Example

Example #1
0
 static public int Execute(IntPtr l)
 {
     try {
         GameFramework.Skill.Trigers.PeriodicallyImpactTrigger self = (GameFramework.Skill.Trigers.PeriodicallyImpactTrigger)checkSelf(l);
         System.Object a1;
         checkType(l, 2, out a1);
         SkillSystem.SkillInstance a2;
         checkType(l, 3, out a2);
         System.Int64 a3;
         checkType(l, 4, out a3);
         System.Int64 a4;
         checkType(l, 5, out a4);
         var ret = self.Execute(a1, a2, a3, a4);
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }