Esempio n. 1
0
    void ActionHandler(SkillActionData actData)
    {
        m_PlayerBehaviour.Invincible = (actData.m_invincible == 1);
        m_PlayerBehaviour.IronBody   = (actData.m_ironBody == 1);

        m_actData      = (SkillActionData)actData.Clone();
        m_isAnimPlayed = false;

        m_PlayerBehaviour.ChangeDisplayState(m_actData.m_moveType);
    }
Esempio n. 2
0
    public void ActionHandler(SkillActionData actData)
    {
        m_PlayerBehaviour.Invincible = (actData.m_invincible == 1);
        m_PlayerBehaviour.IronBody   = (actData.m_ironBody == 1);
        m_isAnimPlayed = false;
        m_lockedTarget = null;
        m_actData      = (SkillActionData)actData.Clone();
        ((PlayerBehaviour)this.m_roleBehaviour).ChangeDisplayState(m_actData.m_moveType);
        //2014-10-09 普通攻击的锁定目标计算规则有修改
        //if (actData.m_ani_followtype == 1
        //    && m_PlayerBehaviour.ActionLockTarget!=null
        //    && m_PlayerBehaviour.ActionLockTarget.GO!=null
        //    && CheckAtAttackRange(m_PlayerBehaviour.ActionLockTarget))
        if (actData.m_ani_followtype == 6 && //定速到达
            m_PlayerBehaviour.ActionLockTarget != null &&
            m_PlayerBehaviour.ActionLockTarget.GO != null)
        {
            m_lockedTarget = m_PlayerBehaviour.ActionLockTarget;
            var targetPosition = m_PlayerBehaviour.ActionLockTarget.GO.transform.position;
            m_PlayerBehaviour.ThisTransform.LookAt(new Vector3(targetPosition.x, m_PlayerBehaviour.ThisTransform.position.y, targetPosition.z));
        }
        else
        {
            m_PlayerBehaviour.ThisTransform.Rotate(0, m_actData.m_startAngle, 0);
        }
        m_attackDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward;
        //影子玩家参考主角方向
        if (m_PlayerBehaviour.IsCopy)
        {
            m_attackDire = m_hero.transform.TransformDirection(m_attackDire);
        }
        else
        {
            m_attackDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_attackDire);
        }

        //判断Action的移动类型是否必达,如果是,则判断是为点还是可移动目标(目前只有点)。计算移动速度
        if (m_skillBase.SkillData.m_directionParam == 2 && m_actData.m_ani_followtype == 3)
        {
            m_PlayerBehaviour.ChangeForward(m_touchPoint);
            dis = Vector3.Distance(m_playerStartPosition, m_touchPoint);
            s   = dis / (m_actData.m_duration / 1000.0f);
            s   = s * Time.deltaTime;
        }
        //技能施放位置修正
        Vector3 correctPos = new Vector3(m_actData.m_startPos.x, 0, m_actData.m_startPos.y);

        correctPos = m_PlayerBehaviour.ThisTransform.TransformDirection(correctPos);
        m_PlayerBehaviour.ThisTransform.Translate(correctPos);
        this.IsStateReady = true;
    }
Esempio n. 3
0
 public void ActionHandler(SkillActionData actData)
 {
     m_PlayerBehaviour.Invincible = (actData.m_invincible == 1);
     m_PlayerBehaviour.IronBody   = (actData.m_ironBody == 1);
     m_actData    = (SkillActionData)actData.Clone();
     m_scrollDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward;
     //影子玩家参考主角方向
     if (m_PlayerBehaviour.IsCopy)
     {
         m_scrollDire = m_hero.transform.TransformDirection(m_scrollDire);
     }
     else
     {
         m_scrollDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_scrollDire);
     }
     //TraceUtil.Log("开始滚动技能");
     this.IsStateReady = true;
 }
