GetSkillImpactId() static private method

static private GetSkillImpactId ( object>.Dictionary variables, TableConfig cfg ) : int
variables object>.Dictionary
cfg TableConfig
return int
        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);
            }
            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 #5
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 #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 (null != senderObj.TrackEffectObj)
            {
                obj = senderObj.TrackEffectObj;
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            int senderId   = 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)
            {
                senderId = senderObj.ObjId;
            }
            else
            {
                senderId = senderObj.TargetObjId;
            }
            float range = 0;

            TableConfig.Skill cfg = senderObj.ConfigData;
            if (null != cfg)
            {
                range = cfg.aoeSize;
            }
            long    duration = m_DurationTime.Get(instance);
            float   angle    = Geometry.DegreeToRadian(obj.transform.localRotation.eulerAngles.y);
            Vector3 center   = obj.transform.TransformPoint(m_RelativeCenter);

            if (!m_IsStarted)
            {
                m_IsStarted = true;
                m_LastPos   = center;
            }
            else if ((center - m_LastPos).sqrMagnitude >= 0.25f || StartTime + duration < curSectionTime)
            {
                Vector3    c           = (m_LastPos + center) / 2;
                Vector3    angleu      = center - m_LastPos;
                float      queryRadius = range + angleu.magnitude / 2;
                int        ct          = 0;
                bool       isCollide   = false;
                List <int> targetIds   = new List <int>();
                GameFramework.PluginFramework.Instance.KdTree.QueryWithFunc(c.x, c.y, c.z, queryRadius, (float distSqr, GameFramework.KdTreeObject kdTreeObj) => {
                    int targetId = kdTreeObj.Object.GetId();
                    if (targetType == (int)SkillTargetType.Enemy && CharacterRelation.RELATION_ENEMY == EntityController.Instance.GetRelation(senderId, targetId) ||
                        targetType == (int)SkillTargetType.Friend && CharacterRelation.RELATION_FRIEND == EntityController.Instance.GetRelation(senderId, targetId))
                    {
                        bool isMatch = Geometry.IsCapsuleDiskIntersect(new ScriptRuntime.Vector2(m_LastPos.x, m_LastPos.z), new ScriptRuntime.Vector2(angleu.x, angleu.z), range, new ScriptRuntime.Vector2(kdTreeObj.Position.X, kdTreeObj.Position.Z), kdTreeObj.Radius);
                        if (isMatch)
                        {
                            isCollide = true;
                            if (!m_SingleHit || !m_Targets.Contains(targetId))
                            {
                                m_Targets.Add(targetId);
                                Dictionary <string, object> args;
                                TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
                                EntityController.Instance.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ObjId, senderId, targetId, impactId, IsFinal, args);
                                targetIds.Add(targetId);
                                ++ct;
                                if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                                {
                                    return(true);
                                }
                                else
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                    return(true);
                });
                m_LastPos = center;
                if (isCollide && m_FinishOnCollide)
                {
                    return(false);
                }
            }
            if (StartTime + duration < curSectionTime)
            {
                instance.StopCurSection();
                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);
            }
            Scene      scene = senderObj.Scene;
            EntityInfo obj   = senderObj.GfxObj;

            if (obj == null)
            {
                return(false);
            }
            if (curSectionTime < StartTime)
            {
                return(true);
            }
            int senderId   = 0;
            int targetType = scene.EntityController.GetTargetType(senderObj.ActorId, senderObj.ConfigData, senderObj.Seq);
            int impactId   = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);

            if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill)
            {
                senderId = senderObj.ActorId;
            }
            else
            {
                senderId = senderObj.TargetActorId;
            }

            float range = 0;

            TableConfig.Skill cfg = senderObj.ConfigData;
            if (null != cfg)
            {
                range = cfg.aoeSize;
            }
            float   angle  = obj.GetMovementStateInfo().GetFaceDir();
            Vector3 center = Geometry.TransformPoint(obj.GetMovementStateInfo().GetPosition3D(), m_RelativeCenter, angle);

            if (!m_IsStarted)
            {
                m_IsStarted = true;
                m_LastPos   = center;
            }
            else if ((center - m_LastPos).LengthSquared() >= 0.25f || StartTime + m_DurationTime < curSectionTime)
            {
                Vector3 c           = (m_LastPos + center) / 2;
                Vector3 angleu      = center - m_LastPos;
                float   queryRadius = range + angleu.Length() / 2;

                int  ct        = 0;
                bool isCollide = false;
                scene.KdTree.Query(c.X, c.Y, c.Z, queryRadius, (float distSqr, KdTreeObject kdTreeObj) => {
                    int targetId = kdTreeObj.Object.GetId();
                    if (targetType == (int)SkillTargetType.Enemy && CharacterRelation.RELATION_ENEMY == scene.EntityController.GetRelation(senderId, targetId) ||
                        targetType == (int)SkillTargetType.Friend && CharacterRelation.RELATION_FRIEND == scene.EntityController.GetRelation(senderId, targetId))
                    {
                        bool isMatch = Geometry.IsCapsuleDiskIntersect(new ScriptRuntime.Vector2(center.X, center.Z), new ScriptRuntime.Vector2(angleu.X, angleu.Z), range, new ScriptRuntime.Vector2(kdTreeObj.Position.X, kdTreeObj.Position.Z), kdTreeObj.Radius);
                        if (isMatch)
                        {
                            isCollide = true;
                            if (!m_SingleHit || !m_Targets.Contains(targetId))
                            {
                                m_Targets.Add(targetId);
                                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);
                                ++ct;
                                if (senderObj.ConfigData.maxAoeTargetCount <= 0 || ct < senderObj.ConfigData.maxAoeTargetCount)
                                {
                                    return(true);
                                }
                                else
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                    return(true);
                });

                m_LastPos = center;

                if (isCollide && m_FinishOnCollide)
                {
                    return(false);
                }
            }
            if (StartTime + m_DurationTime < curSectionTime)
            {
                instance.StopCurSection();
                return(false);
            }
            return(true);
        }
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 senderId;
                    int targetId;
                    scene.EntityController.CalcSenderAndTarget(senderObj, out senderId, out targetId);
                    string effectPath = SkillParamUtility.RefixResourceVariable(m_EffectPath, instance, senderObj.ConfigData.resources);
                    string emitBone   = SkillParamUtility.RefixStringVariable(m_EmitBone, instance);
                    float  emitSpeed  = m_EmitSpeed;
                    if (!string.IsNullOrEmpty(effectPath))
                    {
                        EntityInfo target = scene.EntityController.GetGameObject(targetId);
                        if (null != target)
                        {
                            int emitImpact = m_EmitImpact;
                            if (!m_IsExternalImpact)
                            {
                                emitImpact = SkillInstance.GenInnerEmitSkillId(m_EmitImpact <= 0 ? 1 : m_EmitImpact);
                            }
                            int impactId = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData);
                            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, targetId, emitBone, m_EmitImpact, m_Pos, args);
                        }
                    }
                    else
                    {
                        LogSystem.Warn("[skill:{0} dsl skill id:{1}] emit effect is empty.", senderObj.SkillId, instance.DslSkillId);
                    }
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                return(false);
            }
        }
Beispiel #9
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);
            }
        }