public override void FEnter() { mState = STATE.S_PICKING; cMan.mState = EX_Man.STATE.S_PLAYING; cPick.FEnter(); cMan.mTxtInstructions.text = "Play the game"; mUI.gameObject.SetActive(true); // Because the game starts with a fourth and 15 instead of a kickoff. mGameData.mDown = GameData.DOWN.FIRST; // I need a way of representing the ball location. // like OPP 40, or HOME 40, or something. mGameData.mBallLoc.mYardMark = 20; if (mGameData.mReceivedFirst == GameData.POSSESSION.HOME) { mGameData.mBallLoc.mSide = GameData.POSSESSION.HOME; mGameData.mPossession = GameData.POSSESSION.HOME; } else { mGameData.mBallLoc.mSide = GameData.POSSESSION.AWAY; mGameData.mPossession = GameData.POSSESSION.AWAY; } mGameData.mLastPlayBallLoc = mGameData.mBallLoc; mGameData.mDownMark = FCalcNewSpot(mGameData.mBallLoc, mGameData.mPossession, 10); cRes.FGFX_PlaceFirstDownMarkers(mGameData.mBallLoc, mGameData.mDownMark); // mGameData.mMarkerDown; mGameData.mQuarter = GameData.QUARTER.FIRST; mGameData.mTimeStruct.mMin = 15; mGameData.mTimeStruct.mSec = 0; mGameData.mTimeInQuarter = UT_MinSec.FMinToSecs(mGameData.mTimeStruct); mUI.FSetTimeText(mGameData.mTimeStruct, mGameData.mQuarter); }
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; }