feat: add mesh component editors and scene hierarchy serialization

This commit is contained in:
2026-03-31 21:25:59 +08:00
parent b92f9bfa70
commit be15bc2fc4
7 changed files with 341 additions and 7 deletions

View File

@@ -554,7 +554,7 @@ TEST_F(SceneTest, SaveAndLoad_PreservesMeshComponentPaths) {
std::filesystem::remove(scenePath);
}
TEST(Scene_ProjectSample, MainSceneLoadsBackpackMeshAsset) {
TEST(Scene_ProjectSample, BackpackSceneLoadsBackpackMeshAsset) {
namespace fs = std::filesystem;
XCEngine::Resources::ResourceManager& resourceManager = XCEngine::Resources::ResourceManager::Get();
@@ -580,11 +580,11 @@ TEST(Scene_ProjectSample, MainSceneLoadsBackpackMeshAsset) {
const fs::path repositoryRoot = GetRepositoryRoot();
const fs::path projectRoot = repositoryRoot / "project";
const fs::path mainScenePath = projectRoot / "Assets" / "Scenes" / "Main.xc";
const fs::path backpackScenePath = projectRoot / "Assets" / "Scenes" / "Backpack.xc";
const fs::path assimpDllPath = repositoryRoot / "engine" / "third_party" / "assimp" / "bin" / "assimp-vc143-mt.dll";
const fs::path backpackMeshPath = projectRoot / "Assets" / "Models" / "backpack" / "backpack.obj";
ASSERT_TRUE(fs::exists(mainScenePath));
ASSERT_TRUE(fs::exists(backpackScenePath));
ASSERT_TRUE(fs::exists(assimpDllPath));
ASSERT_TRUE(fs::exists(backpackMeshPath));
@@ -617,7 +617,7 @@ TEST(Scene_ProjectSample, MainSceneLoadsBackpackMeshAsset) {
ASSERT_GT(directMeshHandle->GetVertexCount(), 0u);
Scene loadedScene;
loadedScene.Load(mainScenePath.string());
loadedScene.Load(backpackScenePath.string());
GameObject* backpackObject = loadedScene.Find("BackpackMesh");
ASSERT_NE(backpackObject, nullptr);
@@ -634,4 +634,20 @@ TEST(Scene_ProjectSample, MainSceneLoadsBackpackMeshAsset) {
EXPECT_EQ(meshFilter->GetMeshPath(), "Assets/Models/backpack/backpack.obj");
}
TEST(Scene_ProjectSample, MainSceneStaysLightweightForEditorStartup) {
namespace fs = std::filesystem;
const fs::path repositoryRoot = GetRepositoryRoot();
const fs::path mainScenePath = repositoryRoot / "project" / "Assets" / "Scenes" / "Main.xc";
ASSERT_TRUE(fs::exists(mainScenePath));
Scene loadedScene;
loadedScene.Load(mainScenePath.string());
EXPECT_NE(loadedScene.Find("Main Camera"), nullptr);
EXPECT_NE(loadedScene.Find("Directional Light"), nullptr);
EXPECT_EQ(loadedScene.Find("BackpackMesh"), nullptr);
}
} // namespace