AoeQuery() public static method

public static AoeQuery ( GameObject srcObj, GameObject targetObj, int aoeType, float range, float angleOrLength, SkillInstance instance, int senderId, int targetType, Vector3 relativeCenter, bool relativeToTarget, MyFunc callback ) : void
srcObj UnityEngine.GameObject
targetObj UnityEngine.GameObject
aoeType int
range float
angleOrLength float
instance SkillSystem.SkillInstance
senderId int
targetType int
relativeCenter Vector3
relativeToTarget bool
callback MyFunc
return void
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;

            if (null == senderObj)
            {
                return(false);
            }
            GameObject obj = senderObj.GfxObj;

            if (obj == null)
            {
                return(false);
            }
            long durationTime = m_DurationTime.Get(instance);
            long intervalTime = m_IntervalTime.Get(instance);

            if (durationTime <= 0)
            {
                durationTime = senderObj.ConfigData.duration;
            }
            if (intervalTime <= 0)
            {
                intervalTime = senderObj.ConfigData.interval;
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            if (curSectionTime > StartTime + durationTime)
            {
                return(false);
            }
            if (m_LastTime + intervalTime < curSectionTime)
            {
                m_LastTime = curSectionTime;
                int targetType = EntityController.Instance.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq);
                int impactId   = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                int senderId;
                int targetId;
                EntityController.Instance.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);
                EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, targetId, impactId, IsFinal, args);
            }
            return(true);
        }
Beispiel #2
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;

            if (null == senderObj)
            {
                return(false);
            }
            GameObject obj = senderObj.GfxObj;

            if (obj == null)
            {
                return(false);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            long duration = m_DurationTime.Get(instance);
            long interval = m_IntervalTime.Get(instance);

            if (curSectionTime > StartTime + duration)
            {
                return(false);
            }
            if (m_LastTime + interval < curSectionTime)
            {
                m_LastTime = curSectionTime;
                int targetType = EntityController.Instance.GetTargetType(senderObj.ObjId, senderObj.ConfigData, senderObj.Seq);
                int impactId   = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                int senderId   = 0;
                if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                {
                    senderId = senderObj.ObjId;
                }
                else
                {
                    senderId = senderObj.TargetObjId;
                }
                int        ct        = 0;
                List <int> targetIds = new List <int>();
                TriggerUtil.AoeQuery(senderObj, instance, senderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                    Dictionary <string, object> args;
                    TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
                    EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ObjId, senderId, objId, impactId, IsFinal, args);
                    targetIds.Add(objId);
                    ++ct;
                    if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
            }
            return(true);
        }
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;

            if (null == senderObj)
            {
                return(false);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            if (m_RemainTime > 0 && curSectionTime > (StartTime + m_RemainTime))
            {
                return(false);
            }
            if (senderObj.ConfigData.aoeType != (int)SkillAoeType.Unknown)
            {
                int targetType = EntityController.Instance.GetTargetType(senderObj.ObjId, senderObj.ConfigData, senderObj.Seq);
                int senderId   = 0;
                if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                {
                    senderId = senderObj.ObjId;
                }
                else
                {
                    senderId = senderObj.TargetObjId;
                }
                int ct = 0;
                TriggerUtil.AoeQuery(senderObj, instance, senderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                    ++ct;
                    if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                    {
                        EntityController.Instance.KeepTarget(objId);
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
            }
            else
            {
                if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                {
                    EntityController.Instance.KeepTarget(senderObj.TargetObjId);
                }
                else
                {
                    EntityController.Instance.KeepTarget(senderObj.ObjId);
                }
            }
            return(true);
        }
        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 (null == obj)
            {
                return(false);
            }
            if (curSectionTime >= StartTime)
            {
                int targetType = scene.EntityController.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq);
                int impactId   = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                int senderId   = 0;
                if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                {
                    senderId = senderObj.ActorId;
                }
                else
                {
                    senderId = senderObj.TargetActorId;
                }
                int ct = 0;
                TriggerUtil.AoeQuery(senderObj, instance, senderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                    Dictionary <string, object> args;
                    TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
                    scene.EntityController.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, objId, impactId, args);
                    ++ct;
                    if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                return(false);
            }
            else
            {
                return(true);
            }
        }
        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);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            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(false);
        }
