- improve export MonoBehaviour

- remove some code
This commit is contained in:
Perfare 2017-01-17 04:12:06 +08:00
parent 4899d6d7d0
commit dc5691aefc
4 changed files with 118 additions and 100 deletions

View File

@ -289,65 +289,106 @@ namespace Unity_Studio
if (baseDefinitions)
{
#region cmmon string array
string[] baseStrings = new string[1007];
string[] baseStrings = new string[1016];
baseStrings[0] = "AABB";
baseStrings[5] = "AnimationClip";
baseStrings[19] = "AnimationCurve";
baseStrings[34] = "AnimationState";
baseStrings[49] = "Array";
baseStrings[55] = "Base";
baseStrings[60] = "BitField";
baseStrings[69] = "bitset";
baseStrings[76] = "bool";
baseStrings[81] = "char";
baseStrings[86] = "ColorRGBA";
baseStrings[96] = "Component";
baseStrings[106] = "data";
baseStrings[111] = "deque";
baseStrings[117] = "double";
baseStrings[124] = "dynamic_array";
baseStrings[138] = "FastPropertyName";
baseStrings[155] = "first";
baseStrings[161] = "float";
baseStrings[167] = "Font";
baseStrings[172] = "GameObject";
baseStrings[183] = "Generic Mono";
baseStrings[196] = "GradientNEW";
baseStrings[208] = "GUID";
baseStrings[213] = "GUIStyle";
baseStrings[222] = "int";
baseStrings[226] = "list";
baseStrings[231] = "long long";
baseStrings[241] = "map";
baseStrings[245] = "Matrix4x4f";
baseStrings[262] = "NavMeshSettings";
baseStrings[256] = "MdFour";
baseStrings[263] = "MonoBehaviour";
baseStrings[277] = "MonoScript";
baseStrings[288] = "m_ByteSize";
baseStrings[299] = "m_Curve";
baseStrings[307] = "m_EditorClassIdentifier";
baseStrings[331] = "m_EditorHideFlags";
baseStrings[349] = "m_Enabled";
baseStrings[359] = "m_ExtensionPtr";
baseStrings[374] = "m_GameObject";
baseStrings[387] = "m_Index";
baseStrings[395] = "m_IsArray";
baseStrings[405] = "m_IsStatic";
baseStrings[416] = "m_MetaFlag";
baseStrings[427] = "m_Name";
baseStrings[434] = "m_ObjectHideFlags";
baseStrings[452] = "m_PrefabInternal";
baseStrings[469] = "m_PrefabParentObject";
baseStrings[490] = "m_Script";
baseStrings[499] = "m_StaticEditorFlags";
baseStrings[519] = "m_Type";
baseStrings[526] = "m_Version";
baseStrings[536] = "Object";
baseStrings[543] = "pair";
baseStrings[548] = "PPtr<Component>";
baseStrings[564] = "PPtr<GameObject>";
baseStrings[581] = "PPtr<Material>";
baseStrings[596] = "PPtr<MonoBehaviour>";
baseStrings[616] = "PPtr<MonoScript>";
baseStrings[633] = "PPtr<Object>";
baseStrings[646] = "PPtr<Prefab>";
baseStrings[659] = "PPtr<Sprite>";
baseStrings[672] = "PPtr<TextAsset>";
baseStrings[688] = "PPtr<Texture>";
baseStrings[702] = "PPtr<Texture2D>";
baseStrings[718] = "PPtr<Transform>";
baseStrings[734] = "Prefab";
baseStrings[741] = "Quaternionf";
baseStrings[753] = "Rectf";
baseStrings[759] = "RectInt";
baseStrings[767] = "RectOffset";
baseStrings[778] = "second";
baseStrings[785] = "set";
baseStrings[789] = "short";
baseStrings[795] = "size";
baseStrings[800] = "SInt16";
baseStrings[814] = "int64";
baseStrings[807] = "SInt32";
baseStrings[814] = "SInt64";
baseStrings[821] = "SInt8";
baseStrings[827] = "staticvector";
baseStrings[840] = "string";
baseStrings[847] = "TextAsset";
baseStrings[857] = "TextMesh";
baseStrings[866] = "Texture";
baseStrings[874] = "Texture2D";
baseStrings[884] = "Transform";
baseStrings[894] = "TypelessData";
baseStrings[907] = "UInt16";
baseStrings[914] = "UInt32";
baseStrings[921] = "UInt64";
baseStrings[928] = "UInt8";
baseStrings[934] = "UInt";
baseStrings[934] = "unsigned int";
baseStrings[947] = "unsigned long long";
baseStrings[966] = "unsigned short";
baseStrings[981] = "vector";
baseStrings[988] = "Vector2f";
baseStrings[997] = "Vector3f";
baseStrings[1006] = "Vector4f";
baseStrings[1015] = "m_ScriptingClassIdentifier";
#endregion
int varCount = a_Stream.ReadInt32();
@ -356,8 +397,8 @@ namespace Unity_Studio
a_Stream.Position += varCount * 24;
string varStrings = Encoding.UTF8.GetString(a_Stream.ReadBytes(stringSize));
string className = "";
StringBuilder classVarStr = new StringBuilder();
var classVarStr = new StringBuilder();
var classVarStr2 = new StringBuilder();//用来export
//build Class Structures
a_Stream.Position -= varCount * 24 + stringSize;
for (int i = 0; i < varCount; i++)
@ -385,14 +426,18 @@ namespace Unity_Studio
int num1 = a_Stream.ReadInt32();
if (index == 0) { className = varTypeStr + " " + varNameStr; }
else { classVarStr.AppendFormat("{0}{1} {2} {3}\r\n", (new string('\t', level - 1)), varTypeStr, varNameStr, size); }
else
{
classVarStr.AppendFormat("{0}{1} {2} {3}\r\n", (new string('\t', level - 1)), varTypeStr, varNameStr, size);
classVarStr2.AppendFormat("{0}\t{1}\t{2}\r\n", level - 1, varTypeStr, varNameStr);
}
//for (int t = 0; t < level; t++) { Debug.Write("\t"); }
//Debug.WriteLine(varTypeStr + " " + varNameStr + " " + size);
}
a_Stream.Position += stringSize;
var aClass = new ClassStrStruct() { ID = classID, Text = className, members = classVarStr.ToString() };
var aClass = new ClassStrStruct() { ID = classID, Text = className, members = classVarStr.ToString(), members2 = classVarStr2.ToString() };
aClass.SubItems.Add(classID.ToString());
ClassStructures.Add(classID, aClass);
}

