From 3b8affae37dac70369bc915a2c293fabb60be8d4 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Mon, 8 Jun 2020 23:59:42 +0300 Subject: [PATCH] Main Window Class New Placeholder Spritesheet Timer Class Key Press And Small Fixes --- Cell.hpp | 7 ++-- Data/SpriteSheet.png | Bin 1126 -> 18498 bytes GameConfiguration.hpp | 15 +++++--- GameManager.hpp | 14 +++++++ GameWindow.hpp | 84 +++++++++++++++++++++++++++++++++++++++++- SynEngine.hpp | 1 + Timer.hpp | 47 +++++++++++++++++++++++ main.cpp | 17 ++++----- 8 files changed, 164 insertions(+), 21 deletions(-) create mode 100644 Timer.hpp diff --git a/Cell.hpp b/Cell.hpp index a1bcf52..33c5644 100644 --- a/Cell.hpp +++ b/Cell.hpp @@ -10,8 +10,8 @@ class Cell : public Drawable bool CreateSprite(); public: Cell(); - Cell(unsigned int, unsigned int, unsigned int = 1); - void Set(unsigned int, unsigned int, unsigned int = 1); + Cell(unsigned int, unsigned int, unsigned int = 0); + void Set(unsigned int, unsigned int, unsigned int = 0); void UpdateSprite(unsigned int); void UpdateRotation(unsigned); void Draw(sf::RenderWindow *); @@ -47,7 +47,8 @@ bool Cell::CreateSprite() void Cell::UpdateSprite(unsigned int index) { if(index == spriteIndex) return; - sprite.setTextureRect(GameManager::GetConfig() -> GetSpriteRect(index)); + spriteIndex = index; + sprite.setTextureRect(GameManager::GetConfig() -> GetSpriteRect(spriteIndex)); } void Cell::UpdateRotation(unsigned direction) diff --git a/Data/SpriteSheet.png b/Data/SpriteSheet.png index 9305bcc6c9e06a4e3f3ab41b74c6166a81835147..9aa6a4f528f480f290d849704292c16c3d6dcd73 100644 GIT binary patch literal 18498 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
c4BXfB)7f&|@_a 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 B?9u=L literal 1126 zcmV-s1eyDZP)p5Ph0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKp2MKrqvdyI9Nf%AwzYtAS&W0RV;#q(pG5I!Q|2(p-DrM z;^HW{799LptU9+0Yt2!cN#PL58BE>hxmNufoI2Y2`I-uJ%TeFq4Q3RBI%IG}2l zkxsleglHX*n5ic-3t4!MuY36Tei!3e-gSSDUZr3%z$X&VGTpF<*NLY$ zEuHf|afFp6h4`F!%%BSrKXP4m`HgeQVS#5xjBI+2I6^FzI#}*tRyI`PDdMQ2YLqYJ zTvj-5aaJoe*19KuVYr|zXShyt7zr#Qi4;W0s9^&YScuWCkzyiE=W!4JkmFC0OD5L_ z7&+!qg$l{>ga5(r-kQb92{$Pm2fAKt`(p$M?gGuaZGRuzcJl=AKLb}<+h1(}GoPf_ z+gkJp=-UP^uG^Zt2VCv|gHO6-NRH&EDHMyq`x$*x9_YUXdRE=Owa#(+0A#6GOE@|;fhdTTAZ%wOzKl+YxcaJ(SA^-pY32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Rf1_THPFea#G5C8xG8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b z0#8XqK~#9!?VW9|!XOYuEn$n@Pxs>@^{=Uo7E0mX;oN`kCC15|`2t&5UeE1;oRx3^ z2oVSo2tkNIh(L%y2twqneDU+kx_$mRWUpsu!%pG1pU6TGmLvpHETsBc)@@)d{TtKQ zZKIHmk1(=uAIP&6^VHUTQ6pX1ynuz&aTRfeBE7J8cr}l(Jc;i{&7~c_G(`>ec^Wf? zRE6KNZgq4)D95-IWLSjOyW2$+$-?QE_Gq}mE-Ey4WDd(ayE8WYZd&gr__^CmFSL)j zG>JO`KS7h>=U(#@`~>+G*-S6=<`<`s8l_>>!4y*aXk&NAzFLrl_EnuMv=<2dSE3wdNfsgyA`pTQ zfe?WZfe?fUgb0KPgdjv9M8h=KPreGrP>UiQ<(ePgEBLN&!&hO#W})&c+V|N;FJzqI zNcGV!O4ITi)v&e386$o?kZ;LP0b2(zrRJ9PblmTAlVpRet&1ujLR5RVT_mKg#89=J zDFDAmh<%poQ-O=K@HfA)J6LvyBQ&u#x#!;*Gh(k?bBD0%8SJm;aXA`$`Ihdw@GsrZ z|M&5ra>9Lk!0ZgR$@k$7Be==sF>G_&M=%KODT2_RV!=3brfT^|u3;os-jdPmg5~QY>3LIpieJ+Afh+-XS5O$?_M>^6A?L`)X s5P=YZ5QGSX2!sfPAVeTUAVe4R1`jg>+=R#!rT_o{07*qoM6N<$g6M7dtN;K2 diff --git a/GameConfiguration.hpp b/GameConfiguration.hpp index 47081a3..0732006 100644 --- a/GameConfiguration.hpp +++ b/GameConfiguration.hpp @@ -28,6 +28,7 @@ class GameConfiguration public: GameConfiguration(); GameConfiguration(std::string = std::string()); + bool IsFullscreen(); float GetSpriteSizeMultiplier(); float GetAudioVolume(); sf::Color GetBackgroundColor(); @@ -190,18 +191,15 @@ void GameConfiguration::WriteValuesToFile(std::string path) void GameConfiguration::LoadDefaultValues() { windowDimensions = sf::Vector2i(800, 600); - // !! Placeholder values! Change after real sprites are added! !! - spriteSizeMultiplier = 1.0; - backgroundColor = sf::Color::White; gridSize = sf::Vector2i(10, 10); LoadSpriteSheet("Data\\SpriteSheet.png"); - // !! Placeholder values! Change after real sprites are added! !! - spriteSheetCellSize = sf::Vector2i(50, 50); + spriteSheetCellSize = sf::Vector2i(64, 64); + spriteSizeMultiplier = 1.0; + fullscreen = false; - audioVolume = 1.0; } @@ -234,6 +232,11 @@ sf::IntRect GameConfiguration::GetSpriteRect(unsigned int index) return spriteSheetRect; } +bool GameConfiguration::IsFullscreen() +{ + return fullscreen; +} + sf::Vector2i GameConfiguration::GetGridSize() { return gridSize; diff --git a/GameManager.hpp b/GameManager.hpp index 95e0840..736acd4 100644 --- a/GameManager.hpp +++ b/GameManager.hpp @@ -5,13 +5,27 @@ class GameManager { private: static GameConfiguration *config; + static unsigned lastInputDirection; public: + static void KeyPress(sf::Keyboard::Key); static void SetConfig(GameConfiguration &); static GameConfiguration *GetConfig(); }; GameConfiguration *GameManager::config = NULL; +unsigned GameManager::lastInputDirection = 0; + +void GameManager::KeyPress(sf::Keyboard::Key keycode) +{ + switch (keycode) + { + case sf::Keyboard::Key::Right: case sf::Keyboard::Key::D: GameManager::lastInputDirection = 0; break; + case sf::Keyboard::Key::Down: case sf::Keyboard::Key::S: GameManager::lastInputDirection = 1; break; + case sf::Keyboard::Key::Left: case sf::Keyboard::Key::A: GameManager::lastInputDirection = 2; break; + case sf::Keyboard::Key::Up: case sf::Keyboard::Key::W: GameManager::lastInputDirection = 3; break; + } +} void GameManager::SetConfig(GameConfiguration &config) { diff --git a/GameWindow.hpp b/GameWindow.hpp index 875d878..eb0526b 100644 --- a/GameWindow.hpp +++ b/GameWindow.hpp @@ -3,17 +3,97 @@ class GameWindow { private: + sf::Event event; sf::Vector2i windowDimensions; + std::string title; + sf::Uint32 style; sf::RenderWindow window; + Timer timer; + GameConfiguration *config; + Drawable *drawable; + void (Drawable::*draw)(sf::RenderWindow *); + bool isFocused; + bool fullscreen; + void CreateWindow(); + void CloseWindow(); public: - GameWindow(/* args */); + GameWindow(std::string = "Window", sf::Uint32 = sf::Style::Titlebar | sf::Style::Close); + void BindDrawable(Drawable *, void (Drawable::*)(sf::RenderWindow *)); + void Update(); + bool IsOpen(); ~GameWindow(); }; -GameWindow::GameWindow(/* args */) +void GameWindow::Update() { + while (window.pollEvent(event)) + switch (event.type) + { + case sf::Event::Closed: CloseWindow(); break; + case sf::Event::LostFocus: isFocused = false; break; + case sf::Event::GainedFocus: isFocused = true; break; + case sf::Event::KeyPressed: + if(event.key.code == sf::Keyboard::Key::Escape) + CloseWindow(); + GameManager::KeyPress(event.key.code); + break; + } + + timer.UpdateTime(); + + if(!isFocused) + return; + + window.clear(config -> GetBackgroundColor()); + ((drawable)->*(draw))(&window); + + window.display(); +} + +void GameWindow::CreateWindow() +{ + if(window.isOpen()) + return; + + sf::VideoMode videoMode(windowDimensions.x, windowDimensions.y); + window.create(videoMode, title, fullscreen ? sf::Style::Fullscreen : style); + window.setVerticalSyncEnabled(true); + window.setFramerateLimit(60); + timer.ResetTimer(); +} + +void GameWindow::CloseWindow() +{ + if(!window.isOpen()) + return; + + window.close(); +} + +void GameWindow::BindDrawable(Drawable *drawable, void (Drawable::*draw)(sf::RenderWindow *)) +{ + this -> drawable = drawable; + this -> draw = draw; +} + +GameWindow::GameWindow(std::string title, sf::Uint32 style) +{ + config = GameManager::GetConfig(); + windowDimensions = config -> GetScreenDimensions(); + fullscreen = config -> IsFullscreen(); + this -> style = style; + this -> title = title; + isFocused = true; + + CreateWindow(); +} + +bool GameWindow::IsOpen() +{ + return window.isOpen(); } GameWindow::~GameWindow() { + CloseWindow(); } diff --git a/SynEngine.hpp b/SynEngine.hpp index 9a8f7e6..fe19b24 100644 --- a/SynEngine.hpp +++ b/SynEngine.hpp @@ -5,6 +5,7 @@ #include #include #include + #include "Timer.hpp" #include "GameManager.hpp" #include "GameConfiguration.hpp" #include "Drawable.hpp" diff --git a/Timer.hpp b/Timer.hpp new file mode 100644 index 0000000..29ad2f0 --- /dev/null +++ b/Timer.hpp @@ -0,0 +1,47 @@ +#include "SynEngine.hpp" + +class Timer +{ + private: + sf::Clock clock; + float deltaTime; + float timePassed; + public: + Timer(); + void ResetTimer(); + void UpdateTime(); + float GetDeltaTime(); + float GetTimePassed(); +}; + +Timer::Timer() +{ + clock.restart(); + timePassed = 0.0; + deltaTime = 0.0; +} + +void Timer::ResetTimer() +{ + clock.restart(); + timePassed = 0.0; + deltaTime = 0.0; +} + +void Timer::UpdateTime() +{ + float newTimePassed = clock.getElapsedTime().asSeconds(); + + deltaTime = newTimePassed - timePassed; + timePassed = newTimePassed; +} + +float Timer::GetDeltaTime() +{ + return deltaTime; +} + +float Timer::GetTimePassed() +{ + return timePassed; +} diff --git a/main.cpp b/main.cpp index 8908208..19ec67c 100644 --- a/main.cpp +++ b/main.cpp @@ -4,20 +4,17 @@ int main(int argc, char const *argv[]) { GameConfiguration config = GameConfiguration("Configurations"); GameManager::SetConfig(config); + GameWindow window("Long Starlight"); Grid grid = Grid(); + grid.SetGrid(); + window.BindDrawable(&grid, &Drawable::Draw); - sf::RenderWindow render(sf::VideoMode(800, 600), "Test"); + grid.UpdateCell(0, 0, 2); + grid.UpdateCell(0, 1, 2, 1); - if (render.isOpen()) // Quick Test - { - render.clear(config.GetBackgroundColor()); - grid.UpdateCell(0, 0, 2); - grid.UpdateCell(0, 1, 2, 1); - grid.Draw(&render); - render.display(); - sf::sleep(sf::milliseconds(5000)); - } + while (window.IsOpen()) + window.Update(); std::cout << "/)(\\"; return 0;