From f4f9560fa98359cc7ed35cdb00ead66694475b2eaf362a4569c0230f25af12e7 Mon Sep 17 00:00:00 2001 From: Arotex Date: Sun, 26 Oct 2025 19:41:47 +0100 Subject: [PATCH] Created Capter2 for Test with componentbased objects --- Capter2/Actor.cpp | 9 ++++ Capter2/Actor.hpp | 14 ++++++ Capter2/game.cpp | 121 ++++++++++++++++++++++++++++++++++++++++++++++ Capter2/game.hpp | 33 +++++++++++++ Capter2/main.cpp | 20 ++++++++ 5 files changed, 197 insertions(+) create mode 100644 Capter2/Actor.cpp create mode 100644 Capter2/Actor.hpp create mode 100644 Capter2/game.cpp create mode 100644 Capter2/game.hpp create mode 100644 Capter2/main.cpp diff --git a/Capter2/Actor.cpp b/Capter2/Actor.cpp new file mode 100644 index 0000000..98f139f --- /dev/null +++ b/Capter2/Actor.cpp @@ -0,0 +1,9 @@ +#include "Actor.hpp" + +Actor::Actor(/* args */) +{ +} + +Actor::~Actor() +{ +} \ No newline at end of file diff --git a/Capter2/Actor.hpp b/Capter2/Actor.hpp new file mode 100644 index 0000000..daf8a07 --- /dev/null +++ b/Capter2/Actor.hpp @@ -0,0 +1,14 @@ +#pragma once + +class Actor +{ +private: + /* data */ +public: + Actor(/* args */); + ~Actor(); + + void Update(float); + void Draw(SDL_Renderer *); + +}; diff --git a/Capter2/game.cpp b/Capter2/game.cpp new file mode 100644 index 0000000..8b6f4f9 --- /dev/null +++ b/Capter2/game.cpp @@ -0,0 +1,121 @@ +#include "game.hpp" +#include "Actor.hpp" + + +game::game() +{ + ptr_MainWindow = nullptr; + ptr_MainRenderer = nullptr; + GameTick = 0; + GameIsRunning = true; +} + +game::~game() +{ +} + + +void game::input() +{ + SDL_Event event; + + while (SDL_PollEvent (&event)) + { + switch (event.type) + { + case SDL_QUIT: + GameIsRunning = false; + break; + + default: + break; + } + } + + const Uint8* state = SDL_GetKeyboardState(NULL); + if (state[SDL_SCANCODE_ESCAPE]) + { + GameIsRunning = false; + } + + +} + +void game::update() +{ + while (!SDL_TICKS_PASSED(SDL_GetTicks(), GameTick + 16)); //Wait 16ms since last frame + + float dt = (SDL_GetTicks() - GameTick)/ 1000.0f; //Zeitdifferent in Sekunden + if(dt > 0.05f) dt = 0.05f; + + GameTick = SDL_GetTicks(); + + //Update all Actores + + UpdateActors = true; + for (auto a : ActorList) + { + a->Update(dt); + } + + UpdateActors = false; + +} + +void game::output() +{ + for (auto a : ActorList) + { + a->Draw(ptr_MainRenderer); + } +} + +bool game::Init(int x, int y, int w, int h) +{ + ptr_MainWindow = SDL_CreateWindow("ComponentBasedProgramm", x,y,w,h,0); + + if (!ptr_MainWindow) + { + return false; + } + + ptr_MainRenderer = SDL_CreateRenderer(ptr_MainWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + + if (!ptr_MainRenderer) + { + return false; + } + + GameTick = SDL_GetTicks(); + + return true; + +} + +void game::RunLoop() +{ + while(GameIsRunning){ + input(); + update(); + output(); + } + +} + +void game::Shutdown() +{ + +} + +void game::AddActor(class Actor *ptr_actor) +{ + SDL_DestroyRenderer(ptr_MainRenderer); + SDL_DestroyWindow(ptr_MainWindow); + SDL_Quit(); + +} + +void RemActor(class Actor *ptr_actor) +{ + +} \ No newline at end of file diff --git a/Capter2/game.hpp b/Capter2/game.hpp new file mode 100644 index 0000000..dfcd96c --- /dev/null +++ b/Capter2/game.hpp @@ -0,0 +1,33 @@ +#pragma once +#include "SDL2/SDL.h" +#include + +class game +{ +private: + void input(); //Process input + void update(); //update game + void output(); // generate output + + SDL_Window *ptr_MainWindow; + SDL_Renderer *ptr_MainRenderer; + Uint32 GameTick; + + bool GameIsRunning; + bool UpdateActors; + + std::vector ActorList; + +public: + game(); //constructor + ~game(); //destructor + + bool Init(int x, int y, int w, int h); + void RunLoop(); + void Shutdown(); + + void AddActor(class Actor *ptr_actor); + void RemActor(class Actor *ptr_actor); + +}; + diff --git a/Capter2/main.cpp b/Capter2/main.cpp new file mode 100644 index 0000000..a080603 --- /dev/null +++ b/Capter2/main.cpp @@ -0,0 +1,20 @@ +#include +#include "game.hpp" + + +int main(int argc, char const *argv[]) +{ + game game; + + bool success = game.Init(100,100,1024,768); + + while (success) + { + game.RunLoop(); + } + + game.Shutdown(); + + + return 0; +}