From 7eafe293868d5d3875d0bec147e22a266e4ec86c Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Mon, 16 Sep 2024 10:16:24 +0200 Subject: trying out engine controlled game loops --- gameloop/CMakeLists.txt | 26 ++++++++++++++++++++++ gameloop/imgs/demo.bmp | Bin 0 -> 7998698 bytes gameloop/imgs/demo.jpg | Bin 0 -> 903706 bytes gameloop/include/eventManager.h | 4 ++++ gameloop/include/loopManager.h | 18 +++++++++++++++ gameloop/include/window.h | 22 ++++++++++++++++++ gameloop/src/eventManager.cpp | 0 gameloop/src/loopManager.cpp | 37 +++++++++++++++++++++++++++++++ gameloop/src/main.cpp | 17 ++++++++++++++ gameloop/src/window.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 172 insertions(+) create mode 100644 gameloop/CMakeLists.txt create mode 100644 gameloop/imgs/demo.bmp create mode 100644 gameloop/imgs/demo.jpg create mode 100644 gameloop/include/eventManager.h create mode 100644 gameloop/include/loopManager.h create mode 100644 gameloop/include/window.h create mode 100644 gameloop/src/eventManager.cpp create mode 100644 gameloop/src/loopManager.cpp create mode 100644 gameloop/src/main.cpp create mode 100644 gameloop/src/window.cpp diff --git a/gameloop/CMakeLists.txt b/gameloop/CMakeLists.txt new file mode 100644 index 0000000..16cbcf3 --- /dev/null +++ b/gameloop/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.5) +project(gameloop) + +# Set the C++ standard (optional, but good practice) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED True) + +# Find the SDL2 package +find_package(SDL2 REQUIRED) + +# Add your executable +set(SOURCES + src/loopManager + src/window.cpp + src/main.cpp + src/eventManager.cpp +) + +add_executable(gameloop ${SOURCES}) + +# Link the SDL2 library to your project +target_link_libraries(gameloop ${SDL2_LIBRARIES}) + +# Include SDL2 header files and project headers +target_include_directories(gameloop PRIVATE ${SDL2_INCLUDE_DIRS}) +target_include_directories(gameloop PRIVATE ${CMAKE_SOURCE_DIR}/include) diff --git a/gameloop/imgs/demo.bmp b/gameloop/imgs/demo.bmp new file mode 100644 index 0000000..65354fe Binary files /dev/null and b/gameloop/imgs/demo.bmp differ diff --git a/gameloop/imgs/demo.jpg b/gameloop/imgs/demo.jpg new file mode 100644 index 0000000..f534e1b Binary files /dev/null and b/gameloop/imgs/demo.jpg differ diff --git a/gameloop/include/eventManager.h b/gameloop/include/eventManager.h new file mode 100644 index 0000000..2aa0a68 --- /dev/null +++ b/gameloop/include/eventManager.h @@ -0,0 +1,4 @@ +class EventManager +{ + +}; diff --git a/gameloop/include/loopManager.h b/gameloop/include/loopManager.h new file mode 100644 index 0000000..03b07a9 --- /dev/null +++ b/gameloop/include/loopManager.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include "window.h" +class LoopManager{ + public: + LoopManager(); + void setup(); + void loop(); + private: + + + void processInput(); + void update(); + void render(); + bool gameRunning; + WindowManager window; + +}; diff --git a/gameloop/include/window.h b/gameloop/include/window.h new file mode 100644 index 0000000..b4f2b78 --- /dev/null +++ b/gameloop/include/window.h @@ -0,0 +1,22 @@ +#pragma once +#include +class WindowManager{ + public: + WindowManager(); + virtual ~WindowManager(); + bool loadMedia(); + void update(); + bool init(); + void close(); + bool initWindow(); + void destroyWindow(); + SDL_Renderer* getRenderer(); + private: + //Loads media + //Frees media and shuts down SDL + + const int SCREEN_WIDTH = 800; + const int SCREEN_HEIGHT = 600; + SDL_Window* window = NULL; + SDL_Renderer* renderer = NULL; +}; diff --git a/gameloop/src/eventManager.cpp b/gameloop/src/eventManager.cpp new file mode 100644 index 0000000..e69de29 diff --git a/gameloop/src/loopManager.cpp b/gameloop/src/loopManager.cpp new file mode 100644 index 0000000..ef2decf --- /dev/null +++ b/gameloop/src/loopManager.cpp @@ -0,0 +1,37 @@ +#include "loopManager.h" +LoopManager::LoopManager(){ +} +void LoopManager::processInput(){ + SDL_Event event; + SDL_PollEvent(&event); + switch(event.type){ + case SDL_QUIT: + gameRunning = false; + break; + case SDL_KEYDOWN: + if(event.key.keysym.sym == SDLK_ESCAPE){ + gameRunning = false; + } + break; + } +} +void LoopManager::loop(){ + while(gameRunning){ + //processInput(); + //update(); + //render(); + } + window.destroyWindow(); +} +void LoopManager::setup(){ + gameRunning = window.initWindow(); +} +void LoopManager::render(){ + if(gameRunning){ + SDL_SetRenderDrawColor(window.getRenderer(),255,0,0,255); + SDL_RenderClear(window.getRenderer()); + } +} +void LoopManager::update(){ + +} diff --git a/gameloop/src/main.cpp b/gameloop/src/main.cpp new file mode 100644 index 0000000..76d0c84 --- /dev/null +++ b/gameloop/src/main.cpp @@ -0,0 +1,17 @@ +//Using SDL and standard IO +#include +#include +//#include "window.h" +#include "loopManager.h" +//Screen dimension constants + + +//Starts up SDL and creates window + +int main( int argc, char* args[] ) +{ + LoopManager gameLoop; + gameLoop.setup(); + gameLoop.loop(); + return 0; +} diff --git a/gameloop/src/window.cpp b/gameloop/src/window.cpp new file mode 100644 index 0000000..11424dd --- /dev/null +++ b/gameloop/src/window.cpp @@ -0,0 +1,48 @@ +#include "window.h" + +WindowManager::WindowManager(){ + if( !initWindow() ) + { + printf( "Failed to initialize!\n" ); + } +} +WindowManager::~WindowManager(){ + destroyWindow(); +} +bool WindowManager::init() +{ +} +bool WindowManager::loadMedia() +{ +} +void WindowManager::close() +{ + +} +SDL_Renderer* WindowManager::getRenderer(){ + return renderer; +} +void WindowManager::update(){ +} +bool WindowManager::initWindow(){ + if(SDL_Init(SDL_INIT_EVERYTHING) != 0){ + fprintf(stderr,"Error inititalising SDL.\n"); + return false; + } + window = SDL_CreateWindow("Gameloop POC",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_RESIZABLE); + if(!window){ + fprintf(stderr,"Error creating SDL Window. \n"); + return false; + } + renderer = SDL_CreateRenderer(window,-1,0); + if(!renderer){ + fprintf(stderr,"Error creating SDL renderer. \n"); + return false; + } + return true; +} +void WindowManager::destroyWindow(){ + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} -- cgit v1.2.3