Fixed read struct

This commit is contained in:
Perfare 2017-04-04 05:49:26 +08:00
parent f8e7303169
commit 6f3b438d92
5 changed files with 37 additions and 46 deletions

View File

@ -27,7 +27,7 @@ namespace Unity_Studio
{ {
if (readSwitch) if (readSwitch)
{ {
m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read"); m_Script = Encoding.UTF8.GetBytes(preloadData.ViewStruct());
} }
else else
{ {

View File

@ -36,7 +36,6 @@ namespace Unity_Studio
return null; return null;
} }
//TODO 1,2长度类型对齐问题
private static void Read(StringBuilder sb, List<ClassMember> members, EndianStream a_Stream) private static void Read(StringBuilder sb, List<ClassMember> members, EndianStream a_Stream)
{ {
for (int i = 0; i < members.Count; i++) for (int i = 0; i < members.Count; i++)
@ -45,80 +44,65 @@ namespace Unity_Studio
var level = member.Level; var level = member.Level;
var varTypeStr = member.Type; var varTypeStr = member.Type;
var varNameStr = member.Name; var varNameStr = member.Name;
object value = null;
var align = (member.Flag & 0x4000) != 0;
var append = true;
if (varTypeStr == "SInt8")//sbyte if (varTypeStr == "SInt8")//sbyte
{ {
var value = a_Stream.ReadSByte(); value = a_Stream.ReadSByte();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "UInt8")//byte else if (varTypeStr == "UInt8")//byte
{ {
var value = a_Stream.ReadByte(); value = a_Stream.ReadByte();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16 else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16
{ {
var value = a_Stream.ReadInt16(); value = a_Stream.ReadInt16();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16 else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16
{ {
var value = a_Stream.ReadUInt16(); value = a_Stream.ReadUInt16();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32 else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32
{ {
var value = a_Stream.ReadInt32(); value = a_Stream.ReadInt32();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32 else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32
{ {
var value = a_Stream.ReadUInt32(); value = a_Stream.ReadUInt32();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64 else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64
{ {
var value = a_Stream.ReadInt64(); value = a_Stream.ReadInt64();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64 else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64
{ {
var value = a_Stream.ReadUInt64(); value = a_Stream.ReadUInt64();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "float")//float else if (varTypeStr == "float")//float
{ {
var value = a_Stream.ReadSingle(); value = a_Stream.ReadSingle();
sb.AppendFormat("{0}{1} {2} = {3:f}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "double")//double else if (varTypeStr == "double")//double
{ {
var value = a_Stream.ReadDouble(); value = a_Stream.ReadDouble();
sb.AppendFormat("{0}{1} {2} = {3:f4}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "bool")//bool else if (varTypeStr == "bool")//bool
{ {
var value = a_Stream.ReadBoolean(); value = a_Stream.ReadBoolean();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
a_Stream.AlignStream(4);
} }
else if (varTypeStr == "string")//string else if (varTypeStr == "string")//string
{ {
var value = a_Stream.ReadAlignedString(a_Stream.ReadInt32()); append = false;
sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, value); var str = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
sb.AppendFormat("{0}{1} {2} = \"{3}\"\r\n", (new string('\t', level)), varTypeStr, varNameStr, str);
i += 3;//skip i += 3;//skip
} }
else if (varTypeStr == "Array")//Array else if (varTypeStr == "Array")//Array
{ {
append = false;
if ((members[i - 1].Flag & 0x4000) != 0)
align = true;
sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
var size = a_Stream.ReadInt32(); var size = a_Stream.ReadInt32();
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size); sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), "int", "size", size);
@ -132,8 +116,14 @@ namespace Unity_Studio
} }
else else
{ {
append = false;
align = false;
sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr); sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
} }
if (append)
sb.AppendFormat("{0}{1} {2} = {3}\r\n", (new string('\t', level)), varTypeStr, varNameStr, value);
if (align)
a_Stream.AlignStream(4);
} }
} }

View File

@ -365,8 +365,7 @@ namespace Unity_Studio
int index = a_Stream.ReadInt32(); int index = a_Stream.ReadInt32();
int isArray = a_Stream.ReadInt32(); int isArray = a_Stream.ReadInt32();
int num0 = a_Stream.ReadInt32(); int num0 = a_Stream.ReadInt32();
int num1 = a_Stream.ReadInt16(); int flag = a_Stream.ReadInt32();
int num2 = a_Stream.ReadInt16();
int childrenCount = a_Stream.ReadInt32(); int childrenCount = a_Stream.ReadInt32();
//Debug.WriteLine(baseFormat + " " + baseName + " " + childrenCount); //Debug.WriteLine(baseFormat + " " + baseName + " " + childrenCount);
@ -375,7 +374,8 @@ namespace Unity_Studio
Level = level - 1, Level = level - 1,
Type = varType, Type = varType,
Name = varName, Name = varName,
Size = size Size = size,
Flag = flag
}); });
for (int i = 0; i < childrenCount; i++) { readBase(cb, level + 1); } for (int i = 0; i < childrenCount; i++) { readBase(cb, level + 1); }
} }
@ -452,7 +452,7 @@ namespace Unity_Studio
int size = a_Stream.ReadInt32(); int size = a_Stream.ReadInt32();
int index = a_Stream.ReadInt32(); int index = a_Stream.ReadInt32();
int num1 = a_Stream.ReadInt32(); int flag = a_Stream.ReadInt32();
if (index == 0) { className = varTypeStr + " " + varNameStr; } if (index == 0) { className = varTypeStr + " " + varNameStr; }
else else
@ -462,7 +462,8 @@ namespace Unity_Studio
Level = level - 1, Level = level - 1,
Type = varTypeStr, Type = varTypeStr,
Name = varNameStr, Name = varNameStr,
Size = size Size = size,
Flag = flag
}); });
} }

View File

@ -31,6 +31,7 @@ namespace Unity_Studio
public string Type; public string Type;
public string Name; public string Name;
public int Size; public int Size;
public int Flag;
} }
public static class ClassIDReference public static class ClassIDReference

View File

@ -13,7 +13,6 @@ using System.Diagnostics;
using System.Drawing.Text; using System.Drawing.Text;
using OpenTK; using OpenTK;
using OpenTK.Graphics.OpenGL; using OpenTK.Graphics.OpenGL;
using ManagedFbx;
using static Unity_Studio.UnityStudio; using static Unity_Studio.UnityStudio;
namespace Unity_Studio namespace Unity_Studio
@ -1062,14 +1061,14 @@ namespace Unity_Studio
default: default:
{ {
/*string str; string str;
if ((str = asset.ViewStruct()) != null) if ((str = asset.ViewStruct()) != null)
{ {
textPreviewBox.Text = str; textPreviewBox.Text = str;
textPreviewBox.Visible = true; textPreviewBox.Visible = true;
} }
else*/ else
StatusStripUpdate("Only supported export the raw file."); StatusStripUpdate("Only supported export the raw file.");
break; break;
} }
} }