コード例 #1
0
    override public void Update(IM.Number fDeltaTime)
    {
        if (crosser.m_StateMachine.m_curState.m_eState != State.eCrossOver &&
            crosser.m_StateMachine.m_curState.m_eState != State.eCutIn)
        {
            m_stateMachine.SetState(PlayerState.State.eStand);
            return;
        }
        elapsedTime += fDeltaTime;

        if (elapsedTime > time)
        {
            if (collide)
            {
                //突破/空切倒地几率=0.2+(防守者身体强度-突破者身体强度)*0.0004
                Dictionary <string, uint> crosserData  = crosser.m_finalAttrs;
                Dictionary <string, uint> defenderData = m_player.m_finalAttrs;
                if (crosserData == null || defenderData == null)
                {
                    Debug.LogError("Can not build player: " + m_player.m_name + " ,can not fight state by id: " + m_player.m_id);
                    Debug.LogError("Can not build player: " + crosser.m_name + " ,can not fight state by id: " + crosser.m_id);
                    return;
                }

                GameMatch curMatch = GameSystem.Instance.mClient.mCurMatch;
                uint      strength = 0;
                crosser.m_skillSystem.HegdingToValue("addn_strength", ref strength);
                IM.Number crosserStrength = (crosserData["strength"] + strength) * curMatch.GetAttrReduceScale("strength", crosser);

                m_player.m_skillSystem.HegdingToValue("addn_strength", ref strength);
                IM.Number defenderStrength = (defenderData["strength"] + strength) * curMatch.GetAttrReduceScale("strength", m_player);

                IM.Number fRate = colHedging.Calc(defenderStrength, crosserStrength);
                fRate = IM.Number.one - fRate;

                IM.Number fRandom  = IM.Random.value;
                bool      sumValue = random.AdjustRate(ref fRate);
                crosser.m_StateMachine.SetState(fRandom < fRate ? PlayerState.State.eFallLostBall : PlayerState.State.eKnocked);
                if (fRandom < fRate && sumValue)
                {
                    random.SumValue();
                }
            }
            m_stateMachine.SetState(State.eStand);
            return;
        }
        m_player.MoveTowards(dirMove, m_turningSpeed, fDeltaTime, dirMove * speed);
    }
コード例 #2
0
    //public override bool PreEnter()
    //{
    //	if (m_player.m_vVelocity == Vector3.zero)
    //	{
    //		return false;
    //	}
    //	else
    //	{
    //		Vector3 dirPlayerToBasket = GameUtils.HorizonalNormalized(m_match.mCurScene.mBasket.m_vShootTarget, m_player.position);
    //		float moveAngle = Quaternion.FromToRotation(dirPlayerToBasket, m_player.m_vVelocity).eulerAngles.y;
    //		if (135f < moveAngle && moveAngle < 225f)
    //		{
    //			return false;
    //		}
    //	}
    //	return true;
    //}

    override public void OnEnter(PlayerState lastState)
    {
        base.OnEnter(lastState);

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

        IM.Vector3 targetPos = GetEndPos();
        Debugger.Instance.DrawSphere("CutInEndPos", (Vector3)targetPos, Color.green);

        Player defender = m_player.GetDefender();

        if (defender != null &&
            (defender.m_StateMachine.m_curState.m_eState == State.eStand ||
             defender.m_StateMachine.m_curState.m_eState == State.eDefense ||
             defender.m_StateMachine.m_curState.m_eState == State.eRun ||
             defender.m_StateMachine.m_curState.m_eState == State.eRush))
        {
            IM.Number crossRate  = CalcCrossRate(m_player, defender);
            bool      sumValue   = random.AdjustRate(ref crossRate);
            IM.Number crossValue = IM.Random.value;
            bool      crossed    = crossValue < crossRate;
            Debugger.Instance.m_steamer.message = "CutIn succeed: " + crossed + " Rate: " + crossRate + " Value: " + crossValue;

            //should use sendmessage
            if (crossed)
            {
                if (sumValue)
                {
                    random.SumValue();
                }
                m_player.mStatistics.SkillUsageSuccess(m_curExecSkill.skill.id, true);
            }
            else
            {
                PlayerState_DefenseCross state = defender.m_StateMachine.GetState(State.eDefenseCross) as PlayerState_DefenseCross;
                state.targetPos = targetPos;
                state.time      = m_player.animMgr.GetDuration(m_curAction) / m_player.animMgr.GetSpeed(m_curAction);
                state.crosser   = m_player;
                state.InitState();
                defender.m_StateMachine.SetState(state);
            }
        }

        m_player.animMgr.Play(m_curAction, true);
    }
