void ComponentFactory::ParseType(Serializer& _ser, tinyxml2::XMLElement* _element) { const natChar *type_str = _element->Attribute("type"); ref_t type = Hash::Compute(type_str); if(type == s_type_ref_t) { const natChar* value = _element->Attribute("value"); ref_t ref; if(strcmp(value, "") != 0) { ref = Hash::Compute(value); } else { ref = 0; } _ser << ref; } else if(type == s_type_tex_t) { const natChar* value = _element->Attribute("value"); ref_t ref; if(strcmp(value, "") != 0) { ref = Hash::Compute(value); // add it to preload TextureManager* texturemanager = GetEntity()->GetKernel()->GetLayer(Layer::s_LayerManager)->GetRootEntity()->GetComponent<TextureManager>(); texturemanager->Preload(value); } else { ref = 0; } _ser << ref; } else if(type == s_type_natBool) { natBool value = _element->BoolAttribute("value"); _ser << value; } else if(type == s_type_natChar) { const natChar* value = _element->Attribute("value"); natChar value0 = value[0]; _ser << value0; } else if(type == s_type_natU8) { const natU8* value = reinterpret_cast<const natU8*>(_element->Attribute("value")); natU8 value0 = value[0]; _ser << value0; } else if(type == s_type_natS8) { const natS8* value = reinterpret_cast<const natS8*>(_element->Attribute("value")); natS8 value0 = value[0]; _ser << value0; } else if(type == s_type_natU16) { natU16 value = static_cast<natU16>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natS16) { natS16 value = static_cast<natS16>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natU32) { natU32 value = static_cast<natU32>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natS32) { natS32 value = static_cast<natS32>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natU64) { natU64 value = static_cast<natU64>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natS64) { natS64 value = static_cast<natS64>(_element->IntAttribute("value")); _ser << value; } else if(type == s_type_natF32) { natF32 value = static_cast<natF32>(_element->FloatAttribute("value")); _ser << value; } else if(type == s_type_natF64) { natF64 value = static_cast<natF64>(_element->DoubleAttribute("value")); _ser << value; } else if(type == s_type_std_string) { const natChar* value = _element->Attribute("value"); std::string str = value; _ser << str; } else if(type == s_type_glm_vec2) { // ugly stl const natChar* value = _element->Attribute("value"); std::istringstream iss(value); std::string value0; std::string value1; glm::vec2 ret; std::getline(iss, value0, ' '); if(!std::getline(iss, value1, ' ')) { value1 = "0"; } std::istringstream iss0(value0); iss0 >> ret.x; std::istringstream iss1(value1); iss1 >> ret.y; _ser << ret; } else if(type == s_type_glm_vec3)