添加 Components 和 Scene 序列化支持

- Component: 添加 Serialize/Deserialize 虚函数
- TransformComponent: 实现 Transform 数据的序列化/反序列化
- GameObject: 实现对象序列化/反序列化
- Scene: 实现 Save/Load 方法,支持场景文件保存和加载
- 测试: 添加 Save_And_Load 和 Save_ContainsGameObjectData 测试
This commit is contained in:
2026-03-22 03:42:40 +08:00
parent a9d5a68dd6
commit 70571d11df
10 changed files with 189 additions and 15 deletions

View File

@@ -2,8 +2,12 @@
#include <XCEngine/Scene/Scene.h>
#include <XCEngine/Components/GameObject.h>
#include <XCEngine/Components/TransformComponent.h>
#include <XCEngine/Math/Vector3.h>
#include <fstream>
#include <sstream>
using namespace XCEngine::Components;
using namespace XCEngine::Math;
namespace {
@@ -214,4 +218,34 @@ TEST_F(SceneTest, OnGameObjectDestroyed_Event) {
EXPECT_TRUE(eventFired);
}
TEST_F(SceneTest, Save_And_Load) {
GameObject* go = testScene->CreateGameObject("SavedObject");
go->GetTransform()->SetLocalPosition(XCEngine::Math::Vector3(1.0f, 2.0f, 3.0f));
go->SetActive(true);
testScene->Save("test_scene.scene");
Scene loadedScene;
loadedScene.Load("test_scene.scene");
GameObject* loadedGo = loadedScene.Find("SavedObject");
EXPECT_NE(loadedGo, nullptr);
EXPECT_EQ(loadedGo->GetTransform()->GetLocalPosition(), XCEngine::Math::Vector3(1.0f, 2.0f, 3.0f));
}
TEST_F(SceneTest, Save_ContainsGameObjectData) {
testScene->CreateGameObject("Player");
testScene->CreateGameObject("Enemy");
testScene->Save("test_scene_multi.scene");
std::ifstream file("test_scene_multi.scene");
std::stringstream buffer;
buffer << file.rdbuf();
std::string content = buffer.str();
EXPECT_TRUE(content.find("Player") != std::string::npos);
EXPECT_TRUE(content.find("Enemy") != std::string::npos);
}
} // namespace