GameRoot.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //---------------------------------------------------------------------------------
  2. // Written by Michael Hoffman
  3. // Find the full tutorial at: http://gamedev.tutsplus.com/series/vector-shooter-xna/
  4. //----------------------------------------------------------------------------------
  5. using System;
  6. using AtomicEngine;
  7. using AtomicPlayer;
  8. namespace AtomicBlaster
  9. {
  10. class GameRoot : NETScriptObject
  11. {
  12. public static Scene Scene { get; private set; }
  13. public static float ElapsedTime { get; private set; }
  14. public static Vector2 ScreenSize { get; private set; }
  15. public static IntRect ScreenBounds { get; private set; }
  16. public static Grid Grid { get; private set; }
  17. public static ParticleManager<ParticleState> ParticleManager { get; private set; }
  18. bool paused = false;
  19. public GameRoot()
  20. {
  21. Art.Load();
  22. var graphics = AtomicNET.GetSubsystem<Graphics>();
  23. ScreenSize = new Vector2(graphics.Width, graphics.Height);
  24. ScreenBounds = new IntRect(0, 0, (int)ScreenSize.X, (int)ScreenSize.Y);
  25. ParticleManager = new ParticleManager<ParticleState>(1024 * 20, ParticleState.UpdateParticle);
  26. const int maxGridPoints = 1600;
  27. float amt = (float)Math.Sqrt(ScreenBounds.Width * ScreenBounds.Height / maxGridPoints);
  28. Vector2 gridSpacing = new Vector2(amt, amt);
  29. Grid = new Grid(ScreenBounds, gridSpacing);
  30. EntityManager.Add(PlayerShip.Instance);
  31. SubscribeToEvent("Update", HandleUpdate);
  32. SubscribeToEvent("RenderPathEvent", HandleRenderPathEvent);
  33. Scene = AtomicNET.GetSubsystem<Player>().LoadScene("Scenes/Scene.scene");
  34. var renderer = AtomicNET.GetSubsystem<Renderer>();
  35. var viewport = renderer.GetViewport(0);
  36. renderer.HDRRendering = true;
  37. var renderpath = viewport.GetRenderPath().Clone();
  38. renderpath.Append(AtomicNET.Cache.GetResource<XMLFile>("RenderPath/BloomHDR.xml"));
  39. renderpath.Append(AtomicNET.Cache.GetResource<XMLFile>("RenderPath/Blur.xml"));
  40. viewport.SetRenderPath(renderpath);
  41. CustomRenderer.Initialize();
  42. }
  43. void HandleRenderPathEvent(uint eventType, ScriptVariantMap eventData)
  44. {
  45. if (eventData.GetString("name") != "customrender")
  46. return;
  47. CustomRenderer.Begin();
  48. Draw();
  49. CustomRenderer.End();
  50. }
  51. float deltaTime = 0.0f;
  52. void HandleUpdate(uint eventType, ScriptVariantMap eventData)
  53. {
  54. float time = eventData.GetFloat("timestep");
  55. deltaTime += time;
  56. ElapsedTime += time;// / 2.0f;
  57. if (deltaTime < 1.0f / 60.0f)
  58. return;
  59. deltaTime = 0.0f;
  60. ShipInput.Update();
  61. if (!paused)
  62. {
  63. PlayerStatus.Update();
  64. EntityManager.Update();
  65. EnemySpawner.Update();
  66. ParticleManager.Update();
  67. Grid.Update();
  68. }
  69. }
  70. void Draw()
  71. {
  72. EntityManager.Draw();
  73. Grid.Draw();
  74. ParticleManager.Draw();
  75. }
  76. }
  77. }