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(i32 width, i32 height) {}
|
||||||
Game::~Game() {}
|
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::processInput(f32 dt) {}
|
||||||
void Game::update(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
|
{-0.5f, -0.5f, 0.0f, 0.0f}, // Bottom left
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Create and bind buffers */
|
/* Create buffers */
|
||||||
glGenBuffers(1, &this->vbo);
|
glGenBuffers(1, &this->vbo);
|
||||||
glGenVertexArrays(1, &this->vao);
|
glGenVertexArrays(1, &this->vao);
|
||||||
|
|
||||||
|
/* Bind buffers */
|
||||||
glBindVertexArray(this->vao);
|
glBindVertexArray(this->vao);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, this->vbo);
|
glBindBuffer(GL_ARRAY_BUFFER, this->vbo);
|
||||||
|
|
||||||
/* Configure VBO */
|
/* Configure VBO */
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(spriteVertex), spriteVertex,
|
glBufferData(GL_ARRAY_BUFFER, sizeof(spriteVertex), spriteVertex,
|
||||||
GL_DYNAMIC_DRAW);
|
GL_STATIC_DRAW);
|
||||||
|
|
||||||
/* Configure VAO */
|
/* Configure VAO */
|
||||||
i32 numElementsInVertex = 4;
|
i32 numElementsInVertex = 4;
|
||||||
i32 vertexSize = sizeof(glm::vec4);
|
i32 vertexSize = sizeof(glm::vec4);
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(0);
|
||||||
glVertexAttribPointer(0, numElementsInVertex, GL_FLOAT, GL_FALSE,
|
glVertexAttribPointer(0, numElementsInVertex, GL_FLOAT, GL_FALSE,
|
||||||
vertexSize, (GLvoid *)(0));
|
vertexSize, (GLvoid *)(0));
|
||||||
@ -63,7 +66,8 @@ void Sprite::render(Shader *shader)
|
|||||||
glUniform1i(glGetUniformLocation(shader->program, "tex"), 0);
|
glUniform1i(glGetUniformLocation(shader->program, "tex"), 0);
|
||||||
|
|
||||||
/* Render */
|
/* Render */
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
i32 numVerticesToDraw = 4;
|
||||||
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, numVerticesToDraw);
|
||||||
|
|
||||||
// Unbind
|
// Unbind
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
@ -129,48 +129,19 @@ int main()
|
|||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glCullFace(GL_BACK);
|
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;
|
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",
|
glfwSetWindowUserPointer(window, static_cast<void *>(&game));
|
||||||
"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");
|
|
||||||
|
|
||||||
f32 deltaTime = 0.0f; // Time between current frame and last frame
|
f32 deltaTime = 0.0f; // Time between current frame and last frame
|
||||||
f32 lastFrame = 0.0f; // Time of 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 */
|
/* Main game loop */
|
||||||
while (!glfwWindowShouldClose(window))
|
while (!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
f32 currentFrame = (f32)glfwGetTime();
|
f32 currentFrame = static_cast<f32>(glfwGetTime());
|
||||||
deltaTime = currentFrame - lastFrame;
|
deltaTime = currentFrame - lastFrame;
|
||||||
lastFrame = currentFrame;
|
lastFrame = currentFrame;
|
||||||
|
|
||||||
@ -184,11 +155,8 @@ int main()
|
|||||||
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
shader->use();
|
|
||||||
game.render();
|
game.render();
|
||||||
|
|
||||||
sprite.render(shader);
|
|
||||||
|
|
||||||
/* Swap the buffers */
|
/* Swap the buffers */
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
#ifndef BREAKOUT_GAME_H
|
#ifndef BREAKOUT_GAME_H
|
||||||
#define BREAKOUT_GAME_H
|
#define BREAKOUT_GAME_H
|
||||||
|
|
||||||
#include <Dengine\OpenGL.h>
|
#include <Dengine/OpenGL.h>
|
||||||
#include <Dengine\Common.h>
|
#include <Dengine/Common.h>
|
||||||
|
#include <Dengine/Sprite.h>
|
||||||
|
#include <Dengine/Shader.h>
|
||||||
|
#include <Dengine/AssetManager.h>
|
||||||
|
|
||||||
namespace Breakout
|
namespace Breakout
|
||||||
{
|
{
|
||||||
@ -19,18 +22,21 @@ enum GameState
|
|||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GameState mState;
|
GameState state;
|
||||||
GLboolean keys[NUM_KEYS];
|
GLboolean keys[NUM_KEYS];
|
||||||
i32 width, height;
|
i32 width, height;
|
||||||
|
|
||||||
Game(i32 width, i32 height);
|
Game(i32 width, i32 height);
|
||||||
~Game();
|
~Game();
|
||||||
|
|
||||||
void init();
|
void init(Dengine::AssetManager *assetManager);
|
||||||
|
|
||||||
void processInput(f32 dt);
|
void processInput(f32 dt);
|
||||||
void update(f32 dt);
|
void update(f32 dt);
|
||||||
void render();
|
void render();
|
||||||
|
private:
|
||||||
|
Dengine::Shader *shader;
|
||||||
|
Dengine::Sprite player;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user