Esempio n. 4
0
    public void ActionHandler(SkillActionData actData)
    {
        m_PlayerBehaviour.Invincible = (actData.m_invincible == 1);
        m_PlayerBehaviour.IronBody   = (actData.m_ironBody == 1);
        m_isAnimPlayed        = false;
        m_lockedTarget        = null;
        marchForwardTargetPos = m_PlayerBehaviour.ThisTransform.position;
        hitRadius             = 0;
        //Debug.Log("Action Start Time:" + Time.realtimeSinceStartup);
        //2014-10-09 普通攻击的锁定目标计算规则有修改
        //if (actData.m_ani_followtype == 1
        //    && m_PlayerBehaviour.ActionLockTarget!=null
        //    && m_PlayerBehaviour.ActionLockTarget.GO!=null
        //    && CheckAtAttackRange(m_PlayerBehaviour.ActionLockTarget))
        if (actData.m_ani_followtype == 6 && //定速到达
            m_PlayerBehaviour.ActionLockTarget != null &&
            m_PlayerBehaviour.ActionLockTarget.GO != null)
        {
            m_lockedTarget        = m_PlayerBehaviour.ActionLockTarget;
            marchForwardTargetPos = new Vector3(m_lockedTarget.GO.transform.position.x, m_PlayerBehaviour.ThisTransform.position.y, m_lockedTarget.GO.transform.position.z);
            m_PlayerBehaviour.ThisTransform.LookAt(marchForwardTargetPos);
            //hitRadius = ((MonsterBehaviour)m_lockedTarget.Behaviour).m_MonsterConfigData._hitRadius;
            hitRadius = CommonDefineManager.Instance.CommonDefine.ChargeOffset;
        }
        else
        {
            m_PlayerBehaviour.ThisTransform.Rotate(0, actData.m_startAngle, 0);
        }
        m_actData    = (SkillActionData)actData.Clone();
        m_attackDire = Quaternion.Euler(0, m_actData.m_angle, 0) * Vector3.forward;
        //影子玩家参考主角方向
        if (m_PlayerBehaviour.IsCopy)
        {
            m_attackDire = m_hero.transform.TransformDirection(m_attackDire);
        }
        else
        {
            m_attackDire = m_PlayerBehaviour.ThisTransform.TransformDirection(m_attackDire);
        }



        this.IsStateReady = true;
    }
Esempio n. 5
0
    public void ActionHandler(SkillActionData actData)
    {
        m_isAnimPlayed = false;
        m_actData      = (SkillActionData)actData.Clone();
        ChangeDisplayState(m_actData.m_moveType);

        if (animation.GetClip(m_actData.m_animationId) == null)
        {
            TraceUtil.Log("当前角色不包含" + m_actData.m_animationId + "动画名称");
            return;
        }
        var t = Time.deltaTime;
        var s = m_actData.m_startSpeed * t + m_actData.m_acceleration * Mathf.Pow(t, 2) * 0.5f;

        m_actData.m_startSpeed += Mathf.FloorToInt(m_actData.m_acceleration * t);

        if (!m_isAnimPlayed || animation[m_actData.m_animationId].wrapMode == WrapMode.Loop)
        {
            animation.Play(m_actData.m_animationId);
            m_isAnimPlayed = true;
        }
    }
