diff --git a/CMakeLists.txt b/CMakeLists.txt index 0211bf3e..b553c505 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,7 +97,7 @@ set(SFML_ENABLE_PCH true) CPMAddPackage( NAME SFML GITHUB_REPOSITORY vittorioromeo/SFML - GIT_TAG 5415b77a2fc6fb109a0cc4a7b5fb93ae5a69b720 + GIT_TAG 1774e83b5fbd068151aabd7a4fa2b0bd4af4e0bd ) set_target_properties(sfml-system PROPERTIES UNITY_BUILD OFF) @@ -187,7 +187,7 @@ if(NOT SSVOH_ANDROID) CPMAddPackage( NAME imgui-sfml GITHUB_REPOSITORY SFML/imgui-sfml - GIT_TAG 7758bfd06326af08dc919198c13f9f0e64e70b1a + GIT_TAG 4727cf135a0e412d1f5b2e7fa402283dce0c91da ) set_target_properties(ImGui-SFML PROPERTIES UNITY_BUILD ON) diff --git a/include/SSVOpenHexagon/Global/Assets.hpp b/include/SSVOpenHexagon/Global/Assets.hpp index 601170e0..69d30c0b 100644 --- a/include/SSVOpenHexagon/Global/Assets.hpp +++ b/include/SSVOpenHexagon/Global/Assets.hpp @@ -58,7 +58,6 @@ class HGAssets [[nodiscard]] sf::Texture& getTextureOrNullTexture(const std::string& mId); [[nodiscard]] sf::Font& getFont(const std::string& mId); - [[nodiscard]] sf::Font& getFontOrNullFont(const std::string& mId); [[nodiscard]] bool isValidLevelId( const std::string& mLevelId) const noexcept; diff --git a/src/SSVOpenHexagon/Core/HexagonGame.cpp b/src/SSVOpenHexagon/Core/HexagonGame.cpp index 953fd41e..78e3b31d 100644 --- a/src/SSVOpenHexagon/Core/HexagonGame.cpp +++ b/src/SSVOpenHexagon/Core/HexagonGame.cpp @@ -280,8 +280,8 @@ HexagonGame::HexagonGame(Steam::steam_manager* mSteamManager, : steamManager(mSteamManager), discordManager(mDiscordManager), assets(mAssets), - font{assets.getFontOrNullFont("OpenSquare-Regular.ttf")}, - fontBold{assets.getFontOrNullFont("OpenSquare-Bold.ttf")}, + font{assets.getFont("OpenSquare-Regular.ttf")}, + fontBold{assets.getFont("OpenSquare-Bold.ttf")}, audio(mAudio), window(mGameWindow), hexagonClient{mHexagonClient}, diff --git a/src/SSVOpenHexagon/Core/main.cpp b/src/SSVOpenHexagon/Core/main.cpp index 81acc922..d65d8f1a 100644 --- a/src/SSVOpenHexagon/Core/main.cpp +++ b/src/SSVOpenHexagon/Core/main.cpp @@ -312,15 +312,18 @@ getFirstCompressedReplayFilenameFromArgs(const std::vector& args) { const auto resetIcon = [&window] { - sf::Image icon; - if(!icon.loadFromFile("Assets/icon.png")) + const std::optional icon = + sf::Image::loadFromFile("Assets/icon.png"); + + if(!icon.has_value()) { ssvu::lo("::main") << "Failed to load icon image\n"; return; } window->getRenderWindow().setIcon( - {icon.getSize().x, icon.getSize().y}, icon.getPixelsPtr()); + {icon->getSize().x, icon->getSize().y}, + icon->getPixelsPtr()); }; window->onRecreation += resetIcon; diff --git a/src/SSVOpenHexagon/Global/AssetStorage.cpp b/src/SSVOpenHexagon/Global/AssetStorage.cpp index ce126252..e399da6c 100644 --- a/src/SSVOpenHexagon/Global/AssetStorage.cpp +++ b/src/SSVOpenHexagon/Global/AssetStorage.cpp @@ -6,6 +6,7 @@ #include "SSVOpenHexagon/Global/Assert.hpp" +#include "SSVOpenHexagon/Global/Macros.hpp" #include "SSVOpenHexagon/Utils/Concat.hpp" #include "SSVOpenHexagon/Utils/UniquePtr.hpp" @@ -61,13 +62,30 @@ class AssetStorage::AssetStorageImpl [[nodiscard]] bool loadFont(const std::string& id, const std::string& path) { - return tryEmplaceAndThenLoadFromFile(_fonts, id, path); + std::optional font = sf::Font::loadFromFile(path); + + if(!font.has_value()) + { + return false; + } + + auto [it, inserted] = _fonts.emplace(id, *SSVOH_MOVE(font)); + return inserted; } [[nodiscard]] bool loadSoundBuffer( const std::string& id, const std::string& path) { - return tryEmplaceAndThenLoadFromFile(_soundBuffers, id, path); + std::optional soundBuffer = sf::SoundBuffer::loadFromFile(path); + + if(!soundBuffer.has_value()) + { + return false; + } + + auto [it, inserted] = + _soundBuffers.emplace(id, *SSVOH_MOVE(soundBuffer)); + return inserted; } [[nodiscard]] sf::Texture* getTexture(const std::string& id) noexcept diff --git a/src/SSVOpenHexagon/Global/Assets.cpp b/src/SSVOpenHexagon/Global/Assets.cpp index cb002b37..2b794e57 100644 --- a/src/SSVOpenHexagon/Global/Assets.cpp +++ b/src/SSVOpenHexagon/Global/Assets.cpp @@ -40,6 +40,8 @@ #include #include +#include +#include namespace hg { @@ -131,7 +133,6 @@ class HGAssets::HGAssetsImpl [[nodiscard]] sf::Texture& getTextureOrNullTexture(const std::string& mId); [[nodiscard]] sf::Font& getFont(const std::string& mId); - [[nodiscard]] sf::Font& getFontOrNullFont(const std::string& mId); [[nodiscard]] bool isValidLevelId( const std::string& mLevelId) const noexcept; @@ -576,19 +577,15 @@ HGAssets::HGAssetsImpl::~HGAssetsImpl() [[nodiscard]] sf::Font& HGAssets::HGAssetsImpl::getFont(const std::string& mId) { - sf::Font* ptr = assetStorage->getFont(mId); - SSVOH_ASSERT(ptr); - - return *ptr; -} + if(sf::Font* ptr = assetStorage->getFont(mId)) + { + return *ptr; + } -[[nodiscard]] sf::Font& HGAssets::HGAssetsImpl::getFontOrNullFont( - const std::string& mId) -{ - static sf::Font nullFont; - sf::Font* ptr = assetStorage->getFont(mId); + std::cerr << "Fatal error: missing sound file '" << mId << '\'' + << std::endl; - return ptr ? *ptr : nullFont; + std::terminate(); } [[nodiscard]] bool HGAssets::HGAssetsImpl::isValidLevelId( @@ -884,9 +881,10 @@ void HGAssets::HGAssetsImpl::loadPackAssets_loadShaders( { for(const auto& p : scanSingleByExt(mPath + "Shaders/", extension)) { - auto shader = Utils::makeUnique(); + std::optional shader = + sf::Shader::loadFromFile(p.getStr(), shaderType); - if(!shader->loadFromFile(p.getStr(), shaderType)) + if(!shader.has_value()) { ssvu::lo("hg::loadPackAssets_loadShaders") << "Failed to load shader '" << p << "'\n"; @@ -894,11 +892,14 @@ void HGAssets::HGAssetsImpl::loadPackAssets_loadShaders( continue; } - shadersById.push_back(shader.get()); + auto shaderUptr = + Utils::makeUnique(*SSVOH_MOVE(shader)); + + shadersById.push_back(shaderUptr.get()); SSVOH_ASSERT(shadersById.size() > 0); const std::size_t shaderId = shadersById.size() - 1; - LoadedShader ls{.shader{SSVOH_MOVE(shader)}, + LoadedShader ls{.shader{SSVOH_MOVE(shaderUptr)}, .path{p}, .shaderType{shaderType}, .id{shaderId}}; @@ -1632,11 +1633,6 @@ sf::Font& HGAssets::getFont(const std::string& mId) return _impl->getFont(mId); } -sf::Font& HGAssets::getFontOrNullFont(const std::string& mId) -{ - return _impl->getFontOrNullFont(mId); -} - bool HGAssets::isValidLevelId(const std::string& mLevelId) const noexcept { return _impl->isValidLevelId(mLevelId);