Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
jesterret committed Sep 1, 2020
2 parents b0ec036 + 95ce586 commit f85812a
Show file tree
Hide file tree
Showing 231 changed files with 1,559 additions and 1,366 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ class Program
using (var data = entry.Read())
{
data.Version = UE4Version.VER_UE4_AUTOMATIC_VERSION;
data.Read(out UAssetAsset asset);
UAssetAsset? asset = default;
data.Read(ref asset);
if(asset.IsValid)
{

}
}
}
}
Expand Down
38 changes: 22 additions & 16 deletions src/UETools.Assets/AssetRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
namespace UETools.Assets
{
[UnrealAssetFile(FileName, false)]
public sealed class AssetRegistry : IUnrealDeserializable
public sealed class AssetRegistry : IUnrealSerializable
{
private static Guid AssetRegistryVersionGuid = new Guid(0x717F9EE7, 0x493A, 0xE9B0, 0x32, 0x91, 0xB3, 0x88, 0x07, 0x81, 0x38, 0x1B);

Expand All @@ -21,41 +21,47 @@ public sealed class AssetRegistry : IUnrealDeserializable

/// <inheritdoc />
/// <exception cref="UnrealException">Thrown when <see cref="FArchive.Version"/> is not set.</exception>
public void Deserialize(FArchive reader)
public FArchive Serialize(FArchive archive)
{
if (reader.Version == 0)
throw new UnrealException("FArchive.Version is uninitialized, needs to be set for cooked assets.");
if (archive.Version == 0)
throw new UnrealException($"{nameof(FArchive.Version)} is uninitialized, needs to be set for cooked assets.");

ReadVersion(reader);
ReadVersion(archive);

// AssetData format was changed from FStrings to FNames
if (_version >= EAssetRegistryVersion.ChangedAssetData)
{
reader.Read(out long StringTableOffset);
var currentOffset = reader.Tell();
reader.Seek(StringTableOffset);
reader.Read(out NameTable _);
reader.Seek(currentOffset);
reader.Read(out List<AssetData> assets);
long stringTableOffset = 0;
archive.Read(ref stringTableOffset);
var currentOffset = archive.Tell();
archive.Seek(stringTableOffset);
NameTable? names = default;
archive.Read(ref names);
archive.Seek(currentOffset);
List<AssetData>? assets = default;
archive.Read(ref assets);
_assets = new List<IAssetData>(assets);
}
else
{
reader.Read(out List<AssetDataOldFormat> assets);
List<AssetDataOldFormat>? assets = default;
archive.Read(ref assets);
_assets = new List<IAssetData>(assets);
}

// TODO: Fixup the dependencies indexes into the references to actual dependency
reader.Read(out _assetDependencies);
reader.Read(out _packageData);
archive.Read(ref _assetDependencies)
.Read(ref _packageData);
return archive;
}

private void ReadVersion(FArchive reader)
{
reader.Read(out Guid guid);
Guid guid = default;
reader.Read(ref guid);
if (guid == AssetRegistryVersionGuid)
{
reader.ReadUnsafe(out _version);
reader.ReadUnsafe(ref _version);
}
else
{
Expand Down
14 changes: 6 additions & 8 deletions src/UETools.Assets/Internal/Asset/CompressedChunk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,18 @@

namespace UETools.Assets.Internal.Asset
{
internal class CompressedChunk : IUnrealDeserializable
internal class CompressedChunk : IUnrealSerializable
{
public int UncompressedOffset { get => _uncompressedOffset; set => _uncompressedOffset = value; }
public int UncompressedSize { get => _uncompressedSize; set => _uncompressedSize = value; }
public int CompressedOffset { get => _compressedOffset; set => _compressedOffset = value; }
public int CompressedSize { get => _compressedSize; set => _compressedSize = value; }

public void Deserialize(FArchive reader)
{
reader.Read(out _uncompressedOffset);
reader.Read(out _uncompressedSize);
reader.Read(out _compressedOffset);
reader.Read(out _compressedSize);
}
public FArchive Serialize(FArchive archive)
=> archive.Read(ref _uncompressedOffset)
.Read(ref _uncompressedSize)
.Read(ref _compressedOffset)
.Read(ref _compressedSize);

private int _uncompressedOffset;
private int _uncompressedSize;
Expand Down
16 changes: 7 additions & 9 deletions src/UETools.Assets/Internal/Asset/EngineVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace UETools.Assets.Internal.Asset
{
public class EngineVersion : IUnrealDeserializable
public class EngineVersion : IUnrealSerializable
{
public EngineVersion() { }
public EngineVersion(ushort major, ushort minor, ushort patch, uint changelist, string branch)
Expand All @@ -15,14 +15,12 @@ public EngineVersion(ushort major, ushort minor, ushort patch, uint changelist,
_branch = branch;
}

public void Deserialize(FArchive reader)
{
reader.Read(out _major);
reader.Read(out _minor);
reader.Read(out _patch);
reader.Read(out _changelist);
reader.Read(out _branch);
}
public FArchive Serialize(FArchive archive)
=> archive.Read(ref _major)
.Read(ref _minor)
.Read(ref _patch)
.Read(ref _changelist)
.Read(ref _branch);

private ushort _major;
private ushort _minor;
Expand Down
14 changes: 6 additions & 8 deletions src/UETools.Assets/Internal/Asset/GatherableTextData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,13 @@

namespace UETools.Assets.Internal.Asset
{
internal class GatherableTextData : IUnrealDeserializable
internal class GatherableTextData : IUnrealSerializable
{
public void Deserialize(FArchive reader)
{
reader.Read(out _namespaceName);
reader.Read(out _sourceData);
reader.Read(out _sourceSiteContexts);
throw new UnrealException($"{nameof(GatherableTextData)} is not implemented properly since I didn't have any samples using it. Feel free to share it with me!", new NotImplementedException());
}
// TODO: Verify! GatherableTextData might not be implemented properly since I didn't have any samples using it.
public FArchive Serialize(FArchive archive)
=> archive.Read(ref _namespaceName)
.Read(ref _sourceData)
.Read(ref _sourceSiteContexts);

private FString _namespaceName = null!;
private TextSourceData _sourceData = null!;
Expand Down
10 changes: 4 additions & 6 deletions src/UETools.Assets/Internal/Asset/GenerationInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@

namespace UETools.Assets.Internal.Asset
{
internal struct GenerationInfo : IUnrealDeserializable
internal struct GenerationInfo : IUnrealSerializable
{
public void Deserialize(FArchive reader)
{
reader.Read(out _exportCount);
reader.Read(out _nameCount);
}
public FArchive Serialize(FArchive archive)
=> archive.Read(ref _exportCount)
.Read(ref _nameCount);

private int _exportCount;
private int _nameCount;
Expand Down
4 changes: 2 additions & 2 deletions src/UETools.Assets/Internal/Asset/LocMetadataObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

namespace UETools.Assets.Internal.Asset
{
internal class LocMetadataObject : IUnrealDeserializable
internal class LocMetadataObject : IUnrealSerializable
{
public void Deserialize(FArchive reader) => reader.Read(out _values);
public FArchive Serialize(FArchive archive) => archive.Read(ref _values);

private Dictionary<FString, LocMetadataValue> _values = null!;
}
Expand Down
20 changes: 13 additions & 7 deletions src/UETools.Assets/Internal/Asset/LocMetadataValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,42 @@

namespace UETools.Assets.Internal.Asset
{
internal partial class LocMetadataValue : IUnrealDeserializable
internal partial class LocMetadataValue : IUnrealSerializable
{
public void Deserialize(FArchive reader)
// TODO: FIX
public FArchive Serialize(FArchive archive)
{
reader.ReadUnsafe(out _metaDataType);
archive.ReadUnsafe(ref _metaDataType);
switch (_metaDataType)
{
case ELocMetadataType.Boolean:
{
reader.Read(out bool b);
bool b = false;
archive.Read(ref b);
}
break;
case ELocMetadataType.String:
{
reader.Read(out FString b);
FString? b = default;
archive.Read(ref b);
}
break;
case ELocMetadataType.Array:
{
reader.Read(out List<LocMetadataValue> ar);
List<LocMetadataValue>? ar = default;
archive.Read(ref ar);
}
break;
case ELocMetadataType.Object:
{
reader.Read(out LocMetadataObject b);
LocMetadataObject? b = default;
archive.Read(ref b);
}
break;
default:
throw new NotImplementedException($"{_metaDataType} not implemented.");
}
return archive;
}

ELocMetadataType _metaDataType;
Expand Down
Loading

0 comments on commit f85812a

Please sign in to comment.