Esempio n. 6
0
    void ActionHandle(SkillActionData skillActionData)
    {
        if (skillActionData.m_actionId >= 57000011 && skillActionData.m_actionId <= 57000421)
        {
            float angel = m_MonsterBehaviour.ThisTransform.eulerAngles.y;
            TraceUtil.Log(SystemModel.Common, TraceLevel.Error, "UID:{0}, 动作ID: {1}, 动作开始角度:{2}", m_MonsterBehaviour.RoleDataModel.SMsg_Header.uidEntity, skillActionData.m_actionId, angel);
        }

        m_MonsterBehaviour.Invincible = (skillActionData.m_invincible == 1);
        m_MonsterBehaviour.IronBody   = (skillActionData.m_ironBody == 1);
        m_currentActionData           = (SkillActionData)skillActionData.Clone();
        m_isMomentArrives             = false;

        ((MonsterBehaviour)this.m_roleBehaviour).ChangeDisplayState(m_currentActionData.m_moveType);

        switch (m_currentActionData.m_ani_followtype)
        {
        case 1:        //跟随类型
            TypeID typeID;
            var    target = EntityController.Instance.GetEntityModel(m_FightTargetID, out typeID);
            if (target != null)
            {
                Vector3 lookAtPos = new Vector3(target.GO.transform.position.x, m_MonsterBehaviour.ThisTransform.position.y, target.GO.transform.position.z);
                m_MonsterBehaviour.ThisTransform.LookAt(lookAtPos);
            }
            break;

        case 3:        //
            m_actionBeginPos = m_MonsterBehaviour.ThisTransform.position;
            var player = PlayerManager.Instance.GetEntityMode(m_FightTargetID);
            if (player != null)
            {
                m_targetPos   = player.Behaviour.transform.TransformPoint(new Vector3(m_currentActionData.m_followPositionOffset.y, m_MonsterBehaviour.ThisTransform.position.y, m_currentActionData.m_followPositionOffset.x));
                m_targetPos.y = m_high;
                m_MonsterBehaviour.ThisTransform.LookAt(m_targetPos);
            }
            break;

        case 5:
            m_actionBeginPos = m_MonsterBehaviour.ThisTransform.position;
            m_targetPos      = new Vector3(skillActionData.m_followPositionOffset.x, m_MonsterBehaviour.ThisTransform.position.y, -skillActionData.m_followPositionOffset.y);
            m_MonsterBehaviour.ThisTransform.LookAt(m_targetPos);
            if (skillActionData.m_duration <= 0)
            {
                m_isMomentArrives = true;

                if (skillActionData.IsIgnoreBlock || !SceneDataManager.Instance.IsPositionInBlock(m_targetPos))
                {
                    m_MonsterBehaviour.AttackToPoint(m_targetPos);
                }
            }
            break;

        default:
            //起始转角
            m_MonsterBehaviour.ThisTransform.Rotate(0, skillActionData.m_startAngle, 0);
            break;
        }

        //m_attackDirt = Quaternion.Euler(0,skillActionData.m_angle,0) * m_MonsterBehaviour.ThisTransform.forward;// * Vector3.forward;
        m_attackDirt = m_MonsterBehaviour.ThisTransform.forward;                //位移方向就是怪物朝向

        m_currentSkillAniName = skillActionData.m_animationId;
        if (skillActionData.IsIgnoreBlock)
        {
            m_roleAnimationComponent.Play(m_currentSkillAniName);
        }
        else
        {
            m_roleAnimationComponent.CrossFade(m_currentSkillAniName);
        }

        //技能施放位置修正
        Vector3 correctPos = new Vector3(m_currentActionData.m_startPos.x, 0, m_currentActionData.m_startPos.y);

        correctPos = m_MonsterBehaviour.ThisTransform.TransformPoint(correctPos);

        bool isPositionInBlock = !skillActionData.IsIgnoreBlock && SceneDataManager.Instance.IsPositionInBlock(correctPos);

        //如果是follow类型为3 ,持续时间为0,则无视移动中的阻挡
        if (!isPositionInBlock && m_currentActionData.m_ani_followtype == 3 && m_currentActionData.m_duration == 0)
        {
            //Vector3 moveToPos = correctPos + Vector3.Distance(m_actionBeginPos, m_targetPos)*m_attackDirt;
            Vector3 moveToPos = (correctPos - m_actionBeginPos) + m_targetPos;
            m_MonsterBehaviour.MoveToPoint(moveToPos);
            return;
        }

        m_MonsterBehaviour.ThisTransform.Rotate(0, m_currentActionData.m_angle, 0);       //最后转怪物的朝向,因为在前面会影响到TransformPoint的计算

        //如果进入阻挡
        if (isPositionInBlock)
        {
            Vector3 curPos       = m_MonsterBehaviour.ThisTransform.position; //当前位置
            Vector3 move         = (curPos - correctPos).normalized * 5;
            float   allDistance  = Vector3.Distance(curPos, correctPos);
            float   moveDistance = move.magnitude;
            int     allMoveTime  = (int)(allDistance / moveDistance);
            for (int i = 0; i <= allMoveTime; i++)
            {
                if (i == allMoveTime)
                {
                    correctPos = curPos;
                    break;
                }
                if (SceneDataManager.Instance.IsPositionInBlock(correctPos))
                {
                    correctPos += move;
                }
                else
                {
                    break;
                }
            }
        }

        m_MonsterBehaviour.MoveToPoint(correctPos);
        if (skillActionData.m_actionId >= 57000011 && skillActionData.m_actionId <= 57000421)
        {
            float endangel = m_MonsterBehaviour.ThisTransform.eulerAngles.y;
            TraceUtil.Log(SystemModel.Common, TraceLevel.Error, "UID:{0}, 动作ID: {1}, 动作结束角度:{2}", m_MonsterBehaviour.RoleDataModel.SMsg_Header.uidEntity, skillActionData.m_actionId, endangel);
        }
    }