(Gx4Lib): differentiate audio/image packages.

This commit is contained in:
morkt 2018-08-31 19:14:10 +04:00
parent 706add22ff
commit b8aca69978

View File

@ -32,13 +32,10 @@ namespace GameRes.Gx4Lib
{ {
public class PackageFile public class PackageFile
{ {
public PFHeader[] Deserialize (Stream input) public PFHeaders Deserialize (Stream input)
{ {
var bin = new BinaryFormatter { Binder = new Gx4TypeBinder() }; var bin = new BinaryFormatter { Binder = new Gx4TypeBinder() };
var index = bin.Deserialize (input) as PFHeaders; return bin.Deserialize (input) as PFHeaders;
if (null == index)
return null;
return index.headers;
} }
} }
@ -56,6 +53,16 @@ namespace GameRes.Gx4Lib
public PFHeader[] headers; public PFHeader[] headers;
} }
[Serializable]
public class PFAudioHeaders : PFHeaders
{
}
[Serializable]
public class PFImageHeaders : PFHeaders
{
}
internal class Gx4TypeBinder : SerializationBinder internal class Gx4TypeBinder : SerializationBinder
{ {
public override Type BindToType (string assemblyName, string typeName) public override Type BindToType (string assemblyName, string typeName)
@ -64,6 +71,10 @@ namespace GameRes.Gx4Lib
{ {
if (typeName.StartsWith ("GX4.PackageFile`1+PFHeaders[[")) if (typeName.StartsWith ("GX4.PackageFile`1+PFHeaders[["))
{ {
if (0 == string.Compare (typeName, 29, "UnityEngine.AudioClip", 0, 21))
return typeof(PFAudioHeaders);
if (0 == string.Compare (typeName, 29, "UnityEngine.Texture2D", 0, 21))
return typeof(PFImageHeaders);
return typeof(PFHeaders); return typeof(PFHeaders);
} }
else if (typeName.StartsWith ("GX4.PackageFile`1+PFHeader[[")) else if (typeName.StartsWith ("GX4.PackageFile`1+PFHeader[["))