generated from karl/cpp-template
Add Input system for keyboard movement
This commit is contained in:
parent
fc4d263a21
commit
7b6a9c7b45
15
Input.h
Normal file
15
Input.h
Normal file
@ -0,0 +1,15 @@
|
||||
#include <map>
|
||||
|
||||
class Input {
|
||||
|
||||
public:
|
||||
inline static std::map<int, bool> keys_down;
|
||||
|
||||
static void set_key_down(int key, bool down) {
|
||||
keys_down[key] = down;
|
||||
}
|
||||
|
||||
static bool is_key_down(int key) {
|
||||
return keys_down[key];
|
||||
}
|
||||
};
|
@ -1,5 +1,6 @@
|
||||
#include "MCRenderer.h"
|
||||
#include "Framebuffer3D.h"
|
||||
#include "Input.h"
|
||||
#include "VertexBuffer.h"
|
||||
#include <glm/ext/matrix_transform.hpp>
|
||||
|
||||
@ -25,7 +26,26 @@ void MCRenderer::render(float delta) {
|
||||
noise_shader.use();
|
||||
noise.bind_and_clear();
|
||||
|
||||
noise_shader.setFloat("height", 0);
|
||||
if (Input::is_key_down(GLFW_KEY_E)) {
|
||||
height += delta;
|
||||
}
|
||||
if (Input::is_key_down(GLFW_KEY_Q)) {
|
||||
height -= delta;
|
||||
}
|
||||
if (Input::is_key_down(GLFW_KEY_W)) {
|
||||
camera.translate(glm::vec3(0.0, 0.0, -delta * 20.0));
|
||||
}
|
||||
if (Input::is_key_down(GLFW_KEY_S)) {
|
||||
camera.translate(glm::vec3(0.0, 0.0, delta * 20.0));
|
||||
}
|
||||
if (Input::is_key_down(GLFW_KEY_D)) {
|
||||
camera.rotate(-delta * 90.0, glm::vec3(0.0, 1.0, 0.0));
|
||||
}
|
||||
if (Input::is_key_down(GLFW_KEY_A)) {
|
||||
camera.rotate(delta * 90.0, glm::vec3(0.0, 1.0, 0.0));
|
||||
}
|
||||
|
||||
noise_shader.setFloat("height", height);
|
||||
|
||||
for (int i = 0; i < size_z; i++) {
|
||||
// Create one layer
|
||||
@ -47,9 +67,6 @@ void MCRenderer::render(float delta) {
|
||||
glClearColor(0.6f, 0.9f, 0.9f, 1.0f);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
// Set the camera position
|
||||
camera.rotate(delta, glm::vec3(0.0, 1.0, 0.0));
|
||||
|
||||
// Bind the camera to the rendering shader
|
||||
render_shader.setMat4("proj", camera.get_projection());
|
||||
render_shader.setMat4("view", camera.get_view());
|
||||
|
@ -16,6 +16,8 @@ class MCRenderer {
|
||||
int size_y;
|
||||
int size_z;
|
||||
|
||||
float height = 0.0;
|
||||
|
||||
Shader render_shader;
|
||||
Shader noise_shader;
|
||||
|
||||
|
22
main.cpp
22
main.cpp
@ -6,11 +6,18 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "Framebuffer3D.h"
|
||||
#include "Input.h"
|
||||
#include "MCRenderer.h"
|
||||
#include "Shader.h"
|
||||
|
||||
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
|
||||
|
||||
static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) {
|
||||
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GLFW_TRUE);
|
||||
|
||||
Input::set_key_down(key, action == GLFW_RELEASE ? false : true);
|
||||
}
|
||||
|
||||
// settings
|
||||
const unsigned int SCR_WIDTH = 1920;
|
||||
const unsigned int SCR_HEIGHT = 1080;
|
||||
@ -44,6 +51,9 @@ int main() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Keyboard input processing function
|
||||
glfwSetKeyCallback(window, key_callback);
|
||||
|
||||
// configure global opengl state
|
||||
// -----------------------------
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@ -52,16 +62,22 @@ int main() {
|
||||
MCRenderer renderer = MCRenderer(128, 128, 128);
|
||||
|
||||
// render loop
|
||||
// -----------
|
||||
double timeInLastFrame = glfwGetTime();
|
||||
double elapsed_time = 0.0;
|
||||
|
||||
while (!glfwWindowShouldClose(window)) {
|
||||
renderer.render(0.1); // TODO: Proper delta
|
||||
// Delta time handling
|
||||
double delta = glfwGetTime() - timeInLastFrame;
|
||||
timeInLastFrame = glfwGetTime();
|
||||
elapsed_time += delta;
|
||||
|
||||
renderer.render(delta);
|
||||
|
||||
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
|
||||
glfwSwapBuffers(window);
|
||||
glfwPollEvents();
|
||||
}
|
||||
|
||||
glfwTerminate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user