External Configuration File
Added a Configuration file to be able to change values
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,6 @@
 | 
				
			|||||||
 | 
					# Game Configurations
 | 
				
			||||||
 | 
					Configurations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Prerequisites
 | 
					# Prerequisites
 | 
				
			||||||
*.d
 | 
					*.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@@ -44,6 +44,10 @@
 | 
				
			|||||||
        "sstream": "cpp",
 | 
					        "sstream": "cpp",
 | 
				
			||||||
        "stdexcept": "cpp",
 | 
					        "stdexcept": "cpp",
 | 
				
			||||||
        "streambuf": "cpp",
 | 
					        "streambuf": "cpp",
 | 
				
			||||||
        "typeinfo": "cpp"
 | 
					        "typeinfo": "cpp",
 | 
				
			||||||
 | 
					        "filesystem": "cpp",
 | 
				
			||||||
 | 
					        "chrono": "cpp",
 | 
				
			||||||
 | 
					        "codecvt": "cpp",
 | 
				
			||||||
 | 
					        "ratio": "cpp"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -14,7 +14,11 @@ class GameConfiguration
 | 
				
			|||||||
        float audioVolume;
 | 
					        float audioVolume;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void LoadDefaultValues();
 | 
					        void LoadDefaultValues();
 | 
				
			||||||
 | 
					        void LoadValuesFromFile(std::string);
 | 
				
			||||||
 | 
					        void WriteValuesToFile(std::string);
 | 
				
			||||||
 | 
					        std::istringstream GetNextNonCommentLine(std::istream &);
 | 
				
			||||||
        bool LoadSpriteSheet(std::string);
 | 
					        bool LoadSpriteSheet(std::string);
 | 
				
			||||||
 | 
					        bool IsFileExists(std::string);
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        GameConfiguration();
 | 
					        GameConfiguration();
 | 
				
			||||||
        GameConfiguration(sf::Vector2i, std::string = std::string());
 | 
					        GameConfiguration(sf::Vector2i, std::string = std::string());
 | 
				
			||||||
@@ -32,15 +36,75 @@ GameConfiguration::GameConfiguration()
 | 
				
			|||||||
