添加 Components 和 Scene 序列化支持
- Component: 添加 Serialize/Deserialize 虚函数 - TransformComponent: 实现 Transform 数据的序列化/反序列化 - GameObject: 实现对象序列化/反序列化 - Scene: 实现 Save/Load 方法,支持场景文件保存和加载 - 测试: 添加 Save_And_Load 和 Save_ContainsGameObjectData 测试
This commit is contained in:
@@ -187,5 +187,48 @@ void GameObject::Destroy() {
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::Serialize(std::ostream& os) const {
|
||||
os << "name=" << m_name << ";";
|
||||
os << "active=" << (m_activeSelf ? "1" : "0") << ";";
|
||||
os << "id=" << m_id << ";";
|
||||
os << "transform=";
|
||||
m_transform->Serialize(os);
|
||||
os << ";";
|
||||
}
|
||||
|
||||
void GameObject::Deserialize(std::istream& is) {
|
||||
std::string token;
|
||||
|
||||
while (is.peek() != -1 && is.peek() != '\n' && is.peek() != '\r') {
|
||||
if (is.peek() == ';') {
|
||||
is.get();
|
||||
if (is.peek() == ';') break;
|
||||
continue;
|
||||
}
|
||||
|
||||
char key[64];
|
||||
is.get(key, 64, '=');
|
||||
if (key[0] == '\0') break;
|
||||
is.get();
|
||||
|
||||
if (strcmp(key, "name") == 0) {
|
||||
std::getline(is, m_name, ';');
|
||||
} else if (strcmp(key, "active") == 0) {
|
||||
char val;
|
||||
is.get(val);
|
||||
m_activeSelf = (val == '1');
|
||||
if (is.peek() == ';') is.get();
|
||||
} else if (strcmp(key, "id") == 0) {
|
||||
is >> m_id;
|
||||
if (is.peek() == ';') is.get();
|
||||
} else if (strcmp(key, "transform") == 0) {
|
||||
m_transform->Deserialize(is);
|
||||
if (is.peek() == ';') is.get();
|
||||
} else {
|
||||
std::getline(is, token, ';');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Components
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user