From 8183ad080e7196cd9dc04684e8043f718505e36a Mon Sep 17 00:00:00 2001 From: Syntriax Date: Thu, 4 Jun 2020 11:47:16 +0300 Subject: [PATCH] Default Configuration Class Spritesheet Implementation Sprite Display Sprite Size by Display Resolution Placeholder Spritesheet Image --- .vscode/settings.json | 46 +++++++++++++++++++- Data/SpriteSheet.png | Bin 0 -> 1126 bytes Engine.hpp | 4 -- GameConfiguration.hpp | 95 ++++++++++++++++++++++++++++++++++++++++++ GameWindow.hpp | 19 +++++++++ SynEngine.hpp | 7 ++++ main.cpp | 18 +++++++- 7 files changed, 183 insertions(+), 6 deletions(-) create mode 100644 Data/SpriteSheet.png delete mode 100644 Engine.hpp create mode 100644 GameConfiguration.hpp create mode 100644 GameWindow.hpp create mode 100644 SynEngine.hpp diff --git a/.vscode/settings.json b/.vscode/settings.json index 0cba2e6..76a6193 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,49 @@ { "files.associations": { - "iostream": "cpp" + "iostream": "cpp", + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/Data/SpriteSheet.png b/Data/SpriteSheet.png new file mode 100644 index 0000000000000000000000000000000000000000..9305bcc6c9e06a4e3f3ab41b74c6166a81835147 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/Engine.hpp b/Engine.hpp deleted file mode 100644 index 182c3c2..0000000 --- a/Engine.hpp +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef Engine - #define Engine - #include -#endif diff --git a/GameConfiguration.hpp b/GameConfiguration.hpp new file mode 100644 index 0000000..61db75f --- /dev/null +++ b/GameConfiguration.hpp @@ -0,0 +1,95 @@ +#include "SynEngine.hpp" + +class GameConfiguration +{ + private: + sf::Vector2i referenceWindowDimensions; + sf::Vector2f canvasSizeMultiplierRatio; + sf::Texture spriteSheet; + std::string spriteSheetPath; + sf::Vector2i spriteSheetCellSize; + sf::IntRect spriteSheetRect; + float spriteSizeMultiplier; + + float audioVolume; + + void LoadDefaultValues(); + bool LoadSpriteSheet(std::string); + public: + GameConfiguration(); + GameConfiguration(sf::Vector2i, std::string = std::string()); + float GetSpriteSizeMultiplier(); + float GetAudioVolume(); + sf::Sprite GetSprite(unsigned int, sf::Vector2f = sf::Vector2f(0, 0), float = 0.0); + ~GameConfiguration(); +}; + +GameConfiguration::GameConfiguration() +{ + LoadDefaultValues(); +} + +GameConfiguration::GameConfiguration(sf::Vector2i windowDimensions, std::string configurationPath) +{ + if(!configurationPath.empty()) + std::cout << "External Configurations Are Not Implemented Yet!\n"; + // else + LoadDefaultValues(); + + spriteSizeMultiplier = + (float)windowDimensions.x / (float)referenceWindowDimensions.x * canvasSizeMultiplierRatio.x + + (float)windowDimensions.y / (float)referenceWindowDimensions.y * canvasSizeMultiplierRatio.y; +} + +void GameConfiguration::LoadDefaultValues() +{ + // !! Placeholder values! Change after real sprites are added! !! + referenceWindowDimensions = sf::Vector2i(600, 500); + canvasSizeMultiplierRatio = sf::Vector2f(0.0, 1.0f); + spriteSizeMultiplier = 1.0; + + LoadSpriteSheet("Data\\SpriteSheet.png"); + // !! Placeholder values! Change after real sprites are added! !! + spriteSheetCellSize = sf::Vector2i(50, 50); + spriteSheetRect = sf::IntRect(sf::Vector2i(0, 0), spriteSheetCellSize); + + audioVolume = 1.0; +} + +bool GameConfiguration::LoadSpriteSheet(std::string path) +{ + spriteSheetPath = path; + return spriteSheet.loadFromFile(path); +} + +sf::Sprite GameConfiguration::GetSprite(unsigned int index, sf::Vector2f position, float rotation) +{ + int offset = spriteSheetRect.width * index; + int xSize = spriteSheet.getSize().x; + sf::Sprite sprite; + + spriteSheetRect.left = offset % xSize; + spriteSheetRect.top = offset / xSize * spriteSheetCellSize.y; + + sprite.setTexture(spriteSheet); + sprite.setTextureRect(spriteSheetRect); + sprite.setPosition(position * spriteSizeMultiplier); + sprite.setRotation(rotation); + sprite.setScale(spriteSizeMultiplier, spriteSizeMultiplier); + std::cout << spriteSizeMultiplier << "\n"; + return sprite; +} + +float GameConfiguration::GetSpriteSizeMultiplier() +{ + return spriteSizeMultiplier; +} + +float GameConfiguration::GetAudioVolume() +{ + return audioVolume; +} + +GameConfiguration::~GameConfiguration() +{ +} diff --git a/GameWindow.hpp b/GameWindow.hpp new file mode 100644 index 0000000..875d878 --- /dev/null +++ b/GameWindow.hpp @@ -0,0 +1,19 @@ +#include "SynEngine.hpp" + +class GameWindow +{ + private: + sf::Vector2i windowDimensions; + sf::RenderWindow window; + public: + GameWindow(/* args */); + ~GameWindow(); +}; + +GameWindow::GameWindow(/* args */) +{ +} + +GameWindow::~GameWindow() +{ +} diff --git a/SynEngine.hpp b/SynEngine.hpp new file mode 100644 index 0000000..bc6d025 --- /dev/null +++ b/SynEngine.hpp @@ -0,0 +1,7 @@ +#ifndef SynEngine + #define SynEngine + #include + #include + #include "GameWindow.hpp" + #include "GameConfiguration.hpp" +#endif diff --git a/main.cpp b/main.cpp index 580d843..afedd78 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,23 @@ -#include "Engine.hpp" +#include "SynEngine.hpp" int main(int argc, char const *argv[]) { + GameConfiguration config = GameConfiguration(sf::Vector2i(800, 600), "Alo"); + sf::RenderWindow render(sf::VideoMode(800, 600), "Test"); + + if (render.isOpen()) + { + render.clear(); + render.draw(config.GetSprite(0, sf::Vector2f(0, 0))); + render.draw(config.GetSprite(1, sf::Vector2f(50, 0))); + render.draw(config.GetSprite(2, sf::Vector2f(100, 0))); + render.draw(config.GetSprite(3, sf::Vector2f(0, 50))); + render.draw(config.GetSprite(4, sf::Vector2f(50, 50))); + render.draw(config.GetSprite(5, sf::Vector2f(100, 50))); + render.display(); + sf::sleep(sf::milliseconds(3000)); + } + std::cout << "/)(\\"; return 0; }