#include <stdexcept>
#include "handle.h"
+#include "stage.h"
namespace Msp::Game {
class Component;
class Entity;
-class Root;
-class Stage;
template<typename T>
class Owned: public Handle<T>
template<typename O>
Stage &Owned<T>::get_stage(O &obj)
{
- using DependentRoot = std::conditional_t<sizeof(T), Root, Root>;
if constexpr(std::is_base_of_v<Component, O>)
return get_stage(*obj.get_entity());
- else if constexpr(std::is_base_of_v<Entity, O>)
- return dynamic_cast<DependentRoot &>(*obj.get_root()).get_stage();
else
- return obj;
+ return obj.get_stage();
}
template<typename T>