#pragma once #include #include namespace faset::editor { struct ProjectSelection { std::filesystem::path path; std::string name; int dimension = 3; bool create = false; }; // Records only existing, valid projects. Call after successful Session setup. void remember_project(const std::filesystem::path& project); class ProjectLauncher { public: ProjectLauncher(render::Renderer&, const std::filesystem::path& engine_root, const std::filesystem::path& initial_project = {}, const std::filesystem::path& recent_store = {}); ~ProjectLauncher(); void frame(const std::vector&); const render::Snapshot& snapshot() const; ui::Context& widgets(); const std::optional& selection() const; bool cancelled() const; private: struct Impl; std::unique_ptr impl_; }; std::optional run_project_launcher(const std::filesystem::path& engine_root, const std::filesystem::path& initial_project = {}, std::uint64_t max_frames = 0, const std::filesystem::path& capture = {}); } // namespace faset::editor