コード例 #3
0
    void _OnTriggerStay(Player player)
    {
        GameMatch match = GameSystem.Instance.mClient.mCurMatch;

        if (match == null)
        {
            return;
        }

        if (match.GetMatchType() != GameMatch.Type.eBullFight &&
            match.GetMatchType() != GameMatch.Type.eCareer3On3 &&
            match.GetMatchType() != GameMatch.Type.eAsynPVP3On3 &&
            match.GetMatchType() != GameMatch.Type.e3AIOn3AI &&
            match.GetMatchType() != GameMatch.Type.e3On3 &&
            match.GetMatchType() != GameMatch.Type.ePVP_3On3 &&
            match.GetMatchType() != GameMatch.Type.ePVP_1PLUS &&
            match.GetMatchType() != GameMatch.Type.eUltimate21 &&
            match.GetMatchType() != GameMatch.Type.eGrabZone &&
            match.GetMatchType() != GameMatch.Type.ePractise)
        {
            return;
        }
        //if( match.m_mainRole != m_Owner && !m_Owner.m_bIsAI )
        //    return;

        if (m_Owner.m_StateMachine.m_curState.m_eState == PlayerState.State.eFallLostBall ||
            m_Owner.m_StateMachine.m_curState.m_eState == PlayerState.State.eKnocked)
        {
            return;
        }

        if (m_Owner.m_aiMgr != null && m_Owner.m_aiMgr.m_curState != null)
        {
            m_Owner.m_aiMgr.m_curState.OnPlayerCollided(player);
        }

        if (match.GetMatchType() == GameMatch.Type.eGrabZone ||
            match.GetMatchType() == GameMatch.Type.ePractise)
        {
            return;
        }

        bool isStayed = false;

        isColliderStayed.TryGetValue(player, out isStayed);
        if (isStayed)
        {
            return;
        }
        isColliderStayed[player] = true;

        PlayerState.State curPlayerState        = m_Owner.m_StateMachine.m_curState.m_eState;
        PlayerState.State curCollidePlayerState = player.m_StateMachine.m_curState.m_eState;
        IM.Vector3        dirPlayerToCollide    = GameUtils.HorizonalNormalized(m_Owner.position, player.position);
        IM.Number         fAngle = IM.Vector3.Angle(m_Owner.forward, dirPlayerToCollide);
        if (fAngle < new IM.Number(60) &&
            m_Owner.m_team.m_side != player.m_team.m_side
            )
        {
            if (
                curPlayerState == PlayerState.State.eBackTurnRun ||
                curPlayerState == PlayerState.State.eCutIn ||
                curPlayerState == PlayerState.State.eRush)
            {
                //突破/空切倒地几率=0.2+(防守者身体强度-突破者身体强度)*0.0004
                Dictionary <string, uint> playerData    = m_Owner.m_finalAttrs;
                Dictionary <string, uint> colPlayerData = player.m_finalAttrs;
                if (playerData == null || colPlayerData == null)
                {
                    Debug.LogError("Can not build player: " + m_Owner.m_name + " ,can not fight state by id: " + m_Owner.m_id);
                    Debug.LogError("Can not build player: " + player.m_name + " ,can not fight state by id: " + player.m_id);
                    return;
                }

                GameMatch curMatch = GameSystem.Instance.mClient.mCurMatch;
                uint      strength = 0;
                player.m_skillSystem.HegdingToValue("addn_strength", ref strength);
                IM.Number colPlayerStrength = (colPlayerData["strength"] + strength) * curMatch.GetAttrReduceScale("strength", player);

                m_Owner.m_skillSystem.HegdingToValue("addn_strength", ref strength);
                IM.Number playerStrength = (playerData["strength"] + strength) * curMatch.GetAttrReduceScale("strength", m_Owner);
                IM.Number fRate          = hedging.Calc(playerStrength, colPlayerStrength);
                fRate = IM.Number.one - fRate;

                IM.Number fRandom = IM.Random.value;
                if (curPlayerState == PlayerState.State.eBackTurnRun)
                {
                    IM.Number uRate    = fRate;
                    bool      sumValue = random.AdjustRate(ref uRate);
                    m_Owner.m_StateMachine.SetState(fRandom < fRate ? PlayerState.State.eFallLostBall : PlayerState.State.eKnocked);
                    if (fRandom < fRate && sumValue)
                    {
                        random.SumValue();
                    }
                }
                else if (curPlayerState == PlayerState.State.eCutIn)
                {
                    fRate *= IM.Number.half;
                    m_Owner.m_StateMachine.SetState(fRandom < fRate ? PlayerState.State.eFallGround : PlayerState.State.eKnocked);
                }
                else if (curPlayerState == PlayerState.State.eRush)
                {
                    fRate *= new IM.Number(0, 300);
                    //防守者不被撞,无人持球时不被撞
                    if (match.mCurScene.mBall.m_owner != null && m_Owner.m_team.m_role == GameMatch.MatchRole.eOffense)
                    {
                        if (fRandom < fRate)
                        {
                            m_Owner.m_StateMachine.SetState(m_Owner.m_bWithBall ? PlayerState.State.eFallLostBall : PlayerState.State.eFallGround);
                        }
                        else
                        {
                            m_Owner.m_StateMachine.SetState(PlayerState.State.eKnocked);
                        }
                    }
                }

                //Debugger.Instance.m_steamer.message = "Player: " + m_Owner.m_name + " strength: " + playerData["strength"];
                //Debugger.Instance.m_steamer.message += " Collided Player: " + colPlayer.m_Owner.m_name + " strength: " + colPlayerData["strength"];
                //Debugger.Instance.m_steamer.message += " Collide fall down rate: " + fRate + " Random: " + fRandom;
            }
        }
    }