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 14400e2..fc7e365 100755 Binary files a/bin/crumpet-engine and b/bin/crumpet-engine differ diff --git a/include/include.h b/include/include.h deleted file mode 100644 index a91e07c..0000000 --- a/include/include.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -class XD { -public: - static void write(char* i) { - std::cout << i << std::endl; - } -}; diff --git a/src/crumpet-engine/crumpet-engine.h b/src/crumpet-engine/crumpet-engine.h new file mode 100644 index 0000000..dd5a785 --- /dev/null +++ b/src/crumpet-engine/crumpet-engine.h @@ -0,0 +1,6 @@ +#pragma once + +#include +#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(); }