#ifndef __SCOP_GRAPHICS_NARRATOR__ #define __SCOP_GRAPHICS_NARRATOR__ #include #include #include #include #include #include namespace Scop { class Narrator { friend Scene; public: Narrator() : m_uuid(UUID()) {} Narrator(std::uint64_t uuid) : m_uuid(uuid) {} inline void AttachScript(std::shared_ptr script) { p_script = script; } [[nodiscard]] inline std::uint64_t GetUUID() const noexcept { return m_uuid; } inline ~Narrator() { if(p_script) p_script->OnQuit(); } private: inline void Update(NonOwningPtr scene, class Inputs& input, float timestep) { if(p_script) p_script->OnUpdate(scene, input, timestep); } private: std::shared_ptr p_script; std::uint64_t m_uuid; }; } namespace std { template <> struct hash { std::size_t operator()(const Scop::Narrator& n) const noexcept { return static_cast(n.GetUUID()); } }; } #endif