#pragma once #include #include #include #include namespace XCEngine { namespace Editor { class ISceneManager { public: virtual ~ISceneManager() = default; virtual ::XCEngine::Components::GameObject* CreateEntity(const std::string& name, ::XCEngine::Components::GameObject* parent = nullptr) = 0; virtual void DeleteEntity(::XCEngine::Components::GameObject::ID id) = 0; virtual void RenameEntity(::XCEngine::Components::GameObject::ID id, const std::string& newName) = 0; virtual ::XCEngine::Components::GameObject* GetEntity(::XCEngine::Components::GameObject::ID id) = 0; virtual const std::vector<::XCEngine::Components::GameObject*>& GetRootEntities() const = 0; virtual void CopyEntity(::XCEngine::Components::GameObject::ID id) = 0; virtual ::XCEngine::Components::GameObject::ID PasteEntity(::XCEngine::Components::GameObject::ID parent = 0) = 0; virtual ::XCEngine::Components::GameObject::ID DuplicateEntity(::XCEngine::Components::GameObject::ID id) = 0; virtual void MoveEntity(::XCEngine::Components::GameObject::ID id, ::XCEngine::Components::GameObject::ID newParent) = 0; virtual bool HasClipboardData() const = 0; virtual void NewScene(const std::string& name = "Untitled Scene") = 0; virtual bool LoadScene(const std::string& filePath) = 0; virtual bool SaveScene() = 0; virtual bool SaveSceneAs(const std::string& filePath) = 0; virtual bool LoadStartupScene(const std::string& projectPath) = 0; virtual bool HasActiveScene() const = 0; virtual bool IsSceneDirty() const = 0; virtual void MarkSceneDirty() = 0; virtual const std::string& GetCurrentScenePath() const = 0; virtual const std::string& GetCurrentSceneName() const = 0; virtual void CreateDemoScene() = 0; }; } }