Esempio n. 1
0
    public override void Update(IM.Number fDeltaTime)
    {
        if (m_player.animMgr.GetPlayInfo(m_curAction).normalizedTime > new IM.Number((int)curAnimStep))
        {
            curAnimStep++;
            _OnActionDone();
            return;
        }

        if (m_player.m_toSkillInstance == null)
        {
            curAnimStep = 1;
            m_stateMachine.SetState(PlayerState.State.eBackToStand);
            return;
        }

        if (GameUtils.HorizonalDistance(m_player.position, m_basket.m_vShootTarget) < IM.Number.half)
        {
            m_player.m_StateMachine.SetState(State.eBackToBack, true);
            return;
        }

        PlayerMovement.MoveAttribute attr = m_player.mMovements[(int)PlayerMovement.Type.eBackToBackRun].mAttr;
        m_player.MoveTowards(m_dirPlayerToBasket, IM.Number.zero, fDeltaTime,
                             (isCompeteWin? IM.Number.one : -IM.Number.one) * m_dirPlayerToBasket * attr.m_initSpeed);
    }
Esempio n. 2
0
    override public void OnEnter(PlayerState lastState)
    {
        base.OnEnter(lastState);
        m_player.m_moveType = MoveType.eMT_RequireBall;

        if (lastState.m_eState == PlayerState.State.eStand)
        {
            m_animType = AnimType.N_TYPE_0;
        }
        else if (lastState.m_eState == PlayerState.State.eRun)
        {
            m_animType = AnimType.N_TYPE_1;
        }

        m_player.m_dir = -1;
        m_lastMoveDir  = -1;

        PlayerMovement.MoveAttribute attr = m_player.mMovements[(int)PlayerMovement.Type.eRunWithoutBall].mAttr;
        m_runningSpeed = attr.m_curSpeed;
        m_turningSpeed = attr.m_TurningSpeed;

        m_curAction = m_mapAnimType[m_animType];
        m_player.animMgr.CrossFade(m_curAction, false);

        m_player.eventHandler.OnRequireBall();
    }
    public override void Update(IM.Number fDeltaTime)
    {
        base.Update(fDeltaTime);

        PlayerMovement.MoveAttribute attr = m_player.mMovements[(int)PlayerMovement.Type.eBackToBackRun].mAttr;
        m_player.MoveTowards(dirAttackerToBasket, IM.Number.zero, fDeltaTime,
                             (isCompeteWin ? -IM.Number.one : IM.Number.one) * dirAttackerToBasket * attr.m_initSpeed);

        PlayerState state = m_player.m_defenseTarget.m_StateMachine.m_curState;

        if (state.m_eState != State.eBackCompete)
        {
            m_stateMachine.SetState(PlayerState.State.eStand);
        }
    }
    override public void Update(IM.Number fDeltaTime)
    {
        base.Update(fDeltaTime);

        bool   bKnocked = false;
        Player target   = m_player.m_defenseTarget;

        if (m_player.m_toSkillInstance == null)
        {
            m_player.m_StateMachine.SetState(State.eStand);
            return;
        }

        if (m_player.moveDirection == IM.Vector3.zero)
        {
            m_player.m_StateMachine.SetState(State.eBackToBack, true);
            return;
        }
        IM.Number angle = IM.Vector3.Angle(m_dirPlayerToBasket, m_player.moveDirection);
        if (angle > new IM.Number(45) || GameUtils.HorizonalDistance(m_player.position, m_basket.m_vShootTarget) < IM.Number.half)
        {
            m_player.m_StateMachine.SetState(State.eBackToBack, true);
            return;
        }

        if (target != null)
        {
            IM.Vector3 vecPlayerToDefender = target.position - m_player.position;
            IM.Number  dist = vecPlayerToDefender.magnitude;
            IM.Vector3 dirPlayerToDefender = vecPlayerToDefender.normalized;
            angle = IM.Vector3.Angle(m_dirPlayerToBasket, dirPlayerToDefender);
            if (angle <= GlobalConst.BACK_TO_BACK_FAN_ANGLE && dist <= GlobalConst.BACK_TO_BACK_FAN_RADIUS)
            {
                State targetState = target.m_StateMachine.m_curState.m_eState;
                if (targetState == State.eDefense || targetState == State.eRun || targetState == State.eStand)
                {
                    m_player.m_toSkillInstance = m_curExecSkill;
                    m_stateMachine.SetState(State.eBackCompete, true);

                    PlayerState_BackBlock state = target.m_StateMachine.GetState(State.eBackBlock) as PlayerState_BackBlock;
                    state.m_competor = m_player;
                    target.m_StateMachine.SetState(state, true);

                    return;
                }
                else if (targetState == State.eStand || targetState == State.eRun || targetState == State.eRush)
                {
                    Debug.Log("Defender state: " + targetState);
                    bKnocked = true;
                }
            }
        }

        if (bKnocked && target != null)
        {
            target.m_StateMachine.SetState(State.eKnocked, true);
        }

        PlayerMovement.MoveAttribute attr = m_player.mMovements[(int)PlayerMovement.Type.eBackToBackRun].mAttr;
        m_player.MoveTowards(m_dirPlayerToBasket, IM.Number.zero, fDeltaTime, m_dirPlayerToBasket * attr.m_initSpeed);
    }