internal static void ParseAssets(BinaryReader reader, MapParseContext context, AssetsParseCallback parseCallback) { while (reader.BaseStream.Position < context.CurrentEndPosition) { var assetIndex = reader.ReadUInt32(); var assetName = context.GetAssetName(assetIndex); parseCallback(assetName); } }
internal static AssetPropertyKey Parse(BinaryReader reader, MapParseContext context) { var propertyType = reader.ReadByteAsEnum <AssetPropertyType>(); var propertyNameIndex = reader.ReadUInt24(); var propertyName = context.GetAssetName(propertyNameIndex); return(new AssetPropertyKey { PropertyType = propertyType, Name = propertyName }); }
internal static AssetProperty Parse(BinaryReader reader, MapParseContext context) { var propertyType = reader.ReadByteAsEnum <AssetPropertyType>(); var propertyNameIndex = reader.ReadUInt24(); var propertyName = context.GetAssetName(propertyNameIndex); object value = null; switch (propertyType) { case AssetPropertyType.Boolean: value = reader.ReadBooleanChecked(); break; case AssetPropertyType.Integer: value = reader.ReadUInt32(); break; case AssetPropertyType.RealNumber: value = reader.ReadSingle(); break; case AssetPropertyType.AsciiString: value = reader.ReadUInt16PrefixedAsciiString(); break; case AssetPropertyType.UnicodeString: value = reader.ReadUInt16PrefixedUnicodeString(); break; default: throw new InvalidDataException($"Unexpected property type: {propertyType}."); } return(new AssetProperty { PropertyType = propertyType, Name = propertyName, Value = value }); }
internal static TDerived Parse(BinaryReader reader, MapParseContext context, ushort minimumVersionThatHasInternalName) { return(ParseAsset(reader, context, version => { var contentType = reader.ReadUInt32AsEnum <TContentType>(); byte magicValue = 0; string internalName = null; if (version >= minimumVersionThatHasInternalName) { magicValue = reader.ReadByte(); if (magicValue != 3) { throw new InvalidDataException(); } var internalNameIndex = reader.ReadUInt24(); internalName = context.GetAssetName(internalNameIndex); } var numArguments = reader.ReadUInt32(); var arguments = new ScriptArgument[numArguments]; for (var i = 0; i < numArguments; i++) { arguments[i] = ScriptArgument.Parse(reader); } return new TDerived { ContentType = contentType, MagicValue = magicValue, InternalName = internalName, Arguments = arguments }; })); }