Ejemplo n.º 1
0
    public override void FEnter()
    {
        cPlays.mState = EX_Plays.STATE.S_RESULT;
        mUI.gameObject.SetActive(true);

        // ---------------------------------------- figure out the remaining down and distance. Assuming no turnovers or halftime/over.
        cPlays.mGameData.mBallLoc = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, cLive.mResult.mDis);
        int disToFirstDown = cPlays.FCalcDistance(cPlays.mGameData.mBallLoc, cPlays.mGameData.mDownMark, cPlays.mGameData.mPossession);

        cPlays.mGameData.mDown++;
        if (disToFirstDown <= 0)
        {
            // they got a first down.
            cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);
            cPlays.mGameData.mDown     = GameData.DOWN.FIRST;
            disToFirstDown             = 10;
            cAud.FFirstDown();

            FGFX_PlaceFirstDownMarkers(cPlays.mGameData.mBallLoc, cPlays.mGameData.mDownMark);
        }

        // ------------------------------------------------------ Handle Field Goals
        if (cLive.mResult.mChoice == PLAY_CHOICE.C_KICK)
        {
            if (cLive.mResult.mSuccessfulFieldGoal)
            {
                if (cPlays.mGameData.mPossession == GameData.POSSESSION.HOME)
                {
                    cPlays.mGameData.mScores.mHome += 3;
                }
                else
                {
                    cPlays.mGameData.mScores.mAway += 3;
                }
                cPlays.mGameData.mBallLoc.mYardMark = 25;
            }
            cAud.FFieldGoal(cLive.mResult.mSuccessfulFieldGoal);

            if (cPlays.mGameData.mPossession == GameData.POSSESSION.HOME)
            {
                cPlays.mGameData.mPossession = GameData.POSSESSION.AWAY;
            }
            else
            {
                cPlays.mGameData.mPossession = GameData.POSSESSION.HOME;
            }

            cPlays.mGameData.mDown = GameData.DOWN.FIRST;

            cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);
            FGFX_PlaceFirstDownMarkers(cPlays.mGameData.mBallLoc, cPlays.mGameData.mDownMark);
        }

        // --------------------------------------------------- Handle turnovers. Need to handle touchbacks here.
        if (cPlays.mGameData.mDown == GameData.DOWN.LENGTH || cLive.mResult.mTurnover)
        {
            mPlayNumForDrive = 0;

            cPlays.mGameData.mDown = GameData.DOWN.FIRST;

            // handle touchback
            bool touchBack = false;
            if (cPlays.mGameData.mBallLoc.mYardMark <= 0)
            {
                cPlays.mGameData.mBallLoc.mYardMark = 20;
                touchBack = true;
                Debug.Log("Touchback");
            }
            disToFirstDown = 10;
            if (cPlays.mGameData.mPossession == GameData.POSSESSION.HOME)
            {
                cPlays.mGameData.mPossession = GameData.POSSESSION.AWAY;
            }
            else
            {
                cPlays.mGameData.mPossession = GameData.POSSESSION.HOME;
            }
            cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);

            FGFX_PlaceFirstDownMarkers(cPlays.mGameData.mBallLoc, cPlays.mGameData.mDownMark);
            if (!touchBack)
            {
                cAud.FTurnover();
            }
        }

        // ------------------------------------------------------ Handle touchdowns, or safeties.
        cLive.mResult.mTouchDown = false;
        if (cPlays.mGameData.mBallLoc.mYardMark == 0)
        {
            mPlayNumForDrive = 0;

            cLive.mResult.mDis = FGetRawYardDistance(cPlays.mGameData.mLastPlayBallLoc, cPlays.mGameData.mBallLoc);

            cLive.mResult.mTouchDown = true;
            cAud.FTouchDown();
            cPlays.mGameData.mDown = GameData.DOWN.FIRST;
            cPlays.mGameData.mBallLoc.mYardMark = 25;
            // handle safeties later.
            if (cPlays.mGameData.mPossession == GameData.POSSESSION.HOME)
            {
                cPlays.mGameData.mScores.mHome += 7;
                cPlays.mGameData.mPossession    = GameData.POSSESSION.AWAY;
                cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.AWAY;
            }
            else
            {
                cPlays.mGameData.mScores.mAway += 7;
                cPlays.mGameData.mPossession    = GameData.POSSESSION.HOME;
                cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.HOME;
            }

            if (cPlays.mGameData.mQuarter == GameData.QUARTER.OT)
            {
                Debug.Log("Team won in overtime");
                cPlays.FExit();
                cOverMan.FEnter();
            }

            cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);

            FGFX_PlaceFirstDownMarkers(cPlays.mGameData.mBallLoc, cPlays.mGameData.mDownMark);
        }

        // ---------------------------------- calc time left
        cPlays.mGameData.mTimeInQuarter -= cLive.mResult.mTimeTaken;
        cPlays.mGameData.mTimeStruct     = UT_MinSec.FSecsToMin((int)cPlays.mGameData.mTimeInQuarter);
        if (cPlays.mGameData.mTimeInQuarter <= 0)
        {
            cPlays.mGameData.mQuarter++;
            // now special logic for the halftime or game being over.
            if (cPlays.mGameData.mQuarter == GameData.QUARTER.THIRD)
            {
                Debug.Log("It's halftime");
                cLive.mResult.mHalfTime = true;
                if (cPlays.mGameData.mReceivedFirst == GameData.POSSESSION.HOME)
                {
                    cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.AWAY;
                    cPlays.mGameData.mPossession    = GameData.POSSESSION.AWAY;
                }
                else
                {
                    cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.HOME;
                    cPlays.mGameData.mPossession    = GameData.POSSESSION.HOME;
                }
                cPlays.mGameData.mBallLoc.mYardMark = 25;
                cPlays.mGameData.mDown     = GameData.DOWN.FIRST;
                cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);
            }
            else if (cPlays.mGameData.mQuarter == GameData.QUARTER.OT)
            {
                if (cPlays.mGameData.mScores.mAway != cPlays.mGameData.mScores.mHome)
                {
                    cPlays.FExit();
                    cOverMan.FEnter();
                    cPlays.mGameData.mDown++;
                }
                else
                {
                    Debug.Log("It's Overtime");
                    cAud.FOverTime();
                    if (cPlays.mGameData.mReceivedFirst == GameData.POSSESSION.HOME)
                    {
                        cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.AWAY;
                        cPlays.mGameData.mPossession    = GameData.POSSESSION.AWAY;
                    }
                    else
                    {
                        cPlays.mGameData.mBallLoc.mSide = GameData.POSSESSION.HOME;
                        cPlays.mGameData.mPossession    = GameData.POSSESSION.HOME;
                    }
                    cPlays.mGameData.mBallLoc.mYardMark = 25;
                    cPlays.mGameData.mDown     = GameData.DOWN.FIRST;
                    cPlays.mGameData.mDownMark = cPlays.FCalcNewSpot(cPlays.mGameData.mBallLoc, cPlays.mGameData.mPossession, 10);
                }
            }
            else if (cPlays.mGameData.mQuarter == GameData.QUARTER.LENGTH)
            {
                cPlays.FExit();
                cOverMan.FEnter();
            }

            cPlays.mGameData.mTimeStruct.mMin = 15;
            cPlays.mGameData.mTimeStruct.mSec = 0;
            cPlays.mGameData.mTimeInQuarter   = UT_MinSec.FMinToSecs(cPlays.mGameData.mTimeStruct);
        }

        // ------------------------------------------------------------- Show the result of the play.
        mUI.FSetResultText(cPlays.mChoice, cLive.mResult.mTurnover, cLive.mResult.mDis, cLive.mResult.mTouchDown);
        mUI.mPlayInfo.text = cLive.mResult.mInfo;

        cPlays.mUI.FSetBallText(cPlays.mGameData.mBallLoc);
        cPlays.mUI.FSetDownAndDisText(cPlays.mGameData.mDown, disToFirstDown);
        cPlays.mUI.FSetTimeText(cPlays.mGameData.mTimeStruct, cPlays.mGameData.mQuarter);
        cPlays.mUI.FSetPossessionText(cPlays.mGameData.mPossession);
        cPlays.mUI.FSetScoresText(cPlays.mGameData.mScores);

        // ------------------------------------------ Graphically move the ball forwards.
        rBall.transform.position = FGetPositionOnFieldInWorldCoordinates(cPlays.mGameData.mBallLoc);

        // ------------------------------------------ Graphically render the result of the play. Show where they came from, to where they are.
        mPlayNumForDrive++;
        Vector3 curPos = FGetPositionOnFieldInWorldCoordinates(cPlays.mGameData.mBallLoc);

        curPos.x = mPlayNumForDrive;
        Vector3 lastPos = FGetPositionOnFieldInWorldCoordinates(cPlays.mGameData.mLastPlayBallLoc);

        lastPos.x = mPlayNumForDrive;

        // ----------------------------- New way, just put down a quad in the right spot.
        Vector3          vRot = transform.rotation.eulerAngles; vRot.x = 90;
        Vector3          vPos = Vector3.Lerp(lastPos, curPos, 0.5f);
        GFX_YardGainLoss g    = Instantiate(PF_YardGainLoss, vPos, Quaternion.Euler(vRot));

        g.transform.localScale = new Vector3(1f, Mathf.Abs(lastPos.z - curPos.z), 1f);
        if (cLive.mResult.mChoice == PLAY_CHOICE.C_PUNT)
        {
            g.GetComponent <Renderer>().material.SetColor("_Color", Color.blue);
        }
        else
        {
            if (cLive.mResult.mDis >= 0)
            {
                g.GetComponent <Renderer>().material.SetColor("_Color", Color.yellow);
            }
            else
            {
                g.GetComponent <Renderer>().material.SetColor("_Color", Color.red);
            }
        }

        cPlays.mGameData.mLastPlayBallLoc = cPlays.mGameData.mBallLoc;

        // ------------------------------------------
        mTime = Time.time;
    }