5#ifndef DRAWABLEWRAPPER_H
6#define DRAWABLEWRAPPER_H
15 template<
typename T,
typename =
void>
16 struct HasSetPosition : std::false_type {};
18 struct HasSetPosition<T, std::void_t<
19 decltype(std::declval<T>().setPosition(std::declval<sf::Vector2f>()))
20 >> : std::true_type {};
23 template<
typename T,
typename =
void>
24 struct HasGetPosition : std::false_type {};
26 struct HasGetPosition<T, std::void_t<
27 decltype(std::declval<T>().getPosition())
28 >> : std::true_type {};
31 template<
typename T,
typename =
void>
32 struct HasGetGlobalBounds : std::false_type {};
34 struct HasGetGlobalBounds<T, std::void_t<
35 decltype(std::declval<T>().getGlobalBounds())
36 >> : std::true_type {};
64 template<
typename ENTITY>
80 if constexpr (HasSetPosition<ENTITY>::value)
81 ENTITY::setPosition(pos);
93 if constexpr (HasGetPosition<ENTITY>::value)
94 return ENTITY::getPosition();
110 if constexpr (HasGetGlobalBounds<ENTITY>::value)
111 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