diff --git a/lib/Ray/sources/Drawables/Image.cpp b/lib/Ray/sources/Drawables/Image.cpp index b9e3bd12..9f80bdc4 100644 --- a/lib/Ray/sources/Drawables/Image.cpp +++ b/lib/Ray/sources/Drawables/Image.cpp @@ -14,7 +14,8 @@ namespace RAY { Image::Image(const std::string &filename): Rectangle(Vector2(0, 0), Vector2(0, 0), WHITE), - _image(_imagesCache.fetch(filename)) + _image(_imagesCache.fetch(filename)), + _ressourcePath(filename) { this->_dimensions = Vector2(this->_image->width, this->_image->height); } @@ -30,6 +31,15 @@ namespace RAY { return *this->_image; } + Image &Image::use(const std::string &filename) + { + if (this->_ressourcePath == filename) + return *this; + this->_image = this->_imagesCache.fetch(filename); + this->_ressourcePath = filename; + return *this; + } + Image::operator ::Image *() { return this->_image.get(); diff --git a/lib/Ray/sources/Drawables/Image.hpp b/lib/Ray/sources/Drawables/Image.hpp index 104c968c..1f01e9fa 100644 --- a/lib/Ray/sources/Drawables/Image.hpp +++ b/lib/Ray/sources/Drawables/Image.hpp @@ -48,12 +48,17 @@ namespace RAY //! @brief Resize image; void resize(const RAY::Vector2 &dimensions); + //! @brief Load image from file, lets one use one entity for multiple files + Image &use(const std::string &filename); + private: //! @brief Image, really, that's just it... std::shared_ptr<::Image> _image; static Cache<::Image> _imagesCache; + std::string _ressourcePath; + INTERNAL: //! @brief get image diff --git a/sources/Runner/Runner.cpp b/sources/Runner/Runner.cpp index c254eafc..205e6d58 100644 --- a/sources/Runner/Runner.cpp +++ b/sources/Runner/Runner.cpp @@ -109,27 +109,57 @@ namespace BBM scene->addEntity("play button") .addComponent(1920 / 2.5, 1080 - 540, 0) .addComponent("assets/buttons/button_new_game.png") - .addComponent( + .addComponent([](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_new_game.png"); + }, [](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_new_game_hovered.png"); + }, ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback); + ButtonComponent::emptyButtonCallback) + .addComponent() + .addComponent(); scene->addEntity("settings button") .addComponent(1920 / 2.5, 1080 - 360, 0) .addComponent("assets/buttons/button_settings.png") - .addComponent( + .addComponent([](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_settings.png"); + }, [](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_settings_hovered.png"); + }, ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback); + ButtonComponent::emptyButtonCallback) + .addComponent() + .addComponent(); scene->addEntity("exit button") .addComponent(1920 / 2.5, 1080 - 180, 0) .addComponent("assets/buttons/button_exit.png") - .addComponent( + .addComponent([](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_exit.png"); + }, [](WAL::Entity &entity) + { + RAY::Image *image = dynamic_cast(entity.getComponent().drawable.get()); + + image->use("assets/buttons/button_exit_hovered.png"); + }, ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback, - ButtonComponent::emptyButtonCallback); + ButtonComponent::emptyButtonCallback) + .addComponent() + .addComponent(); //needed material //play button //play button assets