8#ifndef MALENA_DRAWABLEWRAPPER_H
9#define MALENA_DRAWABLEWRAPPER_H
20 template<
typename T,
typename =
void>
21 struct HasSetPosition : std::false_type {};
23 struct HasSetPosition<T, std::void_t<
24 decltype(std::declval<T>().setPosition(std::declval<sf::Vector2f>()))
25 >> : std::true_type {};
28 template<
typename T,
typename =
void>
29 struct HasGetPosition : std::false_type {};
31 struct HasGetPosition<T, std::void_t<
32 decltype(std::declval<T>().getPosition())
33 >> : std::true_type {};
36 template<
typename T,
typename =
void>
37 struct HasGetGlobalBounds : std::false_type {};
39 struct HasGetGlobalBounds<T, std::void_t<
40 decltype(std::declval<T>().getGlobalBounds())
41 >> : std::true_type {};
69 template<
typename ENTITY>
85 if constexpr (HasSetPosition<ENTITY>::value)
86 ENTITY::setPosition(pos);
98 if constexpr (HasGetPosition<ENTITY>::value)
99 return ENTITY::getPosition();
115 if constexpr (HasGetGlobalBounds<ENTITY>::value)
116 return ENTITY::getGlobalBounds();
Virtual base class for all Malena framework objects.
Adapts any sf::Drawable into a first-class ml::Core object.
void setPosition(const sf::Vector2f &pos) override
Set the world-space position, delegating to ENTITY if supported.
sf::Vector2f getPosition() const override
Return the world-space position, delegating to ENTITY if supported.
sf::FloatRect getGlobalBounds() const override
Return the axis-aligned bounding box, delegating to ENTITY if supported.
Vector2u getSize() const override
sf::RenderWindow & getWindow()
Return the framework's shared sf::RenderWindow.
Vector2< float > Vector2f