fixed enumproperty parsing

This commit is contained in:
Not Officer 2020-12-30 14:51:14 +01:00
parent 06c4ebd539
commit 16bf9de35e
2 changed files with 13 additions and 13 deletions

View File

@ -69,7 +69,7 @@ namespace FModel.PakReader.Parsers.PropertyTagData
"Int8Property" => new Int8Property(reader),
"MapProperty" => new MapProperty(reader, tag),
"SetProperty" => new SetProperty(reader, tag),
"EnumProperty" => new EnumProperty(reader, tag),
"EnumProperty" => new EnumProperty(reader, tag, readType),
_ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."),
};
return prop;
@ -105,7 +105,7 @@ namespace FModel.PakReader.Parsers.PropertyTagData
"Int8Property" => new Int8Property(reader).Value,
"MapProperty" => new MapProperty(reader, tag).Value,
"SetProperty" => new SetProperty(reader, tag).Value,
"EnumProperty" => new EnumProperty(reader, tag).Value,
"EnumProperty" => new EnumProperty(reader, tag, readType).Value,
_ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."),
};
return prop;

View File

@ -8,31 +8,31 @@ namespace FModel.PakReader.Parsers.PropertyTagData
{
Value = new FName(ByteToEnum(tag.EnumName.String, 0));
}
internal EnumProperty(PackageReader reader, FPropertyTag tag)
internal EnumProperty(PackageReader reader, FPropertyTag tag, ReadType readType)
{
Position = reader.Position;
if (reader is IoPackageReader)
{
object byteValue = tag.EnumType.String == "IntProperty" ? reader.ReadInt32() : reader.ReadByte();
Value = new FName(ByteToEnum(tag.EnumName.String, byteValue));
}
else
if (!(reader is IoPackageReader) || readType != ReadType.NORMAL)
{
Value = reader.ReadFName();
}
else
{
var byteValue = tag.EnumType.String == "IntProperty" ? reader.ReadInt32() : reader.ReadByte();
Value = new FName(ByteToEnum(tag.EnumName.String, byteValue));
}
}
private static string ByteToEnum(string enumName, object value)
private static string ByteToEnum(string enumName, int value)
{
string result;
if (enumName == null)
return value.ToString();
string result;
if (Globals.EnumMappings.TryGetValue(enumName, out var values))
{
result = values.TryGetValue((int)value, out var member) ? string.Concat(enumName, "::", member) : string.Concat(enumName, "::", value);
result = values.TryGetValue(value, out var member) ? string.Concat(enumName, "::", member) : string.Concat(enumName, "::", value);
}
else
{