szymski

Untitled

Dec 3rd, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. module modderblock.game;
  2.  
  3. public import modderblock.services;
  4. public import modderblock.time : ITime;
  5. import modderblock.time : Time;
  6. import modderblock.mesh;
  7. import modderblock.blockregistry;
  8. import modderblock.structures.dimension;
  9. import modderblock.client.rendering.blocks.blockrendererregistry;
  10. import modderblock.client.platform;
  11. import modderblock.client.input.keyboard;
  12. import modderblock.client.input.mouse;
  13. import modderblock.client.renderer;
  14. import modderblock.client.rendering.shader;
  15. import modderblock.client.rendering.vertexbuffer;
  16. import modderblock.client.rendering.dimensionrenderer;
  17. import modderblock.client.rendering.texture;
  18. import modderblock.entities.entityregistry;
  19. import modderblock.client.rendering.entities.entityrendererregistry;
  20. import gfm.math;
  21. import std.file;
  22. import std.math;
  23. import std.random;
  24.  
  25. final class Game {
  26. private IPlatform _platform;
  27. private IRenderer _renderer;
  28. private IShaderManager _shaderManager;
  29. private Time _time;
  30.  
  31. private Keyboard _keyboard;
  32. private Mouse _mouse;
  33.  
  34. private BlockRegistry _blockRegistry;
  35. private BlockRendererRegistry _blockRendererRegistry;
  36. private EntityRegistry _entityRegistry;
  37. private EntityRendererRegistry _entityRendererRegistry;
  38.  
  39. private IDimension _dimension;
  40. private DimensionRenderer _dimensionRenderer;
  41.  
  42. this() {
  43. _platform = getService!IPlatform();
  44. }
  45.  
  46. private void start() {
  47. _keyboard = new Keyboard();
  48. registerService!IKeyboard(_keyboard);
  49. registerService!IKeyboardController(_keyboard);
  50.  
  51. _mouse = new Mouse();
  52. registerService!IMouse(_mouse);
  53. registerService!IMouseController(_mouse);
  54.  
  55. _platform.start(&init, &update, &render);
  56. }
  57.  
  58. /**
  59. Called just before the platform enters the loop.
  60. */
  61. private void init() {
  62. _time = new Time();
  63. registerService!ITime(_time);
  64.  
  65. _renderer = _platform.renderer;
  66. registerService!IRenderer(_renderer);
  67.  
  68. _shaderManager = new ShaderManager();
  69. registerService!IShaderManager(_shaderManager);
  70.  
  71. registerService!ITextureManager(new TextureManager());
  72.  
  73. initBlocks();
  74. initEntities();
  75. initWorld();
  76. }
  77.  
  78. private void initBlocks() {
  79. _blockRegistry = new BlockRegistry();
  80. registerService!BlockRegistry(_blockRegistry);
  81.  
  82. _blockRendererRegistry = new BlockRendererRegistry();
  83. registerService!BlockRendererRegistry(_blockRendererRegistry);
  84.  
  85. _blockRegistry.registerBlock!Block(BlockDefinition(0, "stone", true));
  86. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("stone", false, "stone.png"));
  87. _blockRegistry.registerBlock!DirtBlock(BlockDefinition(0, "dirt", true));
  88. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("dirt", false, "dirt.png"));
  89. _blockRegistry.registerBlock!Block(BlockDefinition(0, "grass", true));
  90. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("grass", false, [ "grass_top.png", "dirt.png", "grass_side.png", "grass_side.png", "grass_side.png", "grass_side.png" ]));
  91. _blockRegistry.registerBlock!Block(BlockDefinition(0, "ore_coal", true));
  92. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("ore_coal", false, "coal_ore.png"));
  93. _blockRegistry.registerBlock!Block(BlockDefinition(0, "log_oak", true));
  94. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("log_oak", false, [ "log_oak_top.png", "log_oak_top.png", "log_oak.png", "log_oak.png", "log_oak.png", "log_oak.png" ]));
  95. _blockRegistry.registerBlock!Block(BlockDefinition(0, "leaves_oak", true));
  96. _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("leaves_oak", false, "leaves_oak.png"));
  97.  
  98. _blockRegistry.build();
  99. _blockRendererRegistry.build();
  100. }
  101.  
  102. private void initEntities() {
  103. _entityRegistry = new EntityRegistry();
  104. registerService!EntityRegistry(_entityRegistry);
  105.  
  106. _entityRendererRegistry = new EntityRendererRegistry();
  107. registerService!EntityRendererRegistry(_entityRendererRegistry);
  108.  
  109. _entityRegistry.registerEntity!SimpleEntity(EntityDefinition(0, "simple"));
  110. _entityRendererRegistry.registerRenderer!CubeEntityRenderer(EntityRendererDefinition("simple"));
  111. _entityRegistry.registerEntity!EntityPlayer(EntityDefinition(0, "player"));
  112. _entityRendererRegistry.registerRenderer!CubeEntityRenderer(EntityRendererDefinition("player"));
  113.  
  114. _entityRegistry.build();
  115. _entityRendererRegistry.build();
  116. }
  117.  
  118. private void initWorld() {
  119. _dimension = new Dimension();
  120. _dimensionRenderer = new DimensionRenderer(_dimension);
  121.  
  122. // enum size = 8;
  123. //
  124. // import modderblock.generator.worldgenerator;
  125. //
  126. // WorldGenerator generator = new WorldGenerator(_dimension);
  127. //
  128. // foreach(x; -size .. size) {
  129. // foreach(z; -size .. size) {
  130. // foreach(y; -2 .. 2) {
  131. // generator.generateChunk(vec3i(x, y, z));
  132. // }
  133. // }
  134. // }
  135. //
  136. //Entity ent = _entityRegistry.createEntity("simple");
  137. //ent.position = vec3f(0, 20f, 0);
  138. //_dimension.spawnEntity(ent);
  139. }
  140.  
  141. private Block _block;
  142. private IBlockRenderer _blockRenderer;
  143.  
  144. private void update() {
  145. _time.endFrame();
  146. _time.beginFrame();
  147.  
  148. _dimension.update();
  149.  
  150. if(_dimensionRenderer)
  151. _dimensionRenderer.update();
  152.  
  153. if(_keyboard.getKeyDown(Key.l))
  154. _mouse.lock = !_mouse.lock;
  155.  
  156. if(_keyboard.getKeyDown(Key.p)) {
  157. import core.memory;
  158. GC.collect();
  159. }
  160.  
  161. _keyboard.endFrame();
  162. _mouse.endFrame();
  163. }
  164.  
  165. private void render() {
  166. _renderer.beginFrame();
  167. _renderer.clear(vec4f(0.1f, 0.3f, 0.5f, 1f));
  168. _renderer.enableDepthTest();
  169.  
  170. if(_dimensionRenderer)
  171. _dimensionRenderer.render();
  172.  
  173. _renderer.endFrame();
  174. }
  175. }
  176.  
  177. private Game _instance;
  178.  
  179. void initGame() {
  180. assert(_instance is null, "Game already initialized.");
  181. _instance = new Game();
  182. _instance.start();
  183. }
Advertisement
Add Comment
Please, Sign In to add comment