From b6854c79ec8ddf4a15c5720a079152e635321caa Mon Sep 17 00:00:00 2001 From: Benedikt Galbavy Date: Thu, 11 Apr 2024 15:23:19 +0200 Subject: [PATCH] Added interface for game functions --- CMakeLists.txt | 23 +++++++++++------------ include/Game.h | 8 ++++++++ src/Game.cpp | 4 ++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1905143..c259861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.15) -project(SDL_Minigame) +project(engine) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) -set(PROJECT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) +set(ENGINE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(ENGINE_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) +set(ENGINE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(BUILD_SHARED_LIBS FALSE) @@ -15,17 +15,19 @@ set(BUILD_SHARED_LIBS FALSE) set(SDL2MIXER_VENDORED ON) set(SDL2TTF_VENDORED ON) +set(SDL2_SOURCE_DIR “${ENGINE_SOURCE_DIR}/extern/SDL”) + add_subdirectory(extern/SDL EXCLUDE_FROM_ALL) add_subdirectory(extern/SDL_image EXCLUDE_FROM_ALL) add_subdirectory(extern/SDL_mixer EXCLUDE_FROM_ALL) add_subdirectory(extern/SDL_ttf EXCLUDE_FROM_ALL) -file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp) -add_executable(${PROJECT_NAME} ${SOURCES}) +file(GLOB_RECURSE SOURCES ${ENGINE_SOURCE_DIR}/src/*.cpp) +add_library(${PROJECT_NAME} ${SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDE_DIR}) +target_include_directories(${PROJECT_NAME} PUBLIC ${ENGINE_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE +target_link_libraries(${PROJECT_NAME} PUBLIC # should be private when all SDL functionality has a wrapper SDL2::SDL2main SDL2::SDL2-static SDL2_image::SDL2_image-static @@ -36,7 +38,4 @@ target_link_libraries(${PROJECT_NAME} PRIVATE if(CMAKE_BUILD_TYPE MATCHES "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address -fno-omit-frame-pointer") target_link_libraries(${PROJECT_NAME} PRIVATE "-fsanitize=address") -endif() - - -file(COPY ${PROJECT_SOURCE_DIR}/assets DESTINATION ${PROJECT_BINARY_DIR}) \ No newline at end of file +endif() \ No newline at end of file diff --git a/include/Game.h b/include/Game.h index 5915eb8..0b1270b 100644 --- a/include/Game.h +++ b/include/Game.h @@ -3,18 +3,26 @@ #include #include #include +#include #include #include "Manager.h" #include "Vector2D.h" #include "Entity.h" +typedef std::function gamefunction; + class AssetManager; class CollisionHandler; class TextureManager; class SoundManager; class Map; +namespace engine { + extern gamefunction init; + extern gamefunction update; +} + class Game { public: diff --git a/src/Game.cpp b/src/Game.cpp index 4292558..a234607 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -130,6 +130,8 @@ void Game::init(const char* title, int xpos, int ypos, int width, int height, bo return; } + engine::init(); + // character selection const char* player1Sprite; const char* player2Sprite; @@ -297,6 +299,8 @@ void Game::update() manager.refresh(); manager.update(); + engine::update(); // TODO: this might have to be split up into two update functions, before and after manager... + if (powerupSpawn == 0) { assets->createPowerup(assets->calculateSpawnPosition(), assets->calculateType());