Beispiel #6
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;

            if (null == senderObj)
            {
                return(false);
            }
            GameObject obj = senderObj.GfxObj;

            if (obj == null)
            {
                return(false);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            long durationTime = m_DurationTime.Get(instance);
            long intervalTime = m_IntervalTime.Get(instance);

            if (curSectionTime > StartTime + durationTime)
            {
                return(false);
            }
            if (m_LastTime + intervalTime < curSectionTime)
            {
                m_LastTime = curSectionTime;
                int ct = m_Targets.Count;
                if (ct <= 0)
                {
                    int targetType = EntityController.Instance.GetTargetType(senderObj.ObjId, senderObj.ConfigData, senderObj.Seq);
                    int impactId   = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                    if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                    {
                        m_SenderId = senderObj.ObjId;
                    }
                    else
                    {
                        m_SenderId = senderObj.TargetObjId;
                    }
                    TriggerUtil.AoeQuery(senderObj, instance, m_SenderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                        m_SortedTargets.Add((int)(distSqr * c_MaxObjectId) * c_MaxObjectId + objId, objId);
                        return(true);
                    });
                    var vals = m_SortedTargets.Values;
                    if (senderObj.ConfigData.maxAoeTargetCount > 0 && vals.Count > senderObj.ConfigData.maxAoeTargetCount)
                    {
                        var enumerator = vals.GetEnumerator();
                        for (int ix = 0; ix < senderObj.ConfigData.maxAoeTargetCount; ++ix)
                        {
                            enumerator.MoveNext();
                            m_Targets.Add(enumerator.Current);
                        }
                    }
                    else
                    {
                        m_Targets.AddRange(vals);
                    }
                    m_CurTargetIndex = 0;
                    ct = m_Targets.Count;
                }
                if (ct > 0 && m_CurTargetIndex < ct)
                {
                    Dictionary <string, object> args;
                    TriggerUtil.CalcImpactConfig(0, m_ImpactId, instance, senderObj.ConfigData, out args);
                    EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ObjId, m_SenderId, m_Targets[m_CurTargetIndex], m_ImpactId, IsFinal, args);
                    ++m_CurTargetIndex;
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #7
0
        public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
        {
            GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;

            if (null == senderObj)
            {
                return(false);
            }
            GameObject obj = senderObj.GfxObj;

            if (obj == null)
            {
                return(false);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            int senderId;
            int targetId;

            EntityController.Instance.CalcSenderAndTarget(senderObj, out senderId, out targetId);
            int impactId = senderObj.ConfigData.impacttoself;

            if (senderObj.ConfigData.type != (int)SkillOrImpactType.Skill)
            {
                if (impactId <= 0)
                {
                    int skillId           = EntityController.Instance.GetImpactSkillId(senderObj.ObjId, senderObj.SkillId, senderObj.Seq);
                    TableConfig.Skill cfg = TableConfig.SkillProvider.Instance.GetSkill(skillId);
                    if (null != cfg)
                    {
                        impactId = cfg.impacttoself;
                    }
                }
            }
            if (m_Radius <= Geometry.c_FloatPrecision)
            {
                Dictionary <string, object> args;
                TriggerUtil.CalcImpactConfig(0, 0, instance, senderObj.ConfigData, out args);
                EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ObjId, senderId, senderId, impactId, true, args);
            }
            else
            {
                GameObject targetObj = senderObj.TargetGfxObj;
                int        ct        = 0;
                List <int> targetIds = new List <int>();
                TriggerUtil.AoeQuery(obj, targetObj, m_AoeType, m_Radius, m_AngleOrLength, instance, senderId, (int)SkillTargetType.Friend, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                    Dictionary <string, object> args;
                    TriggerUtil.CalcImpactConfig(0, 0, instance, senderObj.ConfigData, out args);
                    EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ObjId, senderId, objId, impactId, true, args);
                    targetIds.Add(objId);
                    ++ct;
                    if (m_MaxCount <= 0 || ct < m_MaxCount)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
            }
            return(false);
        }
Beispiel #8
0
        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 (null != obj)
            {
                if (curSectionTime >= StartTime)
                {
                    int targetType = scene.EntityController.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq);
                    int senderId   = 0;
                    if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
                    {
                        senderId = senderObj.ActorId;
                    }
                    else
                    {
                        senderId = senderObj.TargetActorId;
                    }
                    string effectPath = SkillParamUtility.RefixResourceVariable(m_EffectPath, instance, senderObj.ConfigData.resources);
                    int    emitImpact = m_EmitImpact;
                    if (!m_IsExternalImpact)
                    {
                        emitImpact = SkillInstance.GenInnerEmitSkillId(m_EmitImpact <= 0 ? 1 : m_EmitImpact);
                    }
                    int    impactId  = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                    string emitBone  = SkillParamUtility.RefixStringVariable(m_EmitBone, instance);
                    float  emitSpeed = m_EmitSpeed;
                    int    ct        = 0;
                    TriggerUtil.AoeQuery(senderObj, instance, senderId, targetType, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
                        Dictionary <string, object> args;
                        TriggerUtil.CalcImpactConfig(emitImpact, impactId, instance, senderObj.ConfigData, out args);
                        Dictionary <string, object> addArgs = new Dictionary <string, object>()
                        {
                            { "emitEffect", effectPath }, { "emitSpeed", emitSpeed }, { "emitDir", m_Dir }, { "emitScale", m_Scale }
                        };
                        foreach (var pair in addArgs)
                        {
                            if (args.ContainsKey(pair.Key))
                            {
                                args[pair.Key] = pair.Value;
                            }
                            else
                            {
                                args.Add(pair.Key, pair.Value);
                            }
                        }
                        scene.EntityController.TrackImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, objId, emitBone, emitImpact, m_Pos, args);
                        ++ct;
                        if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    });
                    //GameFramework.LogSystem.Debug("AoeEmitEffectTriger:{0}", m_EffectPath);
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }