This commit is contained in:
Perfare 2018-07-07 02:59:44 +08:00
parent 453f6b6e36
commit 18275557df
6 changed files with 25 additions and 22 deletions

View File

@ -1013,7 +1013,7 @@ namespace AssetStudio
} }
default: default:
{ {
var str = asset.Deserialize(); var str = asset.GetClassString();
if (str != null) if (str != null)
{ {
textPreviewBox.Text = str; textPreviewBox.Text = str;

View File

@ -417,21 +417,19 @@ namespace AssetStudio
return unpackedVectors; return unpackedVectors;
} }
public Mesh(AssetPreloadData MeshPD, bool readSwitch) public Mesh(AssetPreloadData preloadData, bool readSwitch)
{ {
//Stream = new EndianStream(File.OpenRead(sourceFile.filePath), sourceFile.endianType); var version = preloadData.sourceFile.version;
//Stream.endian = sourceFile.endianType; reader = preloadData.InitReader();
var version = MeshPD.sourceFile.version;
reader = MeshPD.InitReader();
bool m_Use16BitIndices = true; //3.5.0 and newer always uses 16bit indices bool m_Use16BitIndices = true; //3.5.0 and newer always uses 16bit indices
uint m_MeshCompression = 0; uint m_MeshCompression = 0;
if (MeshPD.sourceFile.platform == -2) if (preloadData.sourceFile.platform == -2)
{ {
uint m_ObjectHideFlags = reader.ReadUInt32(); uint m_ObjectHideFlags = reader.ReadUInt32();
PPtr m_PrefabParentObject = MeshPD.sourceFile.ReadPPtr(); PPtr m_PrefabParentObject = preloadData.sourceFile.ReadPPtr();
PPtr m_PrefabInternal = MeshPD.sourceFile.ReadPPtr(); PPtr m_PrefabInternal = preloadData.sourceFile.ReadPPtr();
} }
m_Name = reader.ReadAlignedString(); m_Name = reader.ReadAlignedString();
@ -490,8 +488,7 @@ namespace AssetStudio
#endregion #endregion
#region BlendShapeData for 4.1.0 to 4.2.x, excluding 4.1.0 alpha #region BlendShapeData for 4.1.0 to 4.2.x, excluding 4.1.0 alpha
if (version[0] == 4 && ((version[1] == 1 && MeshPD.sourceFile.buildType[0] != "a") || if (version[0] == 4 && ((version[1] == 1 && preloadData.sourceFile.buildType[0] != "a") || (version[1] > 1 && version[1] <= 2)))
(version[1] > 1 && version[1] <= 2)))
{ {
int m_Shapes_size = reader.ReadInt32(); int m_Shapes_size = reader.ReadInt32();
if (m_Shapes_size > 0) if (m_Shapes_size > 0)
@ -547,17 +544,15 @@ namespace AssetStudio
bool m_IsReadable = reader.ReadBoolean(); bool m_IsReadable = reader.ReadBoolean();
bool m_KeepVertices = reader.ReadBoolean(); bool m_KeepVertices = reader.ReadBoolean();
bool m_KeepIndices = reader.ReadBoolean(); bool m_KeepIndices = reader.ReadBoolean();
//TODO Need other ways to solve this problem if (preloadData.HasStructMember("m_UsedForStaticMeshColliderOnly"))
/*if (version[0] == 5 && version[1] == 6 && version[2] == 4 &&
MeshPD.sourceFile.buildType[0] == "p")
{ {
var m_UsedForStaticMeshColliderOnly = reader.ReadBoolean(); var m_UsedForStaticMeshColliderOnly = reader.ReadBoolean();
}*/ }
} }
reader.AlignStream(4); reader.AlignStream(4);
//This is a bug fixed in 2017.3.1p1 and later versions //This is a bug fixed in 2017.3.1p1 and later versions
if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4 if ((version[0] > 2017 || (version[0] == 2017 && version[1] >= 4)) || //2017.4
((version[0] == 2017 && version[1] == 3 && version[2] == 1) && MeshPD.sourceFile.buildType[0] == "p") || //fixed after 2017.3.1px ((version[0] == 2017 && version[1] == 3 && version[2] == 1) && preloadData.sourceFile.buildType[0] == "p") || //fixed after 2017.3.1px
((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression ((version[0] == 2017 && version[1] == 3) && m_MeshCompression == 0))//2017.3.xfx with no compression
{ {
var m_IndexFormat = reader.ReadInt32(); var m_IndexFormat = reader.ReadInt32();
@ -1394,8 +1389,8 @@ namespace AssetStudio
} }
else else
{ {
MeshPD.extension = ".obj"; preloadData.extension = ".obj";
MeshPD.Text = m_Name; preloadData.Text = m_Name;
} }
} }
} }

View File

@ -21,7 +21,7 @@ namespace AssetStudio
var m_Name = reader.ReadAlignedString(); var m_Name = reader.ReadAlignedString();
if (readSwitch) if (readSwitch)
{ {
if ((serializedText = preloadData.Deserialize()) == null) if ((serializedText = preloadData.GetClassString()) == null)
{ {
var str = "PPtr<GameObject> m_GameObject\r\n"; var str = "PPtr<GameObject> m_GameObject\r\n";
str += "\tint m_FileID = " + m_GameObject.m_FileID + "\r\n"; str += "\tint m_FileID = " + m_GameObject.m_FileID + "\r\n";

View File

@ -27,7 +27,7 @@ namespace AssetStudio
var str = (string)ShaderResource.ResourceManager.GetObject($"Shader{sourceFile.version[0]}{sourceFile.version[1]}"); var str = (string)ShaderResource.ResourceManager.GetObject($"Shader{sourceFile.version[0]}{sourceFile.version[1]}");
if (str == null) if (str == null)
{ {
str = preloadData.Deserialize(); str = preloadData.GetClassString();
if (str == null) if (str == null)
m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read"); m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read");
else else

View File

@ -69,7 +69,10 @@ namespace AssetStudio
m_IsReadable = reader.ReadBoolean(); //2.6.0 and up m_IsReadable = reader.ReadBoolean(); //2.6.0 and up
m_ReadAllowed = reader.ReadBoolean(); //3.0.0 - 5.4 m_ReadAllowed = reader.ReadBoolean(); //3.0.0 - 5.4
reader.AlignStream(4); reader.AlignStream(4);
if (preloadData.HasStructMember("m_StreamingMipmapsPriority"))
{
var m_StreamingMipmapsPriority = reader.ReadInt32();
}
m_ImageCount = reader.ReadInt32(); m_ImageCount = reader.ReadInt32();
m_TextureDimension = reader.ReadInt32(); m_TextureDimension = reader.ReadInt32();
//m_TextureSettings //m_TextureSettings

View File

@ -31,7 +31,7 @@ namespace AssetStudio
return reader; return reader;
} }
public string Deserialize() public string GetClassString()
{ {
var reader = InitReader(); var reader = InitReader();
if (sourceFile.ClassStructures.TryGetValue(Type1, out var classStructure)) if (sourceFile.ClassStructures.TryGetValue(Type1, out var classStructure))
@ -42,5 +42,10 @@ namespace AssetStudio
} }
return null; return null;
} }
public bool HasStructMember(string name)
{
return sourceFile.ClassStructures.TryGetValue(Type1, out var classStructure) && classStructure.members.Any(x => x.Name == name);
}
} }
} }