From ff7111b0064774b716831dfb8d622297f4c04c33 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Tue, 22 Jul 2025 15:03:37 -0400 Subject: [PATCH] Icons now work way better and don't have the the 'Rayview cuts icons' bug. It actually was a bug in the lel-guecs Sprite class that was using the TextureRect from the source sprite. Now its initialized with the framesize from the .json. This also uses the new guecs::Icon, but I have to fix that as it doesn't scale correctly. Closes #2. --- assets/config.json | 10 ---- assets/icons.json | 12 +++++ assets/icons/healing_potion_small.png | Bin 0 -> 7696 bytes assets/icons/healing_potion_small_ICON.png | Bin 11038 -> 0 bytes assets/icons/torch_crappy_ICON.png | Bin 7724 -> 0 bytes assets/icons/torch_horizontal_floor.png | Bin 0 -> 5689 bytes backend.cpp | 13 +++-- backend.hpp | 5 +- gui/boss_fight_ui.cpp | 6 +-- gui/fsm.cpp | 1 - gui/guecstra.cpp | 6 +-- gui/loot_ui.cpp | 4 +- gui/map_view.cpp | 9 ---- gui/map_view.hpp | 1 - gui/ritual_ui.cpp | 2 +- gui/status_ui.cpp | 4 +- raycaster.cpp | 2 +- tests/animation.cpp | 2 +- tests/textures.cpp | 2 +- textures.cpp | 56 ++++++++++++++------- textures.hpp | 8 ++- tools/fragviewer.cpp | 2 +- 22 files changed, 81 insertions(+), 64 deletions(-) create mode 100644 assets/icons.json create mode 100644 assets/icons/healing_potion_small.png delete mode 100644 assets/icons/healing_potion_small_ICON.png delete mode 100644 assets/icons/torch_crappy_ICON.png create mode 100644 assets/icons/torch_horizontal_floor.png diff --git a/assets/config.json b/assets/config.json index 15fa3dc..b4ff6c5 100644 --- a/assets/config.json +++ b/assets/config.json @@ -80,11 +80,6 @@ "frame_width": 256, "frame_height": 256 }, - "torch_horizontal_floor_ICON": - {"path": "assets/icons/torch_crappy_ICON.png", - "frame_width": 128, - "frame_height": 128 - }, "peasant_girl": {"path": "assets/sprites/peasant_girl_2.png", "frame_width": 256, @@ -100,11 +95,6 @@ "frame_width": 256, "frame_height": 256 }, - "healing_potion_small_ICON": - {"path": "assets/icons/healing_potion_small_ICON.png", - "frame_width": 128, - "frame_height": 128 - }, "well_down": {"path": "assets/sprites/well_down.png", "frame_width": 256, diff --git a/assets/icons.json b/assets/icons.json new file mode 100644 index 0000000..904cd97 --- /dev/null +++ b/assets/icons.json @@ -0,0 +1,12 @@ +{ + "healing_potion_small": + {"path": "assets/icons/healing_potion_small.png", + "frame_width": 96, + "frame_height": 96 + }, + "torch_horizontal_floor": + {"path": "assets/icons/torch_horizontal_floor.png", + "frame_width": 96, + "frame_height": 96 + } +} diff --git a/assets/icons/healing_potion_small.png b/assets/icons/healing_potion_small.png new file mode 100644 index 0000000000000000000000000000000000000000..491579a4fc415fc661504b24f6ddf97acc6b87f8 GIT binary patch literal 7696 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 literal 0 HcmV?d00001 diff --git a/assets/icons/healing_potion_small_ICON.png b/assets/icons/healing_potion_small_ICON.png deleted file mode 100644 index bc790e492cf4e71e81bf90db3195c0cccbf999cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11038 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 diff --git a/assets/icons/torch_crappy_ICON.png b/assets/icons/torch_crappy_ICON.png deleted file mode 100644 index ccc6480901b0075aa16c7fdc7dbdcabf666a9e8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7724 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 diff --git a/assets/icons/torch_horizontal_floor.png b/assets/icons/torch_horizontal_floor.png new file mode 100644 index 0000000000000000000000000000000000000000..2382d7f3e1978386d7d7499bd290c7cbfec6e9f5 GIT binary patch literal 5689 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 X72*>#D#xl`8w2XfT1piP*5UsHV$ZE9 literal 0 HcmV?d00001 diff --git a/backend.cpp b/backend.cpp index 5bb4f25..ef0e8e3 100644 --- a/backend.cpp +++ b/backend.cpp @@ -8,9 +8,14 @@ namespace sfml { using namespace nlohmann; - guecs::SpriteTexture Backend::texture_get(const string& name) { - auto sp = textures::get(name); - return {sp.sprite, sp.texture}; + guecs::SpriteTexture Backend::get_sprite(const string& name) { + auto sp = textures::get_sprite(name); + return {sp.sprite, sp.texture, sp.frame_size}; + } + + guecs::SpriteTexture Backend::get_icon(const string& name) { + auto sp = textures::get_icon(name); + return {sp.sprite, sp.texture, sp.frame_size}; } Backend::Backend() { @@ -27,7 +32,7 @@ namespace sfml { sound::stop(name); } - std::shared_ptr Backend::shader_get(const std::string& name) { + std::shared_ptr Backend::get_shader(const std::string& name) { return shaders::get(name); } diff --git a/backend.hpp b/backend.hpp index fed18f8..fc36f35 100644 --- a/backend.hpp +++ b/backend.hpp @@ -9,10 +9,11 @@ namespace sfml { public: Backend(); - guecs::SpriteTexture texture_get(const string& name); + guecs::SpriteTexture get_sprite(const string& name); + guecs::SpriteTexture get_icon(const string& name); void sound_play(const string& name); void sound_stop(const string& name); - std::shared_ptr shader_get(const std::string& name); + std::shared_ptr get_shader(const std::string& name); bool shader_updated(); guecs::Theme theme(); }; diff --git a/gui/boss_fight_ui.cpp b/gui/boss_fight_ui.cpp index 524f9c4..269286b 100644 --- a/gui/boss_fight_ui.cpp +++ b/gui/boss_fight_ui.cpp @@ -35,7 +35,7 @@ namespace gui { $animation = $world->get($boss_id); $animation.frame_width = $sprite_config.width; - $boss_image = textures::get($sprite_config.name); + $boss_image = textures::get_sprite($sprite_config.name); sf::IntRect frame_rect{{0,0},{$sprite_config.width,$sprite_config.height}}; $boss_image.sprite->setTextureRect(frame_rect); $boss_image.sprite->setScale({$sprite_config.scale, $sprite_config.scale}); @@ -52,13 +52,13 @@ namespace gui { void BossFightUI::configure_background() { auto& boss = $world->get($boss_id); - $boss_background = textures::get(boss.background); + $boss_background = textures::get_sprite(boss.background); $boss_background.sprite->setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); $status.set($status.MAIN, {$status.$parser}); if(boss.stage) { $boss_has_stage = true; - $boss_stage = textures::get(*boss.stage); + $boss_stage = textures::get_sprite(*boss.stage); $boss_stage.sprite->setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); } } diff --git a/gui/fsm.cpp b/gui/fsm.cpp index 24a9fe5..3eb06cd 100644 --- a/gui/fsm.cpp +++ b/gui/fsm.cpp @@ -347,7 +347,6 @@ namespace gui { if(!sound::playing("ambient_1")) sound::play("ambient_1", true); $debug_ui.debug(); shaders::reload(); - $map_ui.save_map($main_ui.$compass_dir); break; case KEY::O: autowalking = true; diff --git a/gui/guecstra.cpp b/gui/guecstra.cpp index 7e7ecb8..e028f31 100644 --- a/gui/guecstra.cpp +++ b/gui/guecstra.cpp @@ -21,11 +21,9 @@ namespace guecs { } void GrabSource::setSprite(guecs::UI& gui, guecs::Entity gui_id) { - dbc::check(gui.has(gui_id), "GrabSource given sprite gui_id that doesn't exist"); + dbc::check(gui.has(gui_id), "GrabSource given sprite gui_id that doesn't exist"); - fmt::println("> Grabsource Set sprite entity {}", world_entity); - - auto& sp = gui.get(gui_id); + auto& sp = gui.get(gui_id); sprite = sp.sprite; } diff --git a/gui/loot_ui.cpp b/gui/loot_ui.cpp index 370a0d1..f5f91e2 100644 --- a/gui/loot_ui.cpp +++ b/gui/loot_ui.cpp @@ -75,7 +75,7 @@ namespace gui { dbc::check($level.world->has(item), "item in inventory UI doesn't exist in world. New level?"); auto& sprite = $level.world->get(item); - $gui.set_init(id, {fmt::format("{}_ICON", sprite.name)}); + $gui.set_init(id, {sprite.name}); guecs::GrabSource grabber{ item, [&, id]() { return remove_slot(id); }}; @@ -84,7 +84,7 @@ namespace gui { } else { // BUG: fix remove so it's safe to call on empty if($gui.has(id)) { - $gui.remove(id); + $gui.remove(id); $gui.remove(id); } diff --git a/gui/map_view.cpp b/gui/map_view.cpp index fcac5e6..e1d2edc 100644 --- a/gui/map_view.cpp +++ b/gui/map_view.cpp @@ -49,15 +49,6 @@ namespace gui { $gui.init(); } - void MapViewUI::save_map(int compass_dir) { - (void)compass_dir; - // confirm we get two different maps - auto out_img = $map_render->getTexture().copyToImage(); - bool worked = out_img.saveToFile("tmp/map_render.png"); - dbc::check(worked, "failed to render map"); - } - - void MapViewUI::render(sf::RenderWindow &window, int compass_dir) { $gui.render(window); System::draw_map($level, $map_tiles, $entity_map); diff --git a/gui/map_view.hpp b/gui/map_view.hpp index b5d9836..3b277c7 100644 --- a/gui/map_view.hpp +++ b/gui/map_view.hpp @@ -24,6 +24,5 @@ namespace gui { void update_level(GameLevel &level); void log(std::wstring msg); void update(); - void save_map(int compass_dir); }; } diff --git a/gui/ritual_ui.cpp b/gui/ritual_ui.cpp index a18d906..a248efc 100644 --- a/gui/ritual_ui.cpp +++ b/gui/ritual_ui.cpp @@ -44,7 +44,7 @@ namespace gui { } void UI::START(Event) { - $ritual_ui = textures::get("ritual_crafting_area"); + $ritual_ui = textures::get_sprite("ritual_crafting_area"); $ritual_ui.sprite->setPosition($gui.get_position()); $ritual_ui.sprite->setTextureRect($ritual_closed_rect); $ritual_anim = animation::load("ritual_blanket"); diff --git a/gui/status_ui.cpp b/gui/status_ui.cpp index 14862f5..011d2f2 100644 --- a/gui/status_ui.cpp +++ b/gui/status_ui.cpp @@ -80,7 +80,7 @@ namespace gui { auto gui_id = $gui.entity(slot); auto& sprite = $level.world->get(world_entity); - $gui.set_init(gui_id, {fmt::format("{}_ICON", sprite.name)}); + $gui.set_init(gui_id, {sprite.name}); guecs::GrabSource grabber{ world_entity, [&, gui_id]() { return remove_slot(gui_id); }}; grabber.setSprite($gui, gui_id); @@ -136,7 +136,7 @@ namespace gui { inventory.remove(world_entity); $gui.remove(slot_id); - $gui.remove(slot_id); + $gui.remove(slot_id); } void StatusUI::swap(guecs::Entity gui_a, guecs::Entity gui_b) { diff --git a/raycaster.cpp b/raycaster.cpp index 44e973c..03eb69b 100644 --- a/raycaster.cpp +++ b/raycaster.cpp @@ -423,7 +423,7 @@ void Raycaster::draw(sf::RenderTarget& target) { } void Raycaster::update_sprite(DinkyECS::Entity ent, components::Sprite& sprite) { - auto sprite_txt = textures::get(sprite.name); + auto sprite_txt = textures::get_sprite(sprite.name); $sprites.insert_or_assign(ent, sprite_txt); } diff --git a/tests/animation.cpp b/tests/animation.cpp index d3fc991..3005f9a 100644 --- a/tests/animation.cpp +++ b/tests/animation.cpp @@ -42,7 +42,7 @@ TEST_CASE("animation utility API", "[animation]") { textures::init(); animation::init(); - auto blanket = textures::get("ritual_crafting_area"); + auto blanket = textures::get_sprite("ritual_crafting_area"); auto anim = animation::load("ritual_blanket"); anim.play(); diff --git a/tests/textures.cpp b/tests/textures.cpp index 00efb5e..99de020 100644 --- a/tests/textures.cpp +++ b/tests/textures.cpp @@ -11,7 +11,7 @@ TEST_CASE("test texture management", "[textures]") { components::init(); textures::init(); - auto spider = textures::get("hairy_spider"); + auto spider = textures::get_sprite("hairy_spider"); REQUIRE(spider.sprite != nullptr); REQUIRE(spider.texture != nullptr); REQUIRE(spider.frame_size.x == TEXTURE_WIDTH); diff --git a/textures.cpp b/textures.cpp index 7d2c497..7aac290 100644 --- a/textures.cpp +++ b/textures.cpp @@ -7,33 +7,43 @@ #include namespace textures { - using std::shared_ptr, std::make_shared; + using std::shared_ptr, std::make_shared, nlohmann::json, std::string; static TextureManager TMGR; static bool initialized = false; - void load_sprites() { - Config assets("assets/config.json"); - - for(auto& [name, settings] : assets["sprites"].items()) { + void load_sprite_textures(SpriteTextureMap &mapping, json &config, bool smooth) { + for(auto& [name, settings] : config.items()) { auto texture = make_shared(settings["path"]); - texture->setSmooth(assets["graphics"]["smooth_textures"]); + texture->setSmooth(smooth); auto sprite = make_shared(*texture); int width = settings["frame_width"]; int height = settings["frame_height"]; dbc::check(width % 2 == 0, - fmt::format("sprite {} has invalid frame size", name)); + fmt::format("sprite {} has invalid frame size {}", name, width)); sf::Vector2i frame_size{width, height}; sprite->setTextureRect({{0,0}, frame_size}); - TMGR.sprite_textures.try_emplace(name, sprite, texture, frame_size); + dbc::check(!mapping.contains(name), + fmt::format("duplicate sprite/icon name {}", (string)name)); + mapping.try_emplace(name, sprite, texture, frame_size); } } + void load_sprites() { + Config sprites("assets/config.json"); + bool smooth = sprites["graphics"]["smooth_textures"]; + + load_sprite_textures(TMGR.sprite_textures, sprites["sprites"], smooth); + + Config icons("assets/icons.json"); + load_sprite_textures(TMGR.icon_textures, icons.json(), smooth); + } + inline void resize_shit(size_t size) { TMGR.surfaces.resize(size); TMGR.ceilings.resize(size); @@ -49,12 +59,12 @@ namespace textures { for(auto &el : tiles.items()) { auto &config = el.value(); - const std::string& texture_fname = config["texture"]; + const string& texture_fname = config["texture"]; size_t surface_i = config["id"]; dbc::check(!TMGR.name_to_id.contains(el.key()), fmt::format("duplicate key in textures {}", - (std::string)el.key())); + (string)el.key())); TMGR.name_to_id.insert_or_assign(el.key(), surface_i); @@ -68,9 +78,9 @@ namespace textures { // NOTE: ceilings defaults to 0 which is floor texture so only need to update if(config.contains("ceiling")) { - const std::string& name = config["ceiling"]; + const string& name = config["ceiling"]; - dbc::check(tiles.contains(name), fmt::format("invalid ceiling name {} in tile config {}", name, (std::string)el.key())); + dbc::check(tiles.contains(name), fmt::format("invalid ceiling name {} in tile config {}", name, (string)el.key())); auto& ceiling = tiles[name]; TMGR.ceilings[surface_i] = ceiling["id"]; @@ -80,7 +90,7 @@ namespace textures { void load_map_tiles() { Config config("./assets/map_tiles.json"); - nlohmann::json& tiles = config.json(); + json& tiles = config.json(); for(auto tile : tiles) { sf::Vector2i coords{tile["x"], tile["y"]}; @@ -107,12 +117,12 @@ namespace textures { } } - SpriteTexture get(const std::string& name) { + SpriteTexture& get(const string& name, SpriteTextureMap& mapping) { dbc::check(initialized, "you forgot to call textures::init()"); - dbc::check(TMGR.sprite_textures.contains(name), - fmt::format("!!!!! texture pack does not contain {} sprite", name)); + dbc::check(mapping.contains(name), + fmt::format("!!!!! textures do not contain {} sprite", name)); - auto result = TMGR.sprite_textures.at(name); + auto& result = mapping.at(name); dbc::check(result.sprite != nullptr, fmt::format("bad sprite from textures::get named {}", name)); @@ -122,7 +132,15 @@ namespace textures { return result; } - sf::Image load_image(const std::string& filename) { + SpriteTexture get_sprite(const string& name) { + return get(name, TMGR.sprite_textures); + } + + SpriteTexture get_icon(const string& name) { + return get(name, TMGR.icon_textures); + } + + sf::Image load_image(const string& filename) { sf::Image texture; bool good = texture.loadFromFile(filename); dbc::check(good, fmt::format("failed to load {}", filename)); @@ -150,7 +168,7 @@ namespace textures { return (const uint32_t *)TMGR.surfaces[ceiling_num].getPixelsPtr(); } - size_t get_id(const std::string& name) { + size_t get_id(const string& name) { dbc::check(TMGR.name_to_id.contains(name), fmt::format("there is no texture named {} in tiles.json", name)); return TMGR.name_to_id.at(name); diff --git a/textures.hpp b/textures.hpp index 2d24178..cb7d998 100644 --- a/textures.hpp +++ b/textures.hpp @@ -15,12 +15,15 @@ namespace textures { sf::Vector2i frame_size; }; + using SpriteTextureMap = std::unordered_map; + struct TextureManager { std::vector surfaces; std::vector ceilings; std::vector map_tile_set; std::vector ambient_light; - std::unordered_map sprite_textures; + SpriteTextureMap sprite_textures; + SpriteTextureMap icon_textures; std::unordered_map name_to_id; std::unordered_map map_sprites; sf::Texture map_sprite_sheet{"./assets/map_tiles.png"}; @@ -28,7 +31,8 @@ namespace textures { void init(); - SpriteTexture get(const std::string& name); + SpriteTexture get_sprite(const std::string& name); + SpriteTexture get_icon(const std::string& name); sf::Image load_image(const std::string& filename); diff --git a/tools/fragviewer.cpp b/tools/fragviewer.cpp index 40ee33c..fae1ea4 100644 --- a/tools/fragviewer.cpp +++ b/tools/fragviewer.cpp @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) { window.setVerticalSyncEnabled(true); if(load_sprite) { - sprite_texture = textures::get(sprite_name); + sprite_texture = textures::get_sprite(sprite_name); sprite_texture.sprite->setPosition({0,0}); auto bounds = sprite_texture.sprite->getLocalBounds(); sf::Vector2f scale{u_resolution.x / bounds.size.x,