override public void OnEnter(PlayerState lastState)
    {
        dirToBasket = GameUtils.HorizonalNormalized(m_match.mCurScene.mBasket.m_vShootTarget, m_player.position);

        IM.Number cross = IM.Vector3.Cross(dirToBasket, m_player.moveDirection).y;
        isTurnLeft = (cross < IM.Number.zero);
        if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft)
        {
            m_animType = isTurnLeft ? AnimType.B_TYPE_0 : AnimType.B_TYPE_1;
        }
        else if (m_player.m_eHandWithBall == Player.HandWithBall.eRight)
        {
            m_animType = isTurnLeft ? AnimType.B_TYPE_2 : AnimType.B_TYPE_3;
        }

        m_curAction = m_mapAnimType[m_animType];
        PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction);
        PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle;
        if (keyFrame != null)
        {
            IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * dirToBasket;
            m_player.forward = dirFaceTo;
        }

        m_curAction = m_mapAnimType[m_animType];
        m_player.animMgr.Play(m_curAction, true).rootMotion.Reset();
    }
    override public void OnEnter(PlayerState lastState)
    {
        base.OnEnter(lastState);

        if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft)
        {
            m_animType = AnimType.B_TYPE_0;
        }
        else if (m_player.m_eHandWithBall == Player.HandWithBall.eRight)
        {
            m_animType = AnimType.B_TYPE_1;
        }

        m_curAction = m_mapAnimType[m_animType];

        m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position);
        PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction);
        if (attr != null)
        {
            PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle;
            IM.Number frameRate = m_player.animMgr.GetFrameRate(m_curAction);

            m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position);
            IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * m_dirPlayerToBasket;
            IM.Number  fAngle    = IM.Vector3.Angle(m_player.forward, dirFaceTo);
            m_relAngle     = keyFrame.angle;
            m_turningSpeed = IM.Math.Deg2Rad(fAngle) / (keyFrame.frame / frameRate);
            m_rotateTo     = RotateTo.eBasket;
            m_rotateType   = RotateType.eSmooth;
            m_bMoveForward = false;
        }

        m_player.animMgr.CrossFade(m_curAction, false);
        m_player.m_stamina.m_bEnableRecover = false;
    }
예제 #3
0
    override public void OnEnter(PlayerState lastState)
    {
        base.OnEnter(lastState);

        m_dirPlayerToBasket = GameUtils.HorizonalNormalized(m_basket.m_vShootTarget, m_player.position);

        if (curAnimStep == 1)
        {
            Player target = m_player.m_defenseTarget;
            if (target != null)
            {
                isCompeteWin = _Competing(m_player, target);
                m_match.m_context.m_backToBackWinnerId = isCompeteWin ? m_player.m_roomPosId : target.m_roomPosId;
            }
            if (m_player.m_eHandWithBall == Player.HandWithBall.eLeft)
            {
                m_animType = AnimType.B_TYPE_0;
            }
            else
            {
                m_animType = AnimType.B_TYPE_1;
            }
        }

        isCompeteWin = (m_match.m_context.m_backToBackWinnerId == m_player.m_roomPosId);
        Debug.Log("BackCompete: " + isCompeteWin + " m_match.m_context.m_backToBackWinnerId: " + m_match.m_context.m_backToBackWinnerId);

        m_curAction = m_mapAnimType[m_animType];
        PlayerAnimAttribute.AnimAttr attr = m_player.m_animAttributes.GetAnimAttrById(Command.BackToBack, m_curAction);
        if (attr != null)
        {
            PlayerAnimAttribute.KeyFrame_RotateToBasketAngle keyFrame = attr.GetKeyFrame("RotateToBasketAngle") as PlayerAnimAttribute.KeyFrame_RotateToBasketAngle;
            IM.Vector3 dirFaceTo = IM.Quaternion.AngleAxis(keyFrame.angle, IM.Vector3.up) * m_dirPlayerToBasket;
            m_player.forward = dirFaceTo;
        }

        m_player.animMgr.CrossFade(m_curAction, false);
        m_player.m_stamina.m_bEnableRecover = false;
    }
