summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-09-23 13:20:30 -0400
committerTyler Murphy <tylermurphy534@gmail.com>2022-09-23 13:20:30 -0400
commit9b7d14361904a9c2bceb8de335fd5da169fabd59 (patch)
tree231348855310530145f8ce4bb35931d36bd74438 /engine
parentdelete old files (diff)
downloadminecraftvulkan-9b7d14361904a9c2bceb8de335fd5da169fabd59.tar.gz
minecraftvulkan-9b7d14361904a9c2bceb8de335fd5da169fabd59.tar.bz2
minecraftvulkan-9b7d14361904a9c2bceb8de335fd5da169fabd59.zip
abstract user input, refactor #include's
Diffstat (limited to 'engine')
-rw-r--r--engine/xe_engine.cpp12
-rw-r--r--engine/xe_engine.hpp10
-rw-r--r--engine/xe_input.cpp46
-rw-r--r--engine/xe_input.hpp167
-rwxr-xr-xengine/xe_pipeline.cpp2
-rwxr-xr-xengine/xe_pipeline.hpp1
-rw-r--r--engine/xe_render_system.cpp14
-rw-r--r--engine/xe_render_system.hpp8
-rw-r--r--engine/xe_renderer.cpp12
-rw-r--r--engine/xe_renderer.hpp11
-rw-r--r--engine/xe_sound.cpp4
-rw-r--r--engine/xe_sound.hpp3
-rwxr-xr-xengine/xe_swap_chain.cpp9
-rwxr-xr-xengine/xe_swap_chain.hpp10
-rwxr-xr-xengine/xe_window.cpp4
-rwxr-xr-xengine/xe_window.hpp6
16 files changed, 253 insertions, 66 deletions
diff --git a/engine/xe_engine.cpp b/engine/xe_engine.cpp
index e137d11..0ba7df5 100644
--- a/engine/xe_engine.cpp
+++ b/engine/xe_engine.cpp
@@ -1,17 +1,13 @@
#include "xe_engine.hpp"
-#include "xe_image.hpp"
-
-#include <chrono>
-#include <iostream>
-#include <AL/alc.h>
-#include <AL/alut.h>
namespace xe {
-XeEngine::XeEngine(int width, int height, std::string name) : xeWindow{width, height, name},
+XeEngine::XeEngine(int width, int height, std::string name)
+: xeWindow{width, height, name},
xeDevice{xeWindow},
xeRenderer{xeWindow, xeDevice},
- xeCamera{} {
+ xeCamera{},
+ xeInput{xeWindow} {
loadDescriptorPool();
alutInit(0, NULL);
std::cout << "Audio device: " << alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER) << "\n";
diff --git a/engine/xe_engine.hpp b/engine/xe_engine.hpp
index d86c6a9..422f4c8 100644
--- a/engine/xe_engine.hpp
+++ b/engine/xe_engine.hpp
@@ -1,14 +1,19 @@
#pragma once
-#include "xe_window.hpp"
#include "xe_device.hpp"
#include "xe_renderer.hpp"
#include "xe_camera.hpp"
#include "xe_descriptors.hpp"
#include "xe_image.hpp"
+#include "xe_input.hpp"
+#include "xe_sound.hpp"
#include <chrono>
#include <string>
+#include <iostream>
+#include <AL/alc.h>
+#include <AL/alut.h>
+
namespace xe {
class XeEngine {
@@ -22,7 +27,7 @@ class XeEngine {
XeEngine(const XeEngine&) = delete;
XeEngine operator=(const XeEngine&) = delete;
- XeWindow& getWindow() {return xeWindow;}
+ XeInput& getInput() {return xeInput;}
XeCamera& getCamera() {return xeCamera;}
std::shared_ptr<XeModel> loadModelFromFile(const std::string &filename);
@@ -44,6 +49,7 @@ class XeEngine {
XeDevice xeDevice;
XeRenderer xeRenderer;
XeCamera xeCamera;
+ XeInput xeInput;
std::chrono::_V2::system_clock::time_point currentTime;
float frameTime;
diff --git a/engine/xe_input.cpp b/engine/xe_input.cpp
new file mode 100644
index 0000000..91b9cab
--- /dev/null
+++ b/engine/xe_input.cpp
@@ -0,0 +1,46 @@
+#include "xe_input.hpp"
+
+#include <GLFW/glfw3.h>
+
+namespace xe {
+
+static XeInput* _instance;
+
+XeInput::XeInput(XeWindow& window) : window{window} {
+ glfwSetKeyCallback(window.getGLFWwindow(), XeInput::key_callback);
+ glfwSetMouseButtonCallback(window.getGLFWwindow(), XeInput::mouse_callback);
+ _instance = this;
+}
+
+bool XeInput::isKeyPressed(int key) {
+ return glfwGetKey(window.getGLFWwindow(), key) == GLFW_PRESS;
+}
+
+bool XeInput::wasKeyPressed(int key) {
+ if(_pressed[key] == true) {
+ _pressed[key] = false;
+ return true;
+ }
+ return false;
+}
+
+bool XeInput::wasKeyReleased(int key) {
+ if(_released[key] == true) {
+ _released[key] = false;
+ return true;
+ }
+ return false;
+}
+
+void XeInput::key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
+ if(action == GLFW_PRESS) _instance->_pressed[key] = true;
+ if(action == GLFW_RELEASE) _instance->_released[key] = true;
+}
+
+void XeInput::mouse_callback(GLFWwindow* window, int key, int action, int mods) {
+ if(action == GLFW_PRESS) _instance->_pressed[key] = true;
+ if(action == GLFW_RELEASE) _instance->_released[key] = true;
+}
+
+
+} \ No newline at end of file
diff --git a/engine/xe_input.hpp b/engine/xe_input.hpp
new file mode 100644
index 0000000..4465b4e
--- /dev/null
+++ b/engine/xe_input.hpp
@@ -0,0 +1,167 @@
+#pragma once
+
+#include "xe_window.hpp"
+
+#include <vector>
+#include <map>
+
+#include <GLFW/glfw3.h>
+
+namespace xe {
+
+class XeInput {
+
+ public:
+
+ bool isKeyPressed(int key);
+ bool wasKeyPressed(int key);
+ bool wasKeyReleased(int key);
+
+ private:
+
+ XeInput(XeWindow& window);
+ ~XeInput() {};
+
+ void setIsKeyDown(int key, bool isDown);
+
+ std::map<int, bool> _pressed;
+ std::map<int, bool> _released;
+ XeWindow &window;
+
+ static void key_callback(
+ GLFWwindow* window, int key, int scancode, int action, int mods);
+
+ static void mouse_callback(
+ GLFWwindow* window, int key, int action, int mods);
+
+ friend class XeEngine;
+};
+
+}
+
+#define KEY_SPACE 32
+#define KEY_APOSTROPHE 39 /* ' */
+#define KEY_COMMA 44 /* , */
+#define KEY_MINUS 45 /* - */
+#define KEY_PERIOD 46 /* . */
+#define KEY_SLASH 47 /* / */
+#define KEY_0 48
+#define KEY_1 49
+#define KEY_2 50
+#define KEY_3 51
+#define KEY_4 52
+#define KEY_5 53
+#define KEY_6 54
+#define KEY_7 55
+#define KEY_8 56
+#define KEY_9 57
+#define KEY_SEMICOLON 59 /* ; */
+#define KEY_EQUAL 61 /* = */
+#define KEY_A 65
+#define KEY_B 66
+#define KEY_C 67
+#define KEY_D 68
+#define KEY_E 69
+#define KEY_F 70
+#define KEY_G 71
+#define KEY_H 72
+#define KEY_I 73
+#define KEY_J 74
+#define KEY_K 75
+#define KEY_L 76
+#define KEY_M 77
+#define KEY_N 78
+#define KEY_O 79
+#define KEY_P 80
+#define KEY_Q 81
+#define KEY_R 82
+#define KEY_S 83
+#define KEY_T 84
+#define KEY_U 85
+#define KEY_V 86
+#define KEY_W 87
+#define KEY_X 88
+#define KEY_Y 89
+#define KEY_Z 90
+#define KEY_LEFT_BRACKET 91 /* [ */
+#define KEY_BACKSLASH 92 /* \ */
+#define KEY_RIGHT_BRACKET 93 /* ] */
+#define KEY_GRAVE_ACCENT 96 /* ` */
+#define KEY_WORLD_1 161 /* non-US #1 */
+#define KEY_WORLD_2 162 /* non-US #2 */
+
+/* Function keys */
+#define KEY_ESCAPE 256
+#define KEY_ENTER 257
+#define KEY_TAB 258
+#define KEY_BACKSPACE 259
+#define KEY_INSERT 260
+#define KEY_DELETE 261
+#define KEY_RIGHT 262
+#define KEY_LEFT 263
+#define KEY_DOWN 264
+#define KEY_UP 265
+#define KEY_PAGE_UP 266
+#define KEY_PAGE_DOWN 267
+#define KEY_HOME 268
+#define KEY_END 269
+#define KEY_CAPS_LOCK 280
+#define KEY_SCROLL_LOCK 281
+#define KEY_NUM_LOCK 282
+#define KEY_PRINT_SCREEN 283
+#define KEY_PAUSE 284
+#define KEY_F1 290
+#define KEY_F2 291
+#define KEY_F3 292
+#define KEY_F4 293
+#define KEY_F5 294
+#define KEY_F6 295
+#define KEY_F7 296
+#define KEY_F8 297
+#define KEY_F9 298
+#define KEY_F10 299
+#define KEY_F11 300
+#define KEY_F12 301
+#define KEY_F13 302
+#define KEY_F14 303
+#define KEY_F15 304
+#define KEY_F16 305
+#define KEY_F17 306
+#define KEY_F18 307
+#define KEY_F19 308
+#define KEY_F20 309
+#define KEY_F21 310
+#define KEY_F22 311
+#define KEY_F23 312
+#define KEY_F24 313
+#define KEY_F25 314
+#define KEY_KP_0 320
+#define KEY_KP_1 321
+#define KEY_KP_2 322
+#define KEY_KP_3 323
+#define KEY_KP_4 324
+#define KEY_KP_5 325
+#define KEY_KP_6 326
+#define KEY_KP_7 327
+#define KEY_KP_8 328
+#define KEY_KP_9 329
+#define KEY_KP_DECIMAL 330
+#define KEY_KP_DIVIDE 331
+#define KEY_KP_MULTIPLY 332
+#define KEY_KP_SUBTRACT 333
+#define KEY_KP_ADD 334
+#define KEY_KP_ENTER 335
+#define KEY_KP_EQUAL 336
+#define KEY_LEFT_SHIFT 340
+#define KEY_LEFT_CONTROL 341
+#define KEY_LEFT_ALT 342
+#define KEY_LEFT_SUPER 343
+#define KEY_RIGHT_SHIFT 344
+#define KEY_RIGHT_CONTROL 345
+#define KEY_RIGHT_ALT 346
+#define KEY_RIGHT_SUPER 347
+#define KEY_MENU 348
+
+#define MOUSE_BUTTON_ONE 0
+#define MOUSE_BUTTON_TWO 1
+#define MOUSE_BUTTON_THREE 2 \ No newline at end of file
diff --git a/engine/xe_pipeline.cpp b/engine/xe_pipeline.cpp
index d06d09b..e9fd4d1 100755
--- a/engine/xe_pipeline.cpp
+++ b/engine/xe_pipeline.cpp
@@ -1,7 +1,5 @@
#include "xe_pipeline.hpp"
-#include "xe_model.hpp"
-
#include <cstdint>
#include <fstream>
#include <stdexcept>
diff --git a/engine/xe_pipeline.hpp b/engine/xe_pipeline.hpp
index 06bcf0f..5e2e1fb 100755
--- a/engine/xe_pipeline.hpp
+++ b/engine/xe_pipeline.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "xe_device.hpp"
+#include "xe_model.hpp"
#include <cstdint>
#include <string>
diff --git a/engine/xe_render_system.cpp b/engine/xe_render_system.cpp
index 1e638ad..e5954c7 100644
--- a/engine/xe_render_system.cpp
+++ b/engine/xe_render_system.cpp
@@ -1,19 +1,5 @@
#include "xe_render_system.hpp"
-#include <vulkan/vulkan.h>
-#include "xe_device.hpp"
-#include "xe_pipeline.hpp"
-#include "xe_game_object.hpp"
-#include "xe_swap_chain.hpp"
-#include "xe_renderer.hpp"
-#include "xe_descriptors.hpp"
-#include "xe_engine.hpp"
-
-#include <memory>
-#include <stdexcept>
-
-#include <iostream>
-
namespace xe {
XeRenderSystem::XeRenderSystem(
diff --git a/engine/xe_render_system.hpp b/engine/xe_render_system.hpp
index a8b4145..098727c 100644
--- a/engine/xe_render_system.hpp
+++ b/engine/xe_render_system.hpp
@@ -1,15 +1,17 @@
#pragma once
-#include <vulkan/vulkan.h>
#include "xe_device.hpp"
#include "xe_pipeline.hpp"
#include "xe_game_object.hpp"
-#include "xe_descriptors.hpp"
+#include "xe_swap_chain.hpp"
#include "xe_renderer.hpp"
+#include "xe_descriptors.hpp"
#include "xe_engine.hpp"
-#include "xe_image.hpp"
+#include <vulkan/vulkan.h>
#include <memory>
+#include <stdexcept>
+#include <iostream>
#include <map>
namespace xe {
diff --git a/engine/xe_renderer.cpp b/engine/xe_renderer.cpp
index 1714e46..5d901b0 100644
--- a/engine/xe_renderer.cpp
+++ b/engine/xe_renderer.cpp
@@ -1,17 +1,5 @@
#include "xe_renderer.hpp"
-#include "xe_device.hpp"
-#include "xe_game_object.hpp"
-#include "xe_swap_chain.hpp"
-#include "xe_descriptors.hpp"
-#include "xe_window.hpp"
-#include <memory>
-#include <vulkan/vulkan_core.h>
-
-#include <array>
-#include <cassert>
-#include <stdexcept>
-
namespace xe {
XeRenderer::XeRenderer(XeWindow& window, XeDevice& device) : xeWindow{window}, xeDevice{device} {
diff --git a/engine/xe_renderer.hpp b/engine/xe_renderer.hpp
index 321a4e3..994b157 100644
--- a/engine/xe_renderer.hpp
+++ b/engine/xe_renderer.hpp
@@ -1,13 +1,16 @@
#pragma once
+#include "xe_device.hpp"
+#include "xe_game_object.hpp"
#include "xe_swap_chain.hpp"
+#include "xe_descriptors.hpp"
#include "xe_window.hpp"
-#include "xe_device.hpp"
-#include "xe_model.hpp"
-#include <memory>
-#include <vector>
+#include <array>
#include <cassert>
+#include <stdexcept>
+#include <memory>
+#include <vulkan/vulkan_core.h>
namespace xe {
class XeRenderer {
diff --git a/engine/xe_sound.cpp b/engine/xe_sound.cpp
index 07d8e7b..bd21885 100644
--- a/engine/xe_sound.cpp
+++ b/engine/xe_sound.cpp
@@ -1,9 +1,5 @@
#include "xe_sound.hpp"
-#include <vector>
-#include <stdexcept>
-#include <iostream>
-
namespace xe {
XeSound::XeSound(const std::string& filename) {
diff --git a/engine/xe_sound.hpp b/engine/xe_sound.hpp
index b2a7a14..4a50839 100644
--- a/engine/xe_sound.hpp
+++ b/engine/xe_sound.hpp
@@ -4,6 +4,9 @@
#include <AL/alc.h>
#include <AL/alut.h>
#include <string>
+#include <vector>
+#include <stdexcept>
+#include <iostream>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
diff --git a/engine/xe_swap_chain.cpp b/engine/xe_swap_chain.cpp
index c7a0345..79da771 100755
--- a/engine/xe_swap_chain.cpp
+++ b/engine/xe_swap_chain.cpp
@@ -1,14 +1,5 @@
#include "xe_swap_chain.hpp"
-#include <array>
-#include <cstdlib>
-#include <cstring>
-#include <iostream>
-#include <limits>
-#include <memory>
-#include <set>
-#include <stdexcept>
-
namespace xe {
bool XeSwapChain::initialSwapChainCreated = false;
diff --git a/engine/xe_swap_chain.hpp b/engine/xe_swap_chain.hpp
index a15a5a0..bf07be4 100755
--- a/engine/xe_swap_chain.hpp
+++ b/engine/xe_swap_chain.hpp
@@ -4,10 +4,14 @@
#include <vulkan/vulkan.h>
+#include <array>
+#include <cstdlib>
+#include <cstring>
+#include <iostream>
+#include <limits>
#include <memory>
-#include <string>
-#include <vector>
-#include <vulkan/vulkan_core.h>
+#include <set>
+#include <stdexcept>
namespace xe {
diff --git a/engine/xe_window.cpp b/engine/xe_window.cpp
index 2721279..ee19b92 100755
--- a/engine/xe_window.cpp
+++ b/engine/xe_window.cpp
@@ -1,8 +1,4 @@
#include "xe_window.hpp"
-#include <GLFW/glfw3.h>
-#include <stdexcept>
-
-#include <stdexcept>
namespace xe {
diff --git a/engine/xe_window.hpp b/engine/xe_window.hpp
index bf80bd7..02f3e3d 100755
--- a/engine/xe_window.hpp
+++ b/engine/xe_window.hpp
@@ -2,9 +2,12 @@
#include <vulkan/vulkan_core.h>
#define GLFW_INCLUDE_VULKAN
-#include <GLFW/glfw3.h>
+#include <GLFW/glfw3.h>
+#include <GLFW/glfw3.h>
+#include <stdexcept>
#include <string>
+
namespace xe {
class XeWindow {
@@ -33,6 +36,7 @@ class XeWindow {
std::string windowName;
GLFWwindow *window;
+
};
} \ No newline at end of file