diff --git a/demos/clicker_game.cpp b/demos/clicker_game.cpp index 17ffbb1..c76080a 100644 --- a/demos/clicker_game.cpp +++ b/demos/clicker_game.cpp @@ -92,7 +92,7 @@ struct ClickerUI { auto id = $gui.entity(name); if(name != "clicker") { $gui.set(id, {}); - $gui.set(id, { "clicker_treat_bone" }); + $gui.set(id, { "clicker_treat_bone" }); $gui.set(id, { [&](auto, auto) { handle_button(Event::A_BUTTON); } }); diff --git a/include/guecs/sfml/components.hpp b/include/guecs/sfml/components.hpp index dc82033..74d12bc 100644 --- a/include/guecs/sfml/components.hpp +++ b/include/guecs/sfml/components.hpp @@ -36,6 +36,20 @@ namespace guecs { void render(sf::RenderWindow& window, sf::Shader *shader_ptr); }; + struct Icon : public Sprite { + template + Icon(Args... args) : Sprite(args...) + { + stretch = false; + is_icon = true; + } + + Icon() { + stretch = false; + is_icon = true; + }; + }; + struct Rectangle { int padding = THEME.PADDING; sf::Color color = THEME.FILL_COLOR; diff --git a/include/guecs/ui.hpp b/include/guecs/ui.hpp index d66b063..1b309b5 100644 --- a/include/guecs/ui.hpp +++ b/include/guecs/ui.hpp @@ -218,6 +218,7 @@ namespace guecs { sf::Shader* find_shader(Entity ent, bool is_shape); void show_sprite(const string& region, const string& sprite_name); + void show_icon(const string& region, const string& sprite_name); void show_text(const string& region, const wstring& content); void show_label(const string& region, const wstring& content); }; diff --git a/src/guecs/ui.cpp b/src/guecs/ui.cpp index 5e8d498..396a277 100644 --- a/src/guecs/ui.cpp +++ b/src/guecs/ui.cpp @@ -89,6 +89,10 @@ namespace guecs { query([&](auto, auto &cell, auto &sprite) { sprite.init(cell); }); + + query([&](auto, auto &cell, auto &icon) { + icon.init(cell); + }); } void UI::debug_layout(sf::RenderWindow& window) { @@ -134,6 +138,11 @@ namespace guecs { sprite.render(window, shader_ptr); }); + query([&](auto ent, auto& icon) { + auto shader_ptr = find_shader(ent, false); + icon.render(window, shader_ptr); + }); + query([&](auto ent, auto& text) { auto shader_ptr = find_shader(ent, false); text.render(window, shader_ptr); @@ -188,6 +197,16 @@ namespace guecs { } } + void UI::show_icon(const string& region, const string& sprite_name) { + auto ent = entity(region); + + if(auto sprite = get_if(ent)) { + sprite->update(sprite_name); + } else { + set_init(ent, {sprite_name}); + } + } + void UI::show_text(const string& region, const wstring& content) { auto ent = entity(region);