From ae5fa3f2aa29248f5beb8d09ff3bcbf9c2e647d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Nie=C3=9Fner?= Date: Fri, 25 May 2018 12:13:06 +0200 Subject: [PATCH] Some test inputs and commentarys --- assets/police_officer.png | Bin 1824 -> 13039 bytes src/Camera.cpp | 15 ++++++--------- src/Camera.h | 10 ++++------ src/DarkRP2D.cpp | 9 --------- src/DarkRP2D.h | 1 - src/DesktopLauncher.cpp | 7 ++++++- src/Mesh.h | 2 ++ src/Texture.cpp | 2 +- src/input/Command.cpp | 23 +++++++++++++++++++++++ src/input/Command.h | 26 +++++++++++++++++++++++++- src/input/InputHandler.cpp | 30 ++++++++++++++++++++++++++---- src/input/InputHandler.h | 1 + src/screens/GameScreen.cpp | 13 ++++++++++++- src/screens/GameScreen.h | 2 ++ 14 files changed, 108 insertions(+), 33 deletions(-) create mode 100644 src/input/Command.cpp diff --git a/assets/police_officer.png b/assets/police_officer.png index 04b7c63f271a1a5df80df293ea8eaf32e8169b4a..d4a832693d11a7748e0f39f2f7a7419e863a8d81 100644 GIT binary patch literal 13039 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 literal 1824 zcmV+*2jBRKP)PKY01SNn% zqMxU{DVmTVEJ0z3;9F#XErWt=wOiJ$tYvNe&^<@*dc9unt}QCRPxtbF{`Y@RJHGYw7_Q^Irqt#_*6N^F#M5d9f>35te1V zZBsXPN2yFe1VNDOd^8dU;Pj3zrC!VJwOU~upyj!@r33a-CjdpoC5e4SAe0E_W0N0Z2v}4B@mOHhD8~ToC|4QXm9|{V)@NxSGT1&_Q&*XaOV9h zO{y@*^`B2bfo_9>czyc{09sb0+@Ev8ncl<%eC<>(nDoJ_6_peO09Snjk}n z2aWxG34rn$ccqo7teel*yH`p&1y(q3iGnHOCqLgR?f8d-bbj%JOyIGXPDtCMgZ-*X zD(mLoQdkk@o9z!v`@5c5Moo2vw7>k>EpVFzARaieE9Kxh?=}3xLEib|H~^P%$j&RP zqj&!cvi-S40Qlh5bpSNG>r<{VePt(@^dV=r!De@T!sw|0Bs-L-5V^x5!>@mII7Lq` z$yo&?^XMCU066mAi$J0})DX@p<_|F=@5Z1n&sQN1@w^X^43F9p$#ZBcLGpo z0}7303n8Nup;4@u0O3vrP>k^(Ep+2O@5Ot;OK>Dez#q_*onAAYimD3S_quVcT)J>cm!5z>AO%S+0Hfm*czlDF*j!UnlL)}Y zix&+ka5__+RYN%6x^@NU`n_Dfd|g#;?%bI)&v(;zv^QhGd_JGFJuzYYWoj`%C=@a@ zST^qNwRrwKnzjl67A?GoMGNl%;J4o|rkoS>9qm;eFS5_wYY7CjTS+g)fNjm1HSxoT z4`&q4$gJgfd?#s|QzsqL3Wgp=$8TlV;~OM2YdIK9STgI@tpl)0OW|NJXj&;i(6tzR zzsiDO1s>lZ*IkRjB0B|A0Q&pYUs4#M9|tf<)0{e429=05NLLMFtj9OV37-S7&PIV0 zfZhELEx8nK^!3R0r?sw^?QcJDnlE2oqNyWO8+d$!06hK4St=Ghn3a8cNnT0C-5d3- z=EjcgVf{lb^c+vT(-+(2tL4w{BYg+?cE_89emy81TQa{;B@cM^ZGRm~Kx8tczd@Eb_LV3fCUmty_^$43ZVIVbJwasH{|Eqpb(RZ~Vu za`}V73J{L=9RD6b)A@ARo#jL)#;`lffkXhZ<zL1Rl}Q||)?_IA;@p<9=%r~);SxxYC}tIb6E3Z+BKoK>(Nx28aw_)oq9D zni}Ua-V$TsaR&Bwp?3u-80kAmJTfjfM5pt~L?=dZRL>?dd=_eU_z-sKy zN}@N$G@Z|csQ?(A1C*^`B>Ps8>9w+E8+dni(zv0UqSEwzt;I-R;<+G~&TExFSnyih z%w3?WwWDB}7wGw6A#D}JBI6Lp&_tLIGG!l3RzQ)%WojZ6El^1G{DzVkCotfT(eT@*E_hpD)Oo{$lF0ejB|6F1Ux4rMpW`2njcwh$+I}AZ O0000 -OrtographicCamera::~OrtographicCamera() { - -} - void OrtographicCamera::setPosition(glm::vec2 position) { this->cameraPos = position; } @@ -19,14 +15,14 @@ void OrtographicCamera::setZoomLevel(float newZoom) { } void OrtographicCamera::zoomIn(float targetZoom) { - + zoom -= targetZoom; } -void OrtographicCamera::translate(glm::vec2) { - +void OrtographicCamera::translate(glm::vec2 target) { + cameraPos = cameraPos - target; } -void OrtographicCamera::smoothTranslate(glm::vec2) { +void OrtographicCamera::smoothTranslate(glm::vec2 target) { } @@ -40,8 +36,9 @@ glm::mat4 OrtographicCamera::getProjectionMatrix() { //Dies gibt die Größe des kamera auschnittes an die in die welt zeigt (Frustum) int width = 800; int height = 600; + int DPI = 2; // 200% windows settings glm::mat4 projection; - projection = glm::ortho(0.0f, width*this->zoom, 0.0f, height*this->zoom); + projection = glm::ortho(0.0f, (width/DPI)*this->zoom, 0.0f, (height/DPI)*this->zoom); return projection; } diff --git a/src/Camera.h b/src/Camera.h index a10bc11..3e72c20 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -6,12 +6,10 @@ class OrtographicCamera { private: glm::vec2 cameraPos; - - float zoom = 0.05f; + float zoom; public: - OrtographicCamera() : cameraPos(glm::vec2(-5.0f,-5.0f)) {} - ~OrtographicCamera(); + OrtographicCamera() : cameraPos(glm::vec2(-5.0f,-5.0f)), zoom(0.05f) {} void setPosition(glm::vec2); glm::vec2 getPosition(); @@ -19,8 +17,8 @@ class OrtographicCamera { void setZoomLevel(float newZoom); void zoomIn(float targetZoom); - void translate(glm::vec2); - void smoothTranslate(glm::vec2); + void translate(glm::vec2 target); + void smoothTranslate(glm::vec2 target); glm::mat4 getViewMatrix(); glm::mat4 getProjectionMatrix(); diff --git a/src/DarkRP2D.cpp b/src/DarkRP2D.cpp index 43b8cbd..407ecf0 100644 --- a/src/DarkRP2D.cpp +++ b/src/DarkRP2D.cpp @@ -18,7 +18,6 @@ DarkRP2D::~DarkRP2D() { #endif delete gameScreen; delete assets; - delete inputHandler; delete renderer; } @@ -31,7 +30,6 @@ void DarkRP2D::create () { renderer = new Renderer(); - inputHandler = new InputHandler(); font = new BitmapFont("arial.ttf"); gameScreen = new GameScreen(renderer,assets); @@ -67,13 +65,6 @@ void DarkRP2D::loop(unsigned int delta) { } void DarkRP2D::update(unsigned int delta) { - SDL_Event event; - while(SDL_PollEvent(&event) != 0) { - Command* command = inputHandler->handleInput(&event); - if (command) { - command->execute(); - } - } gameScreen->update(); } diff --git a/src/DarkRP2D.h b/src/DarkRP2D.h index 800f140..70b48aa 100644 --- a/src/DarkRP2D.h +++ b/src/DarkRP2D.h @@ -17,7 +17,6 @@ class DarkRP2D { SDL_Window* gWindow; Assets *assets; Renderer* renderer; - InputHandler *inputHandler; BitmapFont *font; Screen *gameScreen; diff --git a/src/DesktopLauncher.cpp b/src/DesktopLauncher.cpp index d08be64..451dbc5 100755 --- a/src/DesktopLauncher.cpp +++ b/src/DesktopLauncher.cpp @@ -49,6 +49,8 @@ namespace Game { } bool initSDL() { + int result = SetProcessDPIAware(); // NEEDED or SDL_GetDisplayDPI returns wrong numbers + cout << "Result: " << result << endl; //Init SDL if(SDL_Init(SDL_INIT_VIDEO) < 0 ) { cout << "SDL could not initialize! SDL_Error: " << SDL_GetError() << endl; @@ -62,7 +64,10 @@ bool initSDL() { return false; } //Read in Display DPI - SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(gWindow),&Game::DDPI,&Game::HDPI,&Game::VDPI); + int returnDisplayDPI = SDL_GetDisplayDPI(SDL_GetWindowDisplayIndex(gWindow),&Game::DDPI,&Game::HDPI,&Game::VDPI); + if(returnDisplayDPI != 0) { + cout << "DisplayDPI cannot be loaded! SDL_ERROR: " << SDL_GetError() << endl; + } cout << "DPI: DDPI: " << Game::DDPI << " HDPI: " << Game::HDPI << " VPDI: " << Game::VDPI << endl; //Mask deprectated functions SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); diff --git a/src/Mesh.h b/src/Mesh.h index 7720978..40d9e97 100644 --- a/src/Mesh.h +++ b/src/Mesh.h @@ -5,6 +5,8 @@ #include #include +//Aggregate class -> so following construction is available +//Vertex2D{glm::vec2(-0.5f,-0.5f), glm::vec2(0.0f,1.0f)} struct Vertex2D { glm::vec2 position; glm::vec2 texCoord; diff --git a/src/Texture.cpp b/src/Texture.cpp index 53ba262..dee9855 100644 --- a/src/Texture.cpp +++ b/src/Texture.cpp @@ -4,7 +4,7 @@ Texture2D::Texture2D() - : Width(0), Height(0), Internal_Format(GL_RGB), Image_Format(GL_RGB), Wrap_S(GL_REPEAT), Wrap_T(GL_REPEAT), Filter_Min(GL_NEAREST_MIPMAP_NEAREST), Filter_Max(GL_NEAREST) + : Width(0), Height(0), Internal_Format(GL_RGB), Image_Format(GL_RGB), Wrap_S(GL_REPEAT), Wrap_T(GL_REPEAT), Filter_Min(GL_LINEAR_MIPMAP_NEAREST), Filter_Max(GL_NEAREST) { glGenTextures(1, &this->ID); } diff --git a/src/input/Command.cpp b/src/input/Command.cpp new file mode 100644 index 0000000..f15c989 --- /dev/null +++ b/src/input/Command.cpp @@ -0,0 +1,23 @@ +#include "Command.h" + +#include "../DesktopLauncher.h" + +void QuitCommand::execute(OrtographicCamera& camera) { + Game::exit(); +} + +void WCommand::execute(OrtographicCamera& camera) { + camera.zoomIn(0.01f); +} + +void ACommand::execute(OrtographicCamera& camera) { + camera.translate(glm::vec2(-0.1f, 0.0f)); +} + +void SCommand::execute(OrtographicCamera& camera) { + camera.zoomIn(-0.01f); +} + +void DCommand::execute(OrtographicCamera& camera) { + camera.translate(glm::vec2(0.1f, 0.0f)); +} \ No newline at end of file diff --git a/src/input/Command.h b/src/input/Command.h index 7f103e3..0e107b9 100644 --- a/src/input/Command.h +++ b/src/input/Command.h @@ -1,10 +1,34 @@ #ifndef COMMAND_H #define COMMAND_H +#include "../Camera.h" + class Command { public: virtual ~Command() {} - virtual void execute() = 0; + virtual void execute(OrtographicCamera& camera) = 0; +}; + +class QuitCommand : public Command { + public: + virtual void execute(OrtographicCamera& camera) override; +}; + +class WCommand : public Command { + public: + virtual void execute(OrtographicCamera& camera) override; +}; +class ACommand : public Command { + public: + virtual void execute(OrtographicCamera& camera) override; +}; +class SCommand : public Command { + public: + virtual void execute(OrtographicCamera& camera) override; +}; +class DCommand : public Command { + public: + virtual void execute(OrtographicCamera& camera) override; }; diff --git a/src/input/InputHandler.cpp b/src/input/InputHandler.cpp index f31409f..6977287 100644 --- a/src/input/InputHandler.cpp +++ b/src/input/InputHandler.cpp @@ -1,14 +1,22 @@ #include "InputHandler.h" -#include "../DesktopLauncher.h" #include InputHandler::InputHandler() { - + W = new WCommand(); + A = new ACommand(); + S = new SCommand(); + D = new DCommand(); + quit = new QuitCommand(); } InputHandler::~InputHandler() { //Free all Commands + delete W; + delete A; + delete S; + delete D; + delete quit; } Command* InputHandler::handleInput(SDL_Event *event) { @@ -17,8 +25,7 @@ Command* InputHandler::handleInput(SDL_Event *event) { } switch (event->type) { case SDL_QUIT: - Game::exit(); - return NULL; + return quit; break; case SDL_KEYDOWN: std::cout << "The Key " << SDL_GetKeyName(event->key.keysym.sym) << " has been pressed!" << std::endl; @@ -26,6 +33,21 @@ Command* InputHandler::handleInput(SDL_Event *event) { break; case SDL_KEYUP: std::cout << "The Key " << SDL_GetKeyName(event->key.keysym.sym) << " has been released!" << std::endl; + switch(event->key.keysym.sym) { + case SDLK_w: + return W; + break; + case SDLK_a: + return A; + break; + case SDLK_s: + return S; + break; + case SDLK_d: + return D; + break; + default: break; + } return NULL; break; default: diff --git a/src/input/InputHandler.h b/src/input/InputHandler.h index 72a8f0a..20b200d 100644 --- a/src/input/InputHandler.h +++ b/src/input/InputHandler.h @@ -15,5 +15,6 @@ class InputHandler { Command* A; Command* S; Command* D; + Command* quit; }; #endif diff --git a/src/screens/GameScreen.cpp b/src/screens/GameScreen.cpp index 815d300..9163b45 100644 --- a/src/screens/GameScreen.cpp +++ b/src/screens/GameScreen.cpp @@ -1,5 +1,6 @@ #include "GameScreen.h" #include +#include #include @@ -8,6 +9,8 @@ GameScreen::GameScreen(Renderer* renderer, Assets* assets) { this->renderer = renderer; this->assets = assets; + //Vertex2D can be defined like this, because it an aggregate class. + // see https://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are-they-special std::vector vertices({ Vertex2D{glm::vec2(-0.5f,-0.5f), glm::vec2(0.0f,1.0f)}, Vertex2D{glm::vec2(0.5f,-0.5f), glm::vec2(1.0f,1.0f)}, @@ -22,6 +25,7 @@ GameScreen::GameScreen(Renderer* renderer, Assets* assets) { obj = new Mesh(vertices,indices,assets->getTexture("police_officer")); + inputHandler = new InputHandler(); camera = new OrtographicCamera(); //Create Entities @@ -33,6 +37,7 @@ GameScreen::GameScreen(Renderer* renderer, Assets* assets) { GameScreen::~GameScreen() { delete camera; delete obj; + delete inputHandler; } void GameScreen::hide() { @@ -52,7 +57,13 @@ void GameScreen::render() { } void GameScreen::update() { - + SDL_Event event; + while(SDL_PollEvent(&event) != 0) { + Command* command = inputHandler->handleInput(&event); + if (command) { + command->execute(*camera); + } + } } void GameScreen::resize() { diff --git a/src/screens/GameScreen.h b/src/screens/GameScreen.h index 78735bf..60d1f17 100644 --- a/src/screens/GameScreen.h +++ b/src/screens/GameScreen.h @@ -6,6 +6,7 @@ #include "../Assets.h" #include "../Mesh.h" #include "../Camera.h" +#include "../input/InputHandler.h" class GameScreen : public Screen { public: @@ -23,6 +24,7 @@ class GameScreen : public Screen { private: Renderer* renderer; Assets* assets; + InputHandler* inputHandler; OrtographicCamera *camera; Mesh *obj;