public static GetSkillStartPosition ( Vector3 srcPos, TableConfig cfg, |
||
srcPos | Vector3 | |
cfg | TableConfig | |
instance | ||
srcId | int | |
targetId | int | |
targetPos | Vector3 | |
Результат | bool |
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); } GameObject targetObj = senderObj.TargetGfxObj; if (null != senderObj.TrackEffectObj) { obj = senderObj.TrackEffectObj; targetObj = senderObj.GfxObj; } if (curSectionTime < StartTime) { return(true); } if (m_IsForRoundMove) { Vector3 srcPos = obj.transform.position; Vector3 targetPos = Vector3.zero; if (null != targetObj) { targetPos = targetObj.transform.position; } TriggerUtil.GetSkillStartPosition(srcPos, senderObj.ConfigData, instance, senderObj.ActorId, senderObj.TargetActorId, ref targetPos); if (targetPos.sqrMagnitude > Geometry.c_FloatPrecision) { float angle = Geometry.GetYRadian(new ScriptRuntime.Vector2(srcPos.x, srcPos.z), new ScriptRuntime.Vector2(targetPos.x, targetPos.z)); ScriptRuntime.Vector2 newPos = new ScriptRuntime.Vector2(targetPos.x, targetPos.z) + Geometry.GetRotate(new ScriptRuntime.Vector2(m_RelativeOffset.x, m_RelativeOffset.z), angle); targetPos = new Vector3(newPos.X, srcPos.y + m_RelativeOffset.y, newPos.Y); TriggerUtil.MoveObjTo(obj, targetPos); } } else if (null != targetObj) { //Vector3 pos = targetObj.transform.TransformPoint(m_RelativeOffset); Vector3 srcPos = obj.transform.position; Vector3 pos = Vector3.zero; if (null != targetObj) { pos = targetObj.transform.position; } TriggerUtil.GetSkillStartPosition(srcPos, senderObj.ConfigData, instance, senderObj.ActorId, senderObj.TargetActorId, ref pos); pos.y = srcPos.y; TriggerUtil.MoveObjTo(obj, pos); } return(false); }
private void CalNewSpeedWithTarget(GfxSkillSenderInfo senderObj, SkillInstance instance) { GameObject obj = senderObj.GfxObj; GameObject target = senderObj.TargetGfxObj; if (null == obj) { return; } Vector3 srcPos = obj.transform.position; Vector3 targetPos = Vector3.zero; if (null != target) { targetPos = target.transform.position; } if (m_IsForRoundMove) { TriggerUtil.GetSkillStartPosition(srcPos, senderObj.ConfigData, instance, senderObj.ActorId, senderObj.TargetActorId, ref targetPos); m_TargetPos = targetPos; } else if (null == target) { return; } float cur_distance_z = 0; for (int i = 0; i < m_SectionListCopy.Count; i++) { cur_distance_z += (m_SectionListCopy[i].speedVect.z * m_SectionListCopy[i].moveTime + m_SectionListCopy[i].accelVect.z * m_SectionListCopy[i].moveTime * m_SectionListCopy[i].moveTime / 2.0f); } Vector3 target_motion = (targetPos - obj.transform.position); target_motion.y = 0; float target_distance_z = target_motion.magnitude; float speed_ratio = 1; if (cur_distance_z != 0) { speed_ratio = target_distance_z / cur_distance_z; } for (int i = 0; i < m_SectionListCopy.Count; i++) { m_SectionListCopy[i].speedVect.z *= speed_ratio; m_SectionListCopy[i].accelVect.z *= speed_ratio; } }
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 (null == obj) { return(false); } GameObject target = senderObj.TargetGfxObj; if (null != senderObj.TrackEffectObj) { obj = senderObj.TrackEffectObj; target = senderObj.GfxObj; } if (curSectionTime < StartTime) { return(true); } if (m_IsForRoundMove) { Vector3 srcPos = obj.transform.position; Vector3 targetPos = Vector3.zero; if (null != target) { targetPos = target.transform.position; } TriggerUtil.GetSkillStartPosition(srcPos, senderObj.ConfigData, instance, senderObj.ActorId, senderObj.TargetActorId, ref targetPos); if (targetPos.sqrMagnitude > Geometry.c_FloatPrecision) { instance.CustomDatas.AddData <Vector3>(targetPos); } } else { Vector3 pos = obj.transform.position; instance.CustomDatas.AddData <Vector3>(pos); } 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 (null == obj) { return(false); } GameObject targetObj = senderObj.TargetGfxObj; if (null != senderObj.TrackEffectObj) { obj = senderObj.TrackEffectObj; targetObj = senderObj.GfxObj; } bool isTower = !EntityController.Instance.IsMovableEntity(obj); if (isTower) { return(false); } if (!m_TargetChecked) { m_TargetChecked = true; m_RealDuration = m_Duration; m_RealVelocity = m_Velocity; if (m_RealDuration <= 0) { m_RealDuration += instance.CurSectionDuration; } if (m_RealDuration <= 0) { LogSystem.Warn("jump duration is 0, skill id:{0} dsl skill id:{1}", senderObj.SkillId, instance.DslSkillId); return(false); } if (null != targetObj || m_IsForRoundMove) { Vector3 srcPos = obj.transform.position; Vector3 targetPos = Vector3.zero; if (null != targetObj) { targetPos = targetObj.transform.position; } if (m_IsForRoundMove) { TriggerUtil.GetSkillStartPosition(srcPos, senderObj.ConfigData, instance, senderObj.ActorId, senderObj.TargetActorId, ref targetPos); } if (targetPos.sqrMagnitude > Geometry.c_FloatPrecision) { float degree = Geometry.GetYRadian(new ScriptRuntime.Vector2(srcPos.x, srcPos.z), new ScriptRuntime.Vector2(targetPos.x, targetPos.z)); ScriptRuntime.Vector2 newPos = new ScriptRuntime.Vector2(targetPos.x, targetPos.z) + Geometry.GetRotate(new ScriptRuntime.Vector2(m_Offset.x, m_Offset.z), degree); targetPos = new Vector3(newPos.X, targetPos.y + m_Offset.y, newPos.Y); m_TargetPos = targetPos; if (m_StopAtTarget == (int)StopAtTargetType.AdjustVelocity) { m_RealVelocity = (long)(1000.0f * (targetPos - srcPos).magnitude / m_RealDuration); } else if (m_StopAtTarget == (int)StopAtTargetType.AdjustTime) { m_RealDuration = (long)(1000.0f * (targetPos - srcPos).magnitude / m_RealVelocity); CalcYVelocityAndG(); } m_Forward = targetPos - srcPos; m_Forward.y = 0; m_Forward.Normalize(); } else { m_Forward = obj.transform.forward; } } else { m_Forward = obj.transform.forward; } m_InitY = obj.transform.position.y; } if (curSectionTime < StartTime) { return(true); } else if (curSectionTime <= StartTime + m_RealDuration) { float t = (float)(int)(curSectionTime - StartTime) / 1000.0f; float disty = m_YVelocity * t - m_G * t * t / 2; float dist = TriggerUtil.ConvertToSecond(delta) * m_RealVelocity; Vector3 targetPos = obj.transform.position + m_Forward * dist; targetPos.y = m_InitY + disty; TriggerUtil.MoveObjTo(obj, targetPos); return(true); } else { Vector3 srcPos = obj.transform.position; if (m_IsForRoundMove && m_TargetPos.sqrMagnitude > Geometry.c_FloatPrecision) { srcPos = m_TargetPos; } obj.transform.position = new Vector3(srcPos.x, m_InitY, srcPos.z); return(false); } }