#pragma once #include "Export.h" #include "Core/ISerializable.h" #include "Core/UUID.h" #include #include #include #include #include namespace sh::core { class AssetBundle; } namespace sh::game { class World; class GameObject; } namespace sh::editor { class Project; class BuildSystem { public: SH_EDITOR_API BuildSystem(); SH_EDITOR_API void Build(Project& project, const std::filesystem::path& outputPath); private: void ExtractUUIDs(std::unordered_set& set, const core::Json& world); void PackingAssets(core::AssetBundle& bundle, game::World& world); void ExportGameManager(const std::filesystem::path& outputPath); void CopyRuntimeBinaries(const std::filesystem::path& outputPath); private: Project* currentProject = nullptr; std::regex uuidRegex; std::unordered_set uuids; std::unordered_map> worldUUIDs; }; }//namespace