Example #1
0
bool UPKReader::Deserialize(uint32_t idx, bool TryUnsafe, bool QuickMode)
{
    if (idx < 1 || idx >= ExportTable.size())
    {
        LogWarn("Index is out of bounds in Deserialize!");
        return false;
    }
    if (ObjectsMap.count(idx) > 0)
    {
        return true;
    }
    UObject* Obj;
    if (ExportTable[idx].ObjectFlagsH & (uint32_t)UObjectFlagsH::PropertiesObject)
    {
        Obj = UObjectFactory::Create(GlobalType::UObject);
    }
    else
    {
        Obj = UObjectFactory::Create(ExportTable[idx].Type);
    }
    if (Obj == nullptr)
    {
        LogWarn("Error creating an Object in Deserialize!");
        return false;
    }
    Obj->LinkPackage(PackageName, idx);
    Obj->SetParams(TryUnsafe, QuickMode);
    if (!Obj->Deserialize())
    {
        LogWarn("Error deserializing an Object in Deserialize!");
        delete Obj;
        return false;
    }
    ObjectsMap[idx] = Obj;
    return true;
}