GetSkillStartPosition() public static method

public static GetSkillStartPosition ( Vector3 srcPos, TableConfig cfg, SkillInstance instance, int srcId, int targetId, Vector3 &targetPos ) : bool
srcPos Vector3
cfg TableConfig
instance SkillSystem.SkillInstance
srcId int
targetId int
targetPos Vector3
return 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);
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
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 (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);
        }
Beispiel #4
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 (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);
            }
        }