#pragma once #include #include #include #include #include namespace Engine { class Camera; class Scene; } class Engine::Scene { protected: std::string name; Hud* heads_up_display = nullptr; Camera* active_camera = nullptr; std::vector fixed_list{}; std::vector entity_list{}; public: [[nodiscard]] bool EntityListContains(const Entity* entity) const; [[nodiscard]] bool FixedListContains(const Fixed* fixed) const; [[nodiscard]] size_t FixedCount() const; [[nodiscard]] size_t EntityCount() const; [[nodiscard]] std::string GetName() const; [[nodiscard]] Camera* GetActiveCamera() const; public: void AppendEntity(Entity* entity); void AppendFixed(Fixed* fixed); // Removes and deallocates. void DestroyEntity(Entity* entity); void DestroyFixed(Fixed* fixed); // Only removes from the list. void RemoveEntity(Entity* entity); void RemoveFixed(Fixed* fixed); virtual void Unload(); virtual void Init() {} virtual void Update(); virtual void Render(RenderTarget* render_target = nullptr); public: explicit Scene(const std::string& name) : name(name) {} virtual ~Scene(); };