Ejemplo n.º 1
0
    public void OnDunk()
    {
        m_turningSpeed = IM.Number.zero;
        m_bRateFixed   = true;

        if (m_player.m_bWithBall)
        {
            IM.Number prob = IM.Random.value;
            m_dunkRate = m_match.AdjustShootRate(m_player, m_dunkRate);

            //bool sumValue = m_stateMachine.attackRandom.AdjustRate(ref m_dunkRate, m_match.GetScore(2));

            Debugger.Instance.m_steamer.message += " Dunk rate: ";
            Debugger.Instance.m_steamer.message += m_dunkRate;
            Debugger.Instance.m_steamer.message += " Probability: ";
            Debugger.Instance.m_steamer.message += prob;

            IM.Vector3 vBallVel = IM.Vector3.zero;
            bool       bGoal    = prob < m_dunkRate;
            //goal
            if (bGoal)
            {
                IM.Number fPower = IM.Number.half;
                vBallVel   = m_player.forward * fPower;
                vBallVel.y = -IM.Number.half;

                /*
                 * if (sumValue)
                 *      m_stateMachine.attackRandom.SumValue(m_match.GetScore(2));
                 */

                Debugger.Instance.m_steamer.message += " .Dunk goal.\n";
            }
            //no goal
            else
            {
                IM.Number fPower = IM.Random.Range(IM.Number.two, new IM.Number(5));
                vBallVel   = (IM.Quaternion.AngleAxis(IM.Random.Range(-new IM.Number(30), new IM.Number(30)), IM.Vector3.up) * m_player.forward + IM.Vector3.up) * fPower;
                vBallVel.y = new IM.Number(3);

                Debugger.Instance.m_steamer.message += " .Dunk no goal.\n";
            }

            IM.Vector3  vPos    = m_ball.position;
            uint        uBallId = m_ball.m_id;
            UBasketball curBall = m_ball;
            m_player.DropBall(curBall);
            curBall.position = m_basket.m_vShootTarget;

            bool bOpen = true;
            if (m_player.m_defenseTarget != null)
            {
                foreach (Player defenser in m_player.m_defenseTarget.m_team.members)
                {
                    if (m_player.m_AOD.GetStateByPos(defenser.position) != AOD.Zone.eInvalid)
                    {
                        bOpen = false;
                        break;
                    }
                }
            }

            m_player.mStatistics.SkillUsageSuccess(m_curExecSkill.skill.id, bGoal);

            curBall.OnDunk(bGoal, vBallVel, m_basket.m_vShootTarget, m_player);
        }
        m_stateMachine.m_listeners.ForEach((PlayerStateMachine.Listener lsn) => { lsn.OnDunkDone(m_player); });

        m_player.eventHandler.NotifyAllListeners(PlayerActionEventHandler.AnimEvent.eDunk);
    }