GameConfiguration::GameConfiguration(sf::Vector2i windowDimensions, std::string configurationPath)
 | 
					GameConfiguration::GameConfiguration(sf::Vector2i windowDimensions, std::string configurationPath)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(!configurationPath.empty())
 | 
					    if(!configurationPath.empty())
 | 
				
			||||||
        std::cout << "External Configurations Are Not Implemented Yet!\n";
 | 
					        if(IsFileExists(configurationPath))
 | 
				
			||||||
    // else
 | 
					            LoadValuesFromFile(configurationPath);
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            LoadDefaultValues();
 | 
				
			||||||
 | 
					            WriteValuesToFile(configurationPath);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
        LoadDefaultValues();
 | 
					        LoadDefaultValues();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    spriteSheetRect = sf::IntRect(sf::Vector2i(0, 0), spriteSheetCellSize);
 | 
				
			||||||
    spriteSizeMultiplier = 
 | 
					    spriteSizeMultiplier = 
 | 
				
			||||||
        (float)windowDimensions.x / (float)referenceWindowDimensions.x * canvasSizeMultiplierRatio.x +
 | 
					        (float)windowDimensions.x / (float)referenceWindowDimensions.x * canvasSizeMultiplierRatio.x +
 | 
				
			||||||
        (float)windowDimensions.y / (float)referenceWindowDimensions.y * canvasSizeMultiplierRatio.y;
 | 
					        (float)windowDimensions.y / (float)referenceWindowDimensions.y * canvasSizeMultiplierRatio.y;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool GameConfiguration::IsFileExists(std::string path)
 | 
				
			||||||
 | 
					{   
 | 
				
			||||||
 | 
					    std::fstream file(path);
 | 
				
			||||||
 | 
					    return file.good();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GameConfiguration::LoadValuesFromFile(std::string path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::ifstream confFile(path);
 | 
				
			||||||
 | 
					    std::istream &stream = confFile;
 | 
				
			||||||
 | 
					    char coma; // this is stupid there has to be a better way
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GetNextNonCommentLine(stream) >> referenceWindowDimensions.x >> coma >> referenceWindowDimensions.y;
 | 
				
			||||||
 | 
					    GetNextNonCommentLine(stream) >> canvasSizeMultiplierRatio.x >> coma >> canvasSizeMultiplierRatio.y;
 | 
				
			||||||
 | 
					    LoadSpriteSheet(GetNextNonCommentLine(stream).str());
 | 
				
			||||||
 | 
					    GetNextNonCommentLine(stream) >> spriteSheetCellSize.x >> coma >> spriteSheetCellSize.y;
 | 
				
			||||||
 | 
					    GetNextNonCommentLine(stream) >> audioVolume;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    confFile.close();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::istringstream GameConfiguration::GetNextNonCommentLine(std::istream &stream)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::string line;
 | 
				
			||||||
 | 
					    while (std::getline(stream, line) && !stream.eof())
 | 
				
			||||||
 | 
					        switch (line[0])
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            case '#': case '\n': case ' ': case NULL: break;
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                return std::istringstream(line);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return std::istringstream();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GameConfiguration::WriteValuesToFile(std::string path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::ofstream confFile(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    confFile << "# Reference Window Dimensions (x, y)\n";
 | 
				
			||||||
 | 
					    confFile << referenceWindowDimensions.x << ", " << referenceWindowDimensions.y << "\n\n";
 | 
				
			||||||
 | 
					    confFile << "# Canvas Size Multiplier Ratio (x, y)\n";
 | 
				
			||||||
 | 
					    confFile << canvasSizeMultiplierRatio.x << ", " << canvasSizeMultiplierRatio.y << "\n\n";
 | 
				
			||||||
 | 
					    confFile << "# Sprite Sheet Path\n";
 | 
				
			||||||
 | 
					    confFile << spriteSheetPath << "\n\n";
 | 
				
			||||||
 | 
					    confFile << "# Sprite Sheet Cell Size (x, y)\n";
 | 
				
			||||||
 | 
					    confFile << spriteSheetCellSize.x << ", " << spriteSheetCellSize.y << "\n\n";
 | 
				
			||||||
 | 
					    confFile << "# Audio Volume\n";
 | 
				
			||||||
 | 
					    confFile << audioVolume << "\n";
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    confFile.close();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GameConfiguration::LoadDefaultValues()
 | 
					void GameConfiguration::LoadDefaultValues()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // !! Placeholder values! Change after real sprites are added! !!
 | 
					    // !! Placeholder values! Change after real sprites are added! !!
 | 
				
			||||||
@@ -51,7 +115,6 @@ void GameConfiguration::LoadDefaultValues()
 | 
				
			|||||||
    LoadSpriteSheet("Data\\SpriteSheet.png");
 | 
					    LoadSpriteSheet("Data\\SpriteSheet.png");
 | 
				
			||||||
    // !! Placeholder values! Change after real sprites are added! !!
 | 
					    // !! Placeholder values! Change after real sprites are added! !!
 | 
				
			||||||
    spriteSheetCellSize = sf::Vector2i(50, 50);
 | 
					    spriteSheetCellSize = sf::Vector2i(50, 50);
 | 
				
			||||||
    spriteSheetRect = sf::IntRect(sf::Vector2i(0, 0), spriteSheetCellSize);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    audioVolume = 1.0;
 | 
					    audioVolume = 1.0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -76,7 +139,6 @@ sf::Sprite GameConfiguration::GetSprite(unsigned int index, sf::Vector2f positio
 | 
				
			|||||||
    sprite.setPosition(position * spriteSizeMultiplier);
 | 
					    sprite.setPosition(position * spriteSizeMultiplier);
 | 
				
			||||||
    sprite.setRotation(rotation);
 | 
					    sprite.setRotation(rotation);
 | 
				
			||||||
    sprite.setScale(spriteSizeMultiplier, spriteSizeMultiplier);
 | 
					    sprite.setScale(spriteSizeMultiplier, spriteSizeMultiplier);
 | 
				
			||||||
    std::cout << spriteSizeMultiplier << "\n";
 | 
					 | 
				
			||||||
    return sprite;
 | 
					    return sprite;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
#ifndef SynEngine
 | 
					#ifndef SynEngine
 | 
				
			||||||
    #define SynEngine
 | 
					    #define SynEngine
 | 
				
			||||||
    #include <iostream>
 | 
					    #include <iostream>
 | 
				
			||||||
 | 
					    #include <sstream>
 | 
				
			||||||
 | 
					    #include <fstream>
 | 
				
			||||||
    #include <SFML/Graphics.hpp>
 | 
					    #include <SFML/Graphics.hpp>
 | 
				
			||||||
    #include "GameWindow.hpp"
 | 
					 | 
				
			||||||
    #include "GameConfiguration.hpp"
 | 
					    #include "GameConfiguration.hpp"
 | 
				
			||||||
 | 
					    #include "GameWindow.hpp"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.cpp
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int main(int argc, char const *argv[])
 | 
					int main(int argc, char const *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    GameConfiguration config = GameConfiguration(sf::Vector2i(800, 600), "Alo");
 | 
					    GameConfiguration config = GameConfiguration(sf::Vector2i(800, 600), "Configurations");
 | 
				
			||||||
    sf::RenderWindow render(sf::VideoMode(800, 600), "Test");
 | 
					    sf::RenderWindow render(sf::VideoMode(800, 600), "Test");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (render.isOpen())
 | 
					    if (render.isOpen())
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user