static private GetSkillImpactId ( object>.Dictionary |
||
variables | object>.Dictionary | |
cfg | TableConfig | |
리턴 | 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); }
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); }
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); }
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); }
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); } }
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); } }