PageRenderTime 37ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/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
  1. using System;
  2. using Delta.Engine;
  3. using Delta.Rendering.Basics.Fonts;
  4. using Delta.Rendering.Basics.Materials;
  5. using Delta.Utilities.Datatypes;
  6. using Delta.Utilities.Helpers;
  7. using Delta.InputSystem;
  8. namespace CarGame2D
  9. {
  10. /// <summary>
  11. /// Handles most of the game logic and drawing.
  12. /// </summary>
  13. public class CarGame
  14. {
  15. #region Private
  16. /// <summary>
  17. /// The track to drive on.
  18. /// </summary>
  19. private Track track;
  20. /// <summary>
  21. /// The car controlled by the player.
  22. /// </summary>
  23. private Car playerCar;
  24. /// <summary>
  25. /// The time in seconds we're already driving.
  26. /// </summary>
  27. private float elapsedTotalTime;
  28. /// <summary>
  29. /// The background material.
  30. /// </summary>
  31. private Material2D background;
  32. /// <summary>
  33. /// The number of finished rounds.
  34. /// </summary>
  35. private int finishedRounds;
  36. /// <summary>
  37. /// The best time a round was finished in.
  38. /// </summary>
  39. private float bestRoundTime;
  40. /// <summary>
  41. /// The time since the round started.
  42. /// </summary>
  43. private float elapsedRoundTime;
  44. #endregion
  45. #region Constructor
  46. /// <summary>
  47. /// Create a new car game by the specified track.
  48. /// </summary>
  49. /// <param name="setTrack">Track to drive on.</param>
  50. public CarGame(Track setTrack)
  51. {
  52. track = setTrack;
  53. playerCar = new Car(track.TrackStart, track);
  54. background = new Material2D("Background")
  55. {
  56. DrawLayer = Delta.Rendering.Enums.RenderLayer.Background,
  57. };
  58. finishedRounds = MathHelper.InvalidIndex;
  59. RegisterInputCommands();
  60. }
  61. #endregion
  62. #region RegisterInputCommands
  63. /// <summary>
  64. /// Register input commands
  65. /// </summary>
  66. private void RegisterInputCommands()
  67. {
  68. // Allow to quit game easily with Escape, Back, etc.
  69. Input.Commands[Command.QuitTest].Add(delegate
  70. {
  71. Application.Quit();
  72. });
  73. }
  74. #endregion
  75. #region Draw
  76. /// <summary>
  77. /// Update and draw the car game.
  78. /// </summary>
  79. public void Draw()
  80. {
  81. elapsedTotalTime += Time.Delta;
  82. elapsedRoundTime += Time.Delta;
  83. // Draw background 4x4 times to be more sharp
  84. for (int x = 0; x < 4; x++)
  85. {
  86. for (int y = 0; y < 4; y++)
  87. {
  88. background.Draw(new Rectangle(0.25f * x, 0.25f * y, 0.25f, 0.25f));
  89. }
  90. }
  91. Font.Default.Draw(
  92. "Total Time: " +
  93. MathHelper.Round(elapsedTotalTime, 2).ToString("00.00") + "s",
  94. new Rectangle(0.0f, ScreenSpace.DrawArea.Top, 1.0f,
  95. Font.Default.LineHeight));
  96. if (finishedRounds > 0)
  97. {
  98. Font.Default.Draw(
  99. "Best Round Time: " +
  100. MathHelper.Round(bestRoundTime, 2).ToString("00.00") + "s",
  101. new Rectangle(0.0f,
  102. ScreenSpace.DrawArea.Top + Font.Default.LineHeight, 1.0f,
  103. Font.Default.LineHeight));
  104. Font.Default.Draw(
  105. "Rounds finished: " + finishedRounds,
  106. new Rectangle(0.0f,
  107. ScreenSpace.DrawArea.Top + Font.Default.LineHeight * 2, 1.0f,
  108. Font.Default.LineHeight));
  109. }
  110. track.Draw();
  111. // Update the players car and check for a finished round.
  112. int lastNextIndex = playerCar.NextTrackIndex;
  113. playerCar.Update();
  114. if (lastNextIndex != playerCar.NextTrackIndex &&
  115. playerCar.NextTrackIndex == 1)
  116. {
  117. if (finishedRounds == 0)
  118. {
  119. bestRoundTime = elapsedRoundTime;
  120. }
  121. else
  122. {
  123. if (elapsedRoundTime < bestRoundTime)
  124. {
  125. bestRoundTime = elapsedRoundTime;
  126. }
  127. }
  128. finishedRounds++;
  129. elapsedRoundTime = 0f;
  130. }
  131. playerCar.Draw();
  132. //track.DebugDraw();
  133. }
  134. #endregion
  135. }
  136. }