#ifndef __MLX_SCENE__ #define __MLX_SCENE__ #include #include #include namespace mlx { struct SceneDescriptor { NonOwningPtr renderer; // More description may come in future }; class Scene { public: Scene(SceneDescriptor desc); Sprite& CreateSprite(NonOwningPtr texture) noexcept; NonOwningPtr GetSpriteFromTextureAndPosition(NonOwningPtr texture, const Vec2f& position) const; void BringToFront(NonOwningPtr sprite); void TryEraseSpriteFromTexture(NonOwningPtr texture); inline void ResetSprites() { m_sprites.clear(); } [[nodiscard]] MLX_FORCEINLINE const std::vector>& GetSprites() const noexcept { return m_sprites; } [[nodiscard]] MLX_FORCEINLINE const SceneDescriptor& GetDescription() const noexcept { return m_descriptor; } [[nodiscard]] MLX_FORCEINLINE ViewerData& GetViewerData() noexcept { return m_viewer_data; } ~Scene() = default; private: SceneDescriptor m_descriptor; std::vector> m_sprites; ViewerData m_viewer_data; }; } #endif