diff --git a/demos/clicker_game.cpp b/demos/clicker_game.cpp index d932de6..6e271ec 100644 --- a/demos/clicker_game.cpp +++ b/demos/clicker_game.cpp @@ -93,7 +93,7 @@ struct ClickerUI { if(name != "clicker") { $gui.set(id, {}); $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); } }); @@ -101,7 +101,7 @@ struct ClickerUI { } $clicker = $gui.entity("clicker"); - $gui.set($clicker, {"clicker_the_dog", 0, true}); + $gui.set($clicker, {"clicker_the_dog"}); $gui.set($clicker, {"clicker_bark"}); $gui.set($clicker, { [&](auto, auto) { handle_button(Event::CLICKER); } diff --git a/include/guecs/sfml/components.hpp b/include/guecs/sfml/components.hpp index 49ade35..c7d989f 100644 --- a/include/guecs/sfml/components.hpp +++ b/include/guecs/sfml/components.hpp @@ -40,7 +40,8 @@ namespace guecs { struct Sprite { string name; int padding = THEME.PADDING; - bool stretch = false; + bool stretch = true; + bool is_icon = false; std::shared_ptr sprite = nullptr; void init(lel::Cell &cell); @@ -48,7 +49,19 @@ namespace guecs { void render(sf::RenderWindow& window, sf::Shader *shader_ptr); }; - struct Icon : public Sprite { }; + struct Icon : public Sprite { + template + Icon(Args... args) : Sprite(args...) + { + stretch = false; + is_icon = true; + } + + Icon() { + // BUG: why do I have to do this again? + stretch = false; + }; + }; struct Rectangle { int padding = THEME.PADDING; diff --git a/src/guecs/sfml/components.cpp b/src/guecs/sfml/components.cpp index 329a069..db46ad6 100644 --- a/src/guecs/sfml/components.cpp +++ b/src/guecs/sfml/components.cpp @@ -43,8 +43,16 @@ namespace guecs { } } + inline SpriteTexture load_texture(const string& name, bool is_icon) { + if(is_icon) { + return BACKEND->get_icon(name); + } else { + return BACKEND->get_sprite(name); + } + } + void Sprite::init(lel::Cell &cell) { - auto sprite_texture = BACKEND->get_sprite(name); + auto sprite_texture = load_texture(name, is_icon); auto bounds = sprite_texture.frame_size; sf::IntRect rect{{0,0}, bounds};