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)
{
m_Script = Encoding.UTF8.GetBytes("Serialized Shader can't be read");
m_Script = Encoding.UTF8.GetBytes(preloadData.ViewStruct());
}
else
{

View File

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

View File

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

View File

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