예제 #4
0
    void ReadAnimAttribute(XmlNode node)
    {
        Dictionary <string, PlayerAnimAttribute.AnimAttr> attrs = new Dictionary <string, PlayerAnimAttribute.AnimAttr>();

        foreach (XmlNode animItem in node.ChildNodes)
        {
            PlayerAnimAttribute.AnimAttr animAttr = new PlayerAnimAttribute.AnimAttr();
            XmlElement animItemElem = animItem as XmlElement;
            animAttr.strAnim = animItemElem.GetAttribute("name");
            XmlNodeList lstNodes = animItemElem.SelectNodes("./KeyEvent");
            animAttr.keyFrame = new List <PlayerAnimAttribute.KeyFrame>();

            PlayerAnimAttribute.KeyFrame kf = new PlayerAnimAttribute.KeyFrame("null", 0);
            foreach (XmlNode keyEvent in lstNodes)
            {
                XmlElement keyEventElem = keyEvent as XmlElement;
                string     id           = keyEventElem.GetAttribute("id");
                int        frame        = int.Parse(keyEventElem.GetAttribute("x"));

                if (id == "MoveToStartPos")
                {
                    IM.Vector3 param = IM.Vector3.zero;
                    XmlElement elem  = keyEventElem.SelectSingleNode("./Param") as XmlElement;
                    if (elem != null)
                    {
                        param = XmlUtils.XmlGetAttr_Vec3(elem);
                    }
                    kf = new PlayerAnimAttribute.KeyFrame_MoveToStartPos(id, frame, param);
                }
                else if (id == "OnLayupShot")
                {
                    IM.Vector3 param = IM.Vector3.zero;
                    XmlElement elem  = keyEventElem.SelectSingleNode("./Param") as XmlElement;
                    if (elem != null)
                    {
                        param = XmlUtils.XmlGetAttr_Vec3(elem);
                    }
                    kf = new PlayerAnimAttribute.KeyFrame_LayupShootPos(id, frame, param);
                }
                else if (id == "blockable")
                {
                    int        blockframe = 0;
                    XmlElement elem       = keyEventElem.SelectSingleNode("./Param") as XmlElement;
                    if (elem != null)
                    {
                        blockframe = XmlUtils.XmlGetAttr_Int(elem, "x");
                    }
                    kf = new PlayerAnimAttribute.KeyFrame_Blockable(id, frame, blockframe);
                }
                else if (id == "DefenderSpasticity")
                {
                    int        length = 0;
                    XmlElement elem   = keyEventElem.SelectSingleNode("./Param") as XmlElement;
                    if (elem != null)
                    {
                        length = XmlUtils.XmlGetAttr_Int(elem, "x");
                    }
                    kf = new PlayerAnimAttribute.KeyFrame_DefenderSpasticity(id, frame, length);
                }
                else if (id == "RotateToBasketAngle")
                {
                    IM.Number  angle = IM.Number.zero;
                    XmlElement elem  = keyEventElem.SelectSingleNode("./Param") as XmlElement;
                    if (elem != null)
                    {
                        angle = XmlUtils.XmlGetAttr_Number(elem, "x");
                    }
                    kf = new PlayerAnimAttribute.KeyFrame_RotateToBasketAngle(id, frame, angle);
                }
                else
                {
                    kf = new PlayerAnimAttribute.KeyFrame(id, frame);
                }

                animAttr.keyFrame.Add(kf);
            }
            if (attrs.ContainsKey(animAttr.strAnim))
            {
                Debug.LogError("AnimInfo same key: " + animAttr.strAnim);
            }
            attrs.Add(animAttr.strAnim, animAttr);
        }
        playerAttributes.animItemAttrs.Add(node.Name, attrs);
    }