View File

@ -10,6 +10,7 @@ namespace Unity_Studio
{
public int ID;
public string members;
public string members2;
}
public class ClassIDReference

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
@ -21,41 +20,9 @@ namespace Unity_Studio
public EndianStream(Stream stream, EndianType endian) : base(stream) { }
~EndianStream()
{
Dispose();
}
public long Position { get { return base.BaseStream.Position; } set { base.BaseStream.Position = value; } }
public new void Dispose()
{
base.Dispose();
}
public override bool ReadBoolean()
{
return base.ReadBoolean();
}
public override byte ReadByte()
{
try
{
return base.ReadByte();
}
catch
{
return 0;
}
}
public override char ReadChar()
{
return base.ReadChar();
}
public override Int16 ReadInt16()
public override short ReadInt16()
{
if (endian == EndianType.BigEndian)
{
@ -77,7 +44,7 @@ namespace Unity_Studio
else return base.ReadInt32();
}
public override Int64 ReadInt64()
public override long ReadInt64()
{
if (endian == EndianType.BigEndian)
{
@ -88,7 +55,7 @@ namespace Unity_Studio
else return base.ReadInt64();
}
public override UInt16 ReadUInt16()
public override ushort ReadUInt16()
{
if (endian == EndianType.BigEndian)
{
@ -99,7 +66,7 @@ namespace Unity_Studio
else return base.ReadUInt16();
}
public override UInt32 ReadUInt32()
public override uint ReadUInt32()
{
if (endian == EndianType.BigEndian)
{
@ -110,7 +77,7 @@ namespace Unity_Studio
else return base.ReadUInt32();
}
public override UInt64 ReadUInt64()
public override ulong ReadUInt64()
{
if (endian == EndianType.BigEndian)
{
@ -121,7 +88,7 @@ namespace Unity_Studio
else return base.ReadUInt64();
}
public override Single ReadSingle()
public override float ReadSingle()
{
if (endian == EndianType.BigEndian)
{
@ -132,7 +99,7 @@ namespace Unity_Studio
else return base.ReadSingle();
}
public override Double ReadDouble()
public override double ReadDouble()
{
if (endian == EndianType.BigEndian)
{
@ -143,14 +110,9 @@ namespace Unity_Studio
else return base.ReadDouble();
}
public override string ReadString()
{
return base.ReadString();
}
public string ReadASCII(int length)
{
return ASCIIEncoding.ASCII.GetString(base.ReadBytes(length));
return Encoding.ASCII.GetString(base.ReadBytes(length));
}
public void AlignStream(int alignment)

View File

@ -27,7 +27,7 @@ namespace Unity_Studio
ClassStrStruct classStructure;
if (sourceFile.ClassStructures.TryGetValue(preloadData.Type1, out classStructure))
{
var member = classStructure.members;
var member = classStructure.members2;
var strs = member.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
var sb = new StringBuilder();
Read(sb, strs, a_Stream);
@ -64,72 +64,83 @@ namespace Unity_Studio
{
for (int i = 0; i < strs.Length; i++)
{
var strs2 = strs[i].Split(' ');
var str = strs2[0].Split('\t');
var level = str.Length - 1;
var varTypeStr = str.Last();
var varNameStr = strs2[1];
if (varTypeStr == "int")
var strs2 = strs[i].Split('\t');
var level = int.Parse(strs2[0]);
var varTypeStr = strs2[1];
var varNameStr = strs2[2];
if (varTypeStr == "SInt8")//sbyte
{
var value = a_Stream.ReadInt32();
var 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 == "UInt")
{
var 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 == "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);
}
else if (varTypeStr == "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);
}
else if (varTypeStr == "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);
}
else if (varTypeStr == "SInt16")
{
var 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 == "UInt8")
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);
}
else if (varTypeStr == "float")
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
else if (varTypeStr == "bool")
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);
}
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);
}
else if (varTypeStr == "string")
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);
i += 3;//skip
}
else if (varTypeStr == "Array")
else if (varTypeStr == "Array")//Array
{
sb.AppendFormat("{0}{1} {2}\r\n", (new string('\t', level)), varTypeStr, varNameStr);
var size = a_Stream.ReadInt32();
@ -154,9 +165,8 @@ namespace Unity_Studio
List<string> strs3 = new List<string>();
for (int i = index + 2; i < strs.Length; i++)//skip int size
{
var strs2 = strs[i].Split(' ');
var str = strs2[0].Split('\t');
var level2 = str.Length - 1;
var strs2 = strs[i].Split('\t');
var level2 = int.Parse(strs2[0]);
if (level2 <= level)
{
return strs3.ToArray();