Migrate game code into game.c
Separate the game code from the engine code
This commit is contained in:
parent
6f7f9fa50a
commit
a01c597340
51
src/Game.cpp
51
src/Game.cpp
@ -5,9 +5,56 @@ namespace Breakout
|
||||
Game::Game(i32 width, i32 height) {}
|
||||
Game::~Game() {}
|
||||
|
||||
void Game::init() {}
|
||||
void Game::init(Dengine::AssetManager *assetManager)
|
||||
{
|
||||
/* Initialise assets */
|
||||
i32 result = 0;
|
||||
result = assetManager->loadShaderFiles("data/shaders/sprite.vert.glsl",
|
||||
"data/shaders/sprite.frag.glsl",
|
||||
"sprite");
|
||||
if (result)
|
||||
{
|
||||
// TODO(doyle): Do something
|
||||
}
|
||||
|
||||
result = assetManager->loadTextureImage("data/textures/container.jpg",
|
||||
"container");
|
||||
if (result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
result = assetManager->loadTextureImage("data/textures/wall.jpg",
|
||||
"wall");
|
||||
if (result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
result = assetManager->loadTextureImage("data/textures/awesomeface.png",
|
||||
"awesomeface");
|
||||
if (result)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
this->shader = assetManager->getShader("sprite");
|
||||
|
||||
/* Init player */
|
||||
Dengine::Texture *wallTex = assetManager->getTexture("wall");
|
||||
this->player = Dengine::Sprite();
|
||||
this->player.loadSprite(wallTex, glm::vec2(0, 0));
|
||||
|
||||
/* Init game state */
|
||||
this->state = GAME_ACTIVE;
|
||||
|
||||
}
|
||||
|
||||
void Game::processInput(f32 dt) {}
|
||||
void Game::update(f32 dt) {}
|
||||
void Game::render() {}
|
||||
void Game::render()
|
||||
{
|
||||
shader->use();
|
||||
this->player.render(shader);
|
||||
}
|
||||
}
|
||||
|
@ -28,19 +28,22 @@ b32 Sprite::loadSprite(Texture *tex, glm::vec2 pos)
|
||||
{-0.5f, -0.5f, 0.0f, 0.0f}, // Bottom left
|
||||
};
|
||||
|
||||
/* Create and bind buffers */
|
||||
/* Create buffers */
|
||||
glGenBuffers(1, &this->vbo);
|
||||
glGenVertexArrays(1, &this->vao);
|
||||
|
||||
/* Bind buffers */
|
||||
glBindVertexArray(this->vao);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, this->vbo);
|
||||
|
||||
/* Configure VBO */
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(spriteVertex), spriteVertex,
|
||||
GL_DYNAMIC_DRAW);
|
||||
GL_STATIC_DRAW);
|
||||
|
||||
/* Configure VAO */
|
||||
i32 numElementsInVertex = 4;
|
||||
i32 vertexSize = sizeof(glm::vec4);
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, numElementsInVertex, GL_FLOAT, GL_FALSE,
|
||||
vertexSize, (GLvoid *)(0));
|
||||
@ -63,7 +66,8 @@ void Sprite::render(Shader *shader)
|
||||
glUniform1i(glGetUniformLocation(shader->program, "tex"), 0);
|
||||
|
||||
/* Render */
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
i32 numVerticesToDraw = 4;
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, numVerticesToDraw);
|
||||
|
||||
// Unbind
|
||||
glBindVertexArray(0);
|
||||
|
@ -129,48 +129,19 @@ int main()
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
Breakout::Game game = Breakout::Game(frameBufferSize.x, frameBufferSize.y);
|
||||
glfwSetWindowUserPointer(window, static_cast<void *>(&game));
|
||||
game.init();
|
||||
|
||||
/* Initialise shaders */
|
||||
Dengine::AssetManager assetManager;
|
||||
i32 result = 0;
|
||||
Breakout::Game game = Breakout::Game(frameBufferSize.x, frameBufferSize.y);
|
||||
game.init(&assetManager);
|
||||
|
||||
result = assetManager.loadShaderFiles("data/shaders/sprite.vert.glsl",
|
||||
"data/shaders/sprite.frag.glsl",
|
||||
"sprite");
|
||||
if (result) return result;
|
||||
|
||||
/* Load a texture */
|
||||
result = assetManager.loadTextureImage("data/textures/container.jpg",
|
||||
"container");
|
||||
if (result) return result;
|
||||
|
||||
result = assetManager.loadTextureImage("data/textures/wall.jpg",
|
||||
"wall");
|
||||
if (result) return result;
|
||||
|
||||
result = assetManager.loadTextureImage("data/textures/awesomeface.png",
|
||||
"awesomeface");
|
||||
if (result) return result;
|
||||
|
||||
Dengine::Texture *containerTex = assetManager.getTexture("container");
|
||||
Dengine::Texture *wallTex = assetManager.getTexture("wall");
|
||||
Dengine::Texture *awesomeTex = assetManager.getTexture("awesomeface");
|
||||
|
||||
Dengine::Shader *shader = assetManager.getShader("sprite");
|
||||
glfwSetWindowUserPointer(window, static_cast<void *>(&game));
|
||||
|
||||
f32 deltaTime = 0.0f; // Time between current frame and last frame
|
||||
f32 lastFrame = 0.0f; // Time of last frame
|
||||
|
||||
Dengine::Sprite sprite = Dengine::Sprite();
|
||||
sprite.loadSprite(wallTex, glm::vec2(0, 0));
|
||||
|
||||
/* Main game loop */
|
||||
while (!glfwWindowShouldClose(window))
|
||||
{
|
||||
f32 currentFrame = (f32)glfwGetTime();
|
||||
f32 currentFrame = static_cast<f32>(glfwGetTime());
|
||||
deltaTime = currentFrame - lastFrame;
|
||||
lastFrame = currentFrame;
|
||||
|
||||
@ -184,11 +155,8 @@ int main()
|
||||
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
shader->use();
|
||||
game.render();
|
||||
|
||||
sprite.render(shader);
|
||||
|
||||
/* Swap the buffers */
|
||||
glfwSwapBuffers(window);
|
||||
}
|
||||
|
@ -1,8 +1,11 @@
|
||||
#ifndef BREAKOUT_GAME_H
|
||||
#define BREAKOUT_GAME_H
|
||||
|
||||
#include <Dengine\OpenGL.h>
|
||||
#include <Dengine\Common.h>
|
||||
#include <Dengine/OpenGL.h>
|
||||
#include <Dengine/Common.h>
|
||||
#include <Dengine/Sprite.h>
|
||||
#include <Dengine/Shader.h>
|
||||
#include <Dengine/AssetManager.h>
|
||||
|
||||
namespace Breakout
|
||||
{
|
||||
@ -19,18 +22,21 @@ enum GameState
|
||||
class Game
|
||||
{
|
||||
public:
|
||||
GameState mState;
|
||||
GameState state;
|
||||
GLboolean keys[NUM_KEYS];
|
||||
i32 width, height;
|
||||
|
||||
Game(i32 width, i32 height);
|
||||
~Game();
|
||||
|
||||
void init();
|
||||
void init(Dengine::AssetManager *assetManager);
|
||||
|
||||
void processInput(f32 dt);
|
||||
void update(f32 dt);
|
||||
void render();
|
||||
private:
|
||||
Dengine::Shader *shader;
|
||||
Dengine::Sprite player;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user