Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module modderblock.game;
- public import modderblock.services;
- public import modderblock.time : ITime;
- import modderblock.time : Time;
- import modderblock.mesh;
- import modderblock.blockregistry;
- import modderblock.structures.dimension;
- import modderblock.client.rendering.blocks.blockrendererregistry;
- import modderblock.client.platform;
- import modderblock.client.input.keyboard;
- import modderblock.client.input.mouse;
- import modderblock.client.renderer;
- import modderblock.client.rendering.shader;
- import modderblock.client.rendering.vertexbuffer;
- import modderblock.client.rendering.dimensionrenderer;
- import modderblock.client.rendering.texture;
- import modderblock.entities.entityregistry;
- import modderblock.client.rendering.entities.entityrendererregistry;
- import gfm.math;
- import std.file;
- import std.math;
- import std.random;
- final class Game {
- private IPlatform _platform;
- private IRenderer _renderer;
- private IShaderManager _shaderManager;
- private Time _time;
- private Keyboard _keyboard;
- private Mouse _mouse;
- private BlockRegistry _blockRegistry;
- private BlockRendererRegistry _blockRendererRegistry;
- private EntityRegistry _entityRegistry;
- private EntityRendererRegistry _entityRendererRegistry;
- private IDimension _dimension;
- private DimensionRenderer _dimensionRenderer;
- this() {
- _platform = getService!IPlatform();
- }
- private void start() {
- _keyboard = new Keyboard();
- registerService!IKeyboard(_keyboard);
- registerService!IKeyboardController(_keyboard);
- _mouse = new Mouse();
- registerService!IMouse(_mouse);
- registerService!IMouseController(_mouse);
- _platform.start(&init, &update, &render);
- }
- /**
- Called just before the platform enters the loop.
- */
- private void init() {
- _time = new Time();
- registerService!ITime(_time);
- _renderer = _platform.renderer;
- registerService!IRenderer(_renderer);
- _shaderManager = new ShaderManager();
- registerService!IShaderManager(_shaderManager);
- registerService!ITextureManager(new TextureManager());
- initBlocks();
- initEntities();
- initWorld();
- }
- private void initBlocks() {
- _blockRegistry = new BlockRegistry();
- registerService!BlockRegistry(_blockRegistry);
- _blockRendererRegistry = new BlockRendererRegistry();
- registerService!BlockRendererRegistry(_blockRendererRegistry);
- _blockRegistry.registerBlock!Block(BlockDefinition(0, "stone", true));
- _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("stone", false, "stone.png"));
- _blockRegistry.registerBlock!DirtBlock(BlockDefinition(0, "dirt", true));
- _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("dirt", false, "dirt.png"));
- _blockRegistry.registerBlock!Block(BlockDefinition(0, "grass", true));
- _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("grass", false, [ "grass_top.png", "dirt.png", "grass_side.png", "grass_side.png", "grass_side.png", "grass_side.png" ]));
- _blockRegistry.registerBlock!Block(BlockDefinition(0, "ore_coal", true));
- _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("ore_coal", false, "coal_ore.png"));
- _blockRegistry.registerBlock!Block(BlockDefinition(0, "log_oak", true));
- _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" ]));
- _blockRegistry.registerBlock!Block(BlockDefinition(0, "leaves_oak", true));
- _blockRendererRegistry.registerRenderer!SolidBlockRenderer(BlockRendererDefinition("leaves_oak", false, "leaves_oak.png"));
- _blockRegistry.build();
- _blockRendererRegistry.build();
- }
- private void initEntities() {
- _entityRegistry = new EntityRegistry();
- registerService!EntityRegistry(_entityRegistry);
- _entityRendererRegistry = new EntityRendererRegistry();
- registerService!EntityRendererRegistry(_entityRendererRegistry);
- _entityRegistry.registerEntity!SimpleEntity(EntityDefinition(0, "simple"));
- _entityRendererRegistry.registerRenderer!CubeEntityRenderer(EntityRendererDefinition("simple"));
- _entityRegistry.registerEntity!EntityPlayer(EntityDefinition(0, "player"));
- _entityRendererRegistry.registerRenderer!CubeEntityRenderer(EntityRendererDefinition("player"));
- _entityRegistry.build();
- _entityRendererRegistry.build();
- }
- private void initWorld() {
- _dimension = new Dimension();
- _dimensionRenderer = new DimensionRenderer(_dimension);
- // enum size = 8;
- //
- // import modderblock.generator.worldgenerator;
- //
- // WorldGenerator generator = new WorldGenerator(_dimension);
- //
- // foreach(x; -size .. size) {
- // foreach(z; -size .. size) {
- // foreach(y; -2 .. 2) {
- // generator.generateChunk(vec3i(x, y, z));
- // }
- // }
- // }
- //
- //Entity ent = _entityRegistry.createEntity("simple");
- //ent.position = vec3f(0, 20f, 0);
- //_dimension.spawnEntity(ent);
- }
- private Block _block;
- private IBlockRenderer _blockRenderer;
- private void update() {
- _time.endFrame();
- _time.beginFrame();
- _dimension.update();
- if(_dimensionRenderer)
- _dimensionRenderer.update();
- if(_keyboard.getKeyDown(Key.l))
- _mouse.lock = !_mouse.lock;
- if(_keyboard.getKeyDown(Key.p)) {
- import core.memory;
- GC.collect();
- }
- _keyboard.endFrame();
- _mouse.endFrame();
- }
- private void render() {
- _renderer.beginFrame();
- _renderer.clear(vec4f(0.1f, 0.3f, 0.5f, 1f));
- _renderer.enableDepthTest();
- if(_dimensionRenderer)
- _dimensionRenderer.render();
- _renderer.endFrame();
- }
- }
- private Game _instance;
- void initGame() {
- assert(_instance is null, "Game already initialized.");
- _instance = new Game();
- _instance.start();
- }
Advertisement
Add Comment
Please, Sign In to add comment