/Samples/CarGame2D/CarGame.cs
C# | 148 lines | 98 code | 12 blank | 38 comment | 9 complexity | 0a2fdc3e16b257e1d4bc5b91ddfb50a2 MD5 | raw file
Possible License(s): Apache-2.0
- using System;
- using Delta.Engine;
- using Delta.Rendering.Basics.Fonts;
- using Delta.Rendering.Basics.Materials;
- using Delta.Utilities.Datatypes;
- using Delta.Utilities.Helpers;
- using Delta.InputSystem;
-
- namespace CarGame2D
- {
- /// <summary>
- /// Handles most of the game logic and drawing.
- /// </summary>
- public class CarGame
- {
- #region Private
- /// <summary>
- /// The track to drive on.
- /// </summary>
- private Track track;
- /// <summary>
- /// The car controlled by the player.
- /// </summary>
- private Car playerCar;
- /// <summary>
- /// The time in seconds we're already driving.
- /// </summary>
- private float elapsedTotalTime;
- /// <summary>
- /// The background material.
- /// </summary>
- private Material2D background;
- /// <summary>
- /// The number of finished rounds.
- /// </summary>
- private int finishedRounds;
- /// <summary>
- /// The best time a round was finished in.
- /// </summary>
- private float bestRoundTime;
- /// <summary>
- /// The time since the round started.
- /// </summary>
- private float elapsedRoundTime;
- #endregion
-
- #region Constructor
- /// <summary>
- /// Create a new car game by the specified track.
- /// </summary>
- /// <param name="setTrack">Track to drive on.</param>
- public CarGame(Track setTrack)
- {
- track = setTrack;
- playerCar = new Car(track.TrackStart, track);
- background = new Material2D("Background")
- {
- DrawLayer = Delta.Rendering.Enums.RenderLayer.Background,
- };
-
- finishedRounds = MathHelper.InvalidIndex;
-
- RegisterInputCommands();
- }
- #endregion
-
- #region RegisterInputCommands
- /// <summary>
- /// Register input commands
- /// </summary>
- private void RegisterInputCommands()
- {
- // Allow to quit game easily with Escape, Back, etc.
- Input.Commands[Command.QuitTest].Add(delegate
- {
- Application.Quit();
- });
- }
- #endregion
-
- #region Draw
- /// <summary>
- /// Update and draw the car game.
- /// </summary>
- public void Draw()
- {
- elapsedTotalTime += Time.Delta;
- elapsedRoundTime += Time.Delta;
-
- // Draw background 4x4 times to be more sharp
- for (int x = 0; x < 4; x++)
- {
- for (int y = 0; y < 4; y++)
- {
- background.Draw(new Rectangle(0.25f * x, 0.25f * y, 0.25f, 0.25f));
- }
- }
-
- Font.Default.Draw(
- "Total Time: " +
- MathHelper.Round(elapsedTotalTime, 2).ToString("00.00") + "s",
- new Rectangle(0.0f, ScreenSpace.DrawArea.Top, 1.0f,
- Font.Default.LineHeight));
- if (finishedRounds > 0)
- {
- Font.Default.Draw(
- "Best Round Time: " +
- MathHelper.Round(bestRoundTime, 2).ToString("00.00") + "s",
- new Rectangle(0.0f,
- ScreenSpace.DrawArea.Top + Font.Default.LineHeight, 1.0f,
- Font.Default.LineHeight));
- Font.Default.Draw(
- "Rounds finished: " + finishedRounds,
- new Rectangle(0.0f,
- ScreenSpace.DrawArea.Top + Font.Default.LineHeight * 2, 1.0f,
- Font.Default.LineHeight));
- }
- track.Draw();
-
- // Update the players car and check for a finished round.
- int lastNextIndex = playerCar.NextTrackIndex;
- playerCar.Update();
- if (lastNextIndex != playerCar.NextTrackIndex &&
- playerCar.NextTrackIndex == 1)
- {
- if (finishedRounds == 0)
- {
- bestRoundTime = elapsedRoundTime;
- }
- else
- {
- if (elapsedRoundTime < bestRoundTime)
- {
- bestRoundTime = elapsedRoundTime;
- }
- }
-
- finishedRounds++;
- elapsedRoundTime = 0f;
- }
-
- playerCar.Draw();
-
- //track.DebugDraw();
- }
- #endregion
- }
- }