From 93e2e109e58a1be8beac841cc6b5089be19e9234 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 28 Nov 2018 16:01:12 +0000 Subject: [PATCH] Input handling and basic render capabilities along with an updated CMakeList --- CMakeLists.txt | 18 ++++--- bin/crumpet-engine | Bin 17800 -> 24528 bytes include/include.h | 8 --- src/crumpet-engine/crumpet-engine.h | 6 +++ src/crumpet-engine/game.cpp | 10 ++++ src/crumpet-engine/game.h | 23 ++++++++ src/crumpet-engine/input/input.cpp | 17 ++++++ src/crumpet-engine/input/input.h | 22 ++++++++ src/crumpet-engine/input/keyboard.cpp | 0 src/crumpet-engine/input/keyboard.h | 53 +++++++++++++++++++ src/crumpet-engine/input/mouse.cpp | 0 src/crumpet-engine/input/mouse.h | 1 + src/crumpet-engine/math.h | 42 +++++++++++++++ src/crumpet-engine/renderengine/renderer.cpp | 39 ++++++++++++++ src/crumpet-engine/renderengine/renderer.h | 27 ++++++++++ src/header.cpp | 6 --- src/header.h | 8 --- src/main.cpp | 24 ++------- 18 files changed, 257 insertions(+), 47 deletions(-) delete mode 100644 include/include.h create mode 100644 src/crumpet-engine/crumpet-engine.h create mode 100644 src/crumpet-engine/game.cpp create mode 100644 src/crumpet-engine/game.h create mode 100644 src/crumpet-engine/input/input.cpp create mode 100644 src/crumpet-engine/input/input.h create mode 100644 src/crumpet-engine/input/keyboard.cpp create mode 100644 src/crumpet-engine/input/keyboard.h create mode 100644 src/crumpet-engine/input/mouse.cpp create mode 100644 src/crumpet-engine/input/mouse.h create mode 100644 src/crumpet-engine/math.h create mode 100644 src/crumpet-engine/renderengine/renderer.cpp create mode 100644 src/crumpet-engine/renderengine/renderer.h delete mode 100644 src/header.cpp delete mode 100644 src/header.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0be2d28..cdc7d47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,16 +3,22 @@ cmake_minimum_required(VERSION 2.4) project(crumpet-engine) set(EXEName crumpet-engine) -set(BuildDIR ./bin) -set(SrcDIR ./src) -set(IncludeDIR ./include) +set(BuildDIR bin) +set(SrcDIR src) +set(EngineDIR ${SrcDIR}/crumpet-engine) +set(IncludeDIR include) find_package(SDL2 REQUIRED) -include_directories(${BuildDIR}/${EXEName} ${SLD_INCLUDE_DIR}) -include_directories(${BuildDIR}/${EXEName} ${IncludeDIR}) +include_directories(${BuildDIR}/ ${SDL_INCLUDE_DIR}) +include_directories(${BuildDIR}/ ${IncludeDIR}) -file(GLOB_RECURSE SourceFiles ${SrcDIR}/*.cpp) +file(GLOB_RECURSE SourceFiles + ${SrcDIR}/* + ${EngineDIR}/* + ${EngineDIR}/renderengine/* + ${EngineDIR}/input/* +) add_executable(${BuildDIR}/${EXEName} ${SourceFiles}) target_link_libraries(${BuildDIR}/${EXEName} ${SDL2_LIBRARIES}) diff --git a/bin/crumpet-engine b/bin/crumpet-engine index 14400e268e2a0f0d3ff9a363810c58d2cfb58f92..fc7e3659be335488a8e024882f455819bb6dbd1b 100755 GIT binary patch literal 24528 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 xau`r2N`5xs$LG!Cg6 +#include "game.h" + +#undef main diff --git a/src/crumpet-engine/game.cpp b/src/crumpet-engine/game.cpp new file mode 100644 index 0000000..c437934 --- /dev/null +++ b/src/crumpet-engine/game.cpp @@ -0,0 +1,10 @@ +#include "game.h" + +Game::Game() + : input(&renderer) { + +} + +Game::~Game() { + +} diff --git a/src/crumpet-engine/game.h b/src/crumpet-engine/game.h new file mode 100644 index 0000000..61d234a --- /dev/null +++ b/src/crumpet-engine/game.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include +#include + +#include "renderengine/renderer.h" +#include "input/input.h" + +class Game { +public: + Game(); + + Renderer renderer; + Input input; + + // Input instance + // Entity list <- Renderer renders from this + // Camera list and switching and adding + + virtual ~Game(); +}; diff --git a/src/crumpet-engine/input/input.cpp b/src/crumpet-engine/input/input.cpp new file mode 100644 index 0000000..0acd580 --- /dev/null +++ b/src/crumpet-engine/input/input.cpp @@ -0,0 +1,17 @@ +#include "input.h" + +Input::Input(Renderer *renderer) { + m_renderer = renderer; +} + +void Input::poll() { + while (SDL_PollEvent(&m_event) != 0) { + if (m_event.type == SDL_QUIT) { + m_renderer->destroyWindow(); + } + } +} + +Input::~Input() { + +} diff --git a/src/crumpet-engine/input/input.h b/src/crumpet-engine/input/input.h new file mode 100644 index 0000000..e323ea2 --- /dev/null +++ b/src/crumpet-engine/input/input.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include "../renderengine/renderer.h" +#include "keyboard.h" +#include "mouse.h" + +class Input { +public: + Input(Renderer* renderer); + + Keyboard keyboard; + + void poll(); + + virtual ~Input(); +private: + SDL_Event m_event; + Renderer* m_renderer; +}; diff --git a/src/crumpet-engine/input/keyboard.cpp b/src/crumpet-engine/input/keyboard.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/crumpet-engine/input/keyboard.h b/src/crumpet-engine/input/keyboard.h new file mode 100644 index 0000000..09d7ffe --- /dev/null +++ b/src/crumpet-engine/input/keyboard.h @@ -0,0 +1,53 @@ +#pragma once + +typedef enum { + KEY_A, + KEY_B, + KEY_C, + KEY_D, + KEY_E, + KEY_F, + KEY_G, + KEY_H, + KEY_I, + KEY_J, + KEY_K, + KEY_L, + KEY_M, + KEY_N, + KEY_O, + KEY_P, + KEY_Q, + KEY_R, + KEY_S, + KEY_T, + KEY_U, + KEY_V, + KEY_W, + KEY_X, + KEY_Y, + KEY_Z, + KEY_1, + KEY_2, + KEY_3, + KEY_4, + KEY_5, + KEY_6, + KEY_7, + KEY_8, + KEY_9, + KEY_SPACE, + KEY_SHIFT, + KEY_RSHIFT, + KEY_CAPS, + KEY_CTRL, + KEY_RCTRL, + KEY_ESC +} Key; + +class Keyboard { +public: + Key lastOutput = KEY_SPACE; + + +}; diff --git a/src/crumpet-engine/input/mouse.cpp b/src/crumpet-engine/input/mouse.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/crumpet-engine/input/mouse.h b/src/crumpet-engine/input/mouse.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/src/crumpet-engine/input/mouse.h @@ -0,0 +1 @@ +#pragma once diff --git a/src/crumpet-engine/math.h b/src/crumpet-engine/math.h new file mode 100644 index 0000000..8ea2aba --- /dev/null +++ b/src/crumpet-engine/math.h @@ -0,0 +1,42 @@ +#pragma once + +const float DEG2RAD = 0.01745329251994329576923690768f; +const float RAD2DEG = 57.2957795130823208767981548141f; + +inline float ToRadian(const float Degree) { + return (Degree * DEG2RAD); +} + +inline float ToDegree(const float Radian) { + return (Radian * RAD2DEG); +} + +struct Vec4 { + int x, y, z, w; + Vec4(int x, int y, int z, int w) : x(x), y(y), z(z), w(w) {} +}; + +struct Vec4f { + float x, y, z, w; + Vec4f(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {} +}; + +struct Vec3 { + int x, y, z; + Vec3(int x, int y, int z) : x(x), y(y), z(z) {} +}; + +struct Vec3f { + float x, y, z; + Vec3f(float x, float y, float z) : x(x), y(y), z(z) {} +}; + +struct Vec2 { + int x, y; + Vec2(int x, int y) : x(x), y(y) {} +}; + +struct Vec2f { + float x, y; + Vec2f(float x, float y) : x(x), y(y) {} +}; diff --git a/src/crumpet-engine/renderengine/renderer.cpp b/src/crumpet-engine/renderengine/renderer.cpp new file mode 100644 index 0000000..bc41922 --- /dev/null +++ b/src/crumpet-engine/renderengine/renderer.cpp @@ -0,0 +1,39 @@ +#include "renderer.h" + +Renderer::Renderer() { + +} + +void Renderer::createWindow(std::string title, int width, int height, ScreenMode mode) { + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + std::cout << "SDL could not initialize, SDL ERROR: " << SDL_GetError() << std::endl; + } + std::cout << "SDL initialized" << std::endl; + + m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN); + std::cout << "SDL window created" << std::endl; + + if (mode == SCREEN_MODE_DEFAULT) + SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED); + if (mode == SCREEN_MODE_VSYNC) + SDLRenderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED); + + m_isWindowClosed = false; +} + +bool Renderer::isWindowClosed() { + return m_isWindowClosed; +} + +void Renderer::destroyWindow() { + m_isWindowClosed = true; + SDL_DestroyWindow(m_window); + SDL_Quit(); + std::cout << "SDL unititialized" << std::endl; +} + +Renderer::~Renderer() { + if (!m_isWindowClosed) { + this->destroyWindow(); + } +} diff --git a/src/crumpet-engine/renderengine/renderer.h b/src/crumpet-engine/renderengine/renderer.h new file mode 100644 index 0000000..e8104fe --- /dev/null +++ b/src/crumpet-engine/renderengine/renderer.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include + +typedef enum { + SCREEN_MODE_DEFAULT, + SCREEN_MODE_VSYNC +} ScreenMode; + +class Renderer { +public: + Renderer(); + void createWindow(std::string title, int width, int height, ScreenMode mode); + bool isWindowClosed(); + void destroyWindow(); + + SDL_Renderer* SDLRenderer; + + void update(); + + virtual ~Renderer(); +private: + SDL_Window* m_window; + bool m_isWindowClosed; +}; diff --git a/src/header.cpp b/src/header.cpp deleted file mode 100644 index 4cdeaba..0000000 --- a/src/header.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "header.h" - -HelloWorld::HelloWorld() { - std::cout << "Hello, world!" << std::endl; -} - diff --git a/src/header.h b/src/header.h deleted file mode 100644 index 0fd688b..0000000 --- a/src/header.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include - -class HelloWorld { -public: - HelloWorld(); -}; diff --git a/src/main.cpp b/src/main.cpp index e237781..fd165ae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,24 +1,10 @@ -#include -#include -#include "header.h" - -#include "SDL2/SDL.h" +#include "crumpet-engine/crumpet-engine.h" int main(int argc, char** argv) { - XD().write("Epic"); - HelloWorld helloWorld; + Game game; + game.renderer.createWindow("Crumpet Engine", 600, 400, SCREEN_MODE_VSYNC); - SDL_Window* window = NULL; - SDL_Surface* surface = NULL; - - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - std::cout << "INIT FAILED" << std::endl; + while (!game.renderer.isWindowClosed()) { + game.input.poll(); } - - window = SDL_CreateWindow("crumpet-engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500, 500, NULL); - SDL_Delay(1000); - SDL_FreeSurface(surface); - SDL_DestroyWindow(window); - window = NULL; - SDL_Quit(); }