diff --git a/src/lib-defines/include/Configs/Strings.hpp b/src/lib-defines/include/Configs/Strings.hpp index 006d8dbb..b0d7279d 100644 --- a/src/lib-defines/include/Configs/Strings.hpp +++ b/src/lib-defines/include/Configs/Strings.hpp @@ -113,10 +113,13 @@ namespace Strings namespace Level { - RAWSTRING THEME_COUNTRY = "Countryside"; - RAWSTRING THEME_DAWNTIME = "Dawntime"; - RAWSTRING THEME_SPACE = "Nightsky"; - RAWSTRING THEME_ALPHA = "AlphaVersion"; + RAWSTRING SKYBOX_COUNTRY = "Countryside"; + RAWSTRING SKYBOX_DAWNTIME = "Dawntime"; + RAWSTRING SKYBOX_SPACE = "Nightsky"; + RAWSTRING TEXTURES_ALPHA = "AlphaVersion"; + RAWSTRING TEXTURES_SPACE = "Space station"; + RAWSTRING TEXTURES_COUNTRY = "Countryside"; + RAWSTRING TEXTURES_NEON = "Neon"; } // namespace Level } // namespace Strings diff --git a/src/lib-defines/include/LevelTheme.hpp b/src/lib-defines/include/LevelTheme.hpp index 3640cb1a..c49c4e18 100644 --- a/src/lib-defines/include/LevelTheme.hpp +++ b/src/lib-defines/include/LevelTheme.hpp @@ -23,7 +23,10 @@ class SkyboxThemeUtils enum class [[nodiscard]] TexturePack { - AlphaVersion + AlphaVersion, + SpaceStation, + CountrySide, + Neon }; class TexturePackUtils diff --git a/src/lib-defines/src/LevelTheme.cpp b/src/lib-defines/src/LevelTheme.cpp index d82e174e..8a41458b 100644 --- a/src/lib-defines/src/LevelTheme.cpp +++ b/src/lib-defines/src/LevelTheme.cpp @@ -4,9 +4,9 @@ SkyboxTheme SkyboxThemeUtils::fromString(const std::string& str) { - if (str == Strings::Level::THEME_DAWNTIME) + if (str == Strings::Level::SKYBOX_DAWNTIME) return SkyboxTheme::Dawntime; - else if (str == Strings::Level::THEME_SPACE) + else if (str == Strings::Level::SKYBOX_SPACE) return SkyboxTheme::Nightsky; // Default to countryside if there is anything wrong @@ -19,11 +19,11 @@ std::string SkyboxThemeUtils::toString(SkyboxTheme skyboxTheme) { using enum SkyboxTheme; case Countryside: - return Strings::Level::THEME_COUNTRY; + return Strings::Level::SKYBOX_COUNTRY; case Dawntime: - return Strings::Level::THEME_DAWNTIME; + return Strings::Level::SKYBOX_DAWNTIME; case Nightsky: - return Strings::Level::THEME_SPACE; + return Strings::Level::SKYBOX_SPACE; } } @@ -34,8 +34,15 @@ std::vector SkyboxThemeUtils::getAllNames() toString(SkyboxTheme::Nightsky) }; } -TexturePack TexturePackUtils::fromString(const std::string&) +TexturePack TexturePackUtils::fromString(const std::string& str) { + if (str == Strings::Level::TEXTURES_SPACE) + return TexturePack::SpaceStation; + else if (str == Strings::Level::TEXTURES_COUNTRY) + return TexturePack::CountrySide; + else if (str == Strings::Level::TEXTURES_NEON) + return TexturePack::Neon; + // Default to alpha if there is anything wrong return TexturePack::AlphaVersion; } @@ -46,11 +53,20 @@ std::string TexturePackUtils::toString(TexturePack levelTheme) { using enum TexturePack; case AlphaVersion: - return Strings::Level::THEME_ALPHA; + return Strings::Level::TEXTURES_ALPHA; + case SpaceStation: + return Strings::Level::TEXTURES_SPACE; + case CountrySide: + return Strings::Level::TEXTURES_COUNTRY; + case Neon: + return Strings::Level::TEXTURES_NEON; } } std::vector TexturePackUtils::getAllNames() { - return std::vector { toString(TexturePack::AlphaVersion) }; + return std::vector { toString(TexturePack::AlphaVersion), + toString(TexturePack::SpaceStation), + toString(TexturePack::CountrySide), + toString(TexturePack::Neon) }; } diff --git a/src/lib-game/src/engine/RenderingEngine.cpp b/src/lib-game/src/engine/RenderingEngine.cpp index 4683feba..32b1802c 100644 --- a/src/lib-game/src/engine/RenderingEngine.cpp +++ b/src/lib-game/src/engine/RenderingEngine.cpp @@ -7,6 +7,8 @@ #include #include +import TexturePath; + [[nodiscard]] static std::pair getRotatedSpriteClipId( const sf::Vector2f& cameraDir, const sf::Vector2f& thingDir, @@ -40,7 +42,11 @@ RenderingEngine::RenderingEngine( Scene& scene) : settings(settings) , scene(scene) - , tileset { .texture = resmgr.get("tileset.png").value().get(), + , tileset { .texture = resmgr + .get(TexturePath::getTilesetName( + scene.level.texturePack)) + .value() + .get(), .clipping = resmgr.get("tileset.png.clip").value().get() } , spritesheet { .texture = diff --git a/src/lib-resources/CMakeLists.txt b/src/lib-resources/CMakeLists.txt index 3b14bdb3..78ce1bb1 100644 --- a/src/lib-resources/CMakeLists.txt +++ b/src/lib-resources/CMakeLists.txt @@ -11,4 +11,6 @@ glob_modules ( SRCS ) add_library ( ${PROJECT_NAME} ${SRCS} ) +target_link_libraries ( ${PROJECT_NAME} lib-defines ) + autoset_target_compile_options ( ${PROJECT_NAME} FALSE ) diff --git a/src/lib-resources/src/TexturePath.ixx b/src/lib-resources/src/TexturePath.ixx new file mode 100644 index 00000000..b37d5100 --- /dev/null +++ b/src/lib-resources/src/TexturePath.ixx @@ -0,0 +1,34 @@ +module; + +#include +#include +#include + +export module TexturePath; + +export class TexturePath final +{ +public: + static [[nodiscard]] std::string getTilesetName(TexturePack packId) + { + switch (packId) + { + using enum TexturePack; + + case AlphaVersion: + return "tileset.png"; + + case SpaceStation: + return "space_station_tileset.png"; + + case CountrySide: + return "countryside_tileset.png"; + + case Neon: + return "neon_tileset.png"; + } + + throw std::runtime_error( + "Programmer error: TexturePack id without assigned texture"); + } +}; \ No newline at end of file