void Entity::Deserialize(TiXmlElement* root) { TiXmlElement* contents = NULL; TiXmlNode* node = NULL; TiXmlElement* obj = NULL; World* world = World::GetPtr(); int loc; //contents node = root->FirstChild("contents"); if (node) { contents = node->ToElement(); for (node = contents->FirstChild(); node; node = node->NextSibling()) { obj = node->ToElement(); Entity* object = new Entity(); object->Deserialize(obj); object->SetLocation(this); _contents.push_back(object); } } root->Attribute("location", &loc); Uuid::Deserialize(root); if (!loc) { _location=NULL; } else { _location=world->GetRoom(loc); } //and now we notify everything that an object was loaded: world->events.CallEvent("ObjectLoaded", NULL, this); BaseObject::Deserialize(root->FirstChild("BaseObject")->ToElement()); #ifdef MODULE_SCRIPTING /* Script* script = (Script*)world->GetProperty("script"); script->Execute(this, GetScript()); */ #endif }
/* Decode and create entity from input stream. Used, when a sector is loaded. */ Result SceneManager::DeserializeEntity(Common::InputStream* pStream, const Vector& offset, Entity** ppEntity) { Entity* pEntity = new Entity(); if (pEntity == nullptr) return Result::AllocationError; pEntity->mScene = this; // Desrialize if (pEntity->Deserialize(pStream, offset) != Result::OK) { delete pEntity; //free, the object won't be used anymore return Result::Error; } mEntities.insert(pEntity); *ppEntity = pEntity; return Result::OK; }