public override void GenerateAsTextField(StringBuilder b, int pad, FieldDescriptor f, string fieldname)
 {
     b.Append(' ', pad); b.AppendLine("for(int loop" + pad + " = 0;loop" + pad + " < _" + fieldname + ".Length;loop" + pad + "++)");
     b.Append(' ', pad); b.AppendLine("{");
     f.SubType.GenerateAsTextField(b, pad, f, "_" + fieldname + "[loop" + pad + "]");
     b.Append(' ', pad); b.AppendLine("}");
 }
        public override void GenerateFieldFileRead(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname, FieldDescriptor[] fields)
        {
            b.Append(' ', pad); b.AppendLine("//still checking variablearrays");
            b.Append(' ', pad); b.AppendLine(fieldname + " = new List<" + f.SubType.Name + ">();");
            var ser = fields.First((w) => w.Offset == f.Offset + f.VariableOffset);

            var tfield = "temp" + pad + "_" + fieldname;

            int subfieldsize = 1;
            if (f.SubType is StructureTypeDescriptor)
            {
                subfieldsize = (f.SubType as StructureTypeDescriptor).Fields.Last().Offset;
            }
            else
            {
                subfieldsize = (f.SubType as BasicTypeDescriptor).TypeSize;
            }

            b.Append(' ', pad); b.AppendLine("for(int i = 0; i < (int)(" + ser.Name + ".Field1 / "+subfieldsize.ToString()+"); i++)");
            b.Append(' ', pad); b.AppendLine("{");
            b.Append(' ', pad); b.AppendLine(bitBufferName + ".Position = " + ser.Name + ".Field0 + 16 + (" + subfieldsize.ToString()+ "*i) ;");
            b.Append(' ', pad + 4); b.AppendLine(f.SubType.Name + " " + tfield + ";");
            f.SubType.GenerateFieldFileRead(b, pad + 4, f, bitBufferName, tfield, fields);
            b.Append(' ', pad + 4); b.AppendLine("_" + fieldname + ".Add(" + tfield + ");");
            b.Append(' ', pad); b.AppendLine("}");
        }
Esempio n. 3
0
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     if (f.HasMinMax)
         throw new NotImplementedException();
     b.Append(' ', pad);
     b.AppendLine(bitBufferName + ".WriteInt64(" + f.EncodedBits + ", " + f.GetFieldName() + ");");
 }
Esempio n. 4
0
        public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname)
        {
            if (f.HasMinMax)
                throw new NotImplementedException();

            b.Append(' ', pad); b.AppendLine(fieldname + " = (ushort)" + bitBufferName + ".ReadInt(" + f.EncodedBits + ");");
        }
        public override void GenerateFieldFileRead(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname, FieldDescriptor[] fields)
        {
            b.Append(' ', pad); b.Append(fieldname + " = ");

            b.Append(bitBufferName + ".ReadValueS32()");
            b.AppendLine(";");
        }
Esempio n. 6
0
 public override void GenerateAsTextField(StringBuilder b, int pad, FieldDescriptor f, string fieldname)
 {
     b.Append(' ', pad); b.AppendLine("for(int loop" + pad + " = 0; loop" + pad + " < _" + fieldname + ".Count; loop" + pad + "++)");
     b.Append(' ', pad); b.AppendLine("{");
     b.Append(' ', pad + 4);
     var fname = "_" + fieldname + "[loop" + pad + "]";
     b.AppendLine("b.Append(' ', pad); b.AppendLine(\"" + "_" + fieldname + "[loop" + pad + "]" + ":\" + " + fname + ".ToString() );");
     b.Append(' ', pad); b.AppendLine("}");
 }
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname)
 {
     b.Append(' ', pad); b.AppendLine("//still checking variablearrays");
     b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteInt(0, _"+ fieldname+".Count);");
     b.Append(' ', pad); b.AppendLine("for(int loop" + pad + " = 0; loop" + pad + " < _" + fieldname + ".Count; loop" + pad + "++)");
     b.Append(' ', pad); b.AppendLine("{");
     f.SubType.GenerateEncodeBitBuffer(b, pad + 4, f, bitBufferName, "_" + fieldname + "[loop" + pad + "]");
     b.Append(' ', pad); b.AppendLine("}");
 }
Esempio n. 8
0
 public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     if (f.HasMinMax)
         throw new NotImplementedException();
     if (f.Float16Encoding)
         throw new NotImplementedException();
     if (f.EncodedBits != 32)
         throw new NotImplementedException();
     b.Append(' ', pad);
     b.AppendLine(f.GetFieldName() + " = " + bitBufferName + ".ReadFloat32();");
 }
Esempio n. 9
0
        public override void LoadFields(FieldDescriptor[] fields)
        {
            if (fields.Length != 3 ||
                fields[0].Type.Name != "DT_OPTIONAL" || fields[0].SubType.Name != "DT_INT" ||
                fields[1].Type.Name != "DT_INT" ||
                fields[2].Type != null)
                throw new Exception("Unexpected fields in NetAttributeKeyValue structure.");
            fields[1].Type = AttributeFieldType.Instance;

            base.LoadFields(fields);
        }
Esempio n. 10
0
        public override void LoadFields(FieldDescriptor[] fields)
        {
            if(fields[0].Type.Name != "RequiredMessageHeader")
                throw new Exception("Expected RequiredMessageHeader.");
            fields = fields.Skip(1).ToArray();

            for (int i = 0; i < fields.Length; i++)
                fields[i].Index = i;

            base.LoadFields(fields);
        }
Esempio n. 11
0
 public override void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     if (f.HasMinMax)
         throw new NotImplementedException();
     if (f.Float16Encoding)
         throw new NotImplementedException();
     if (f.EncodedBits != 32)
         throw new NotImplementedException();
     var fieldName = f.GetFieldName();
     b.Append(' ', pad); b.AppendLine("if(" + fieldName + ".HasValue)");
     b.Append(' ', pad+4); b.AppendLine(bitBufferName + ".WriteFloat32(" + f.GetFieldName() + ".Value);");
 }
Esempio n. 12
0
        public override void GenerateFieldFileRead(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname, FieldDescriptor[] fields)
        {
            b.Append(' ', pad); b.AppendLine(fieldname + " = new " + f.SubType.Name + "["+f.ArrayLength+"];");

            var tfield = "temp" + pad + "_" + fieldname;
            var lname = "loop"+pad.ToString();
            b.Append(' ', pad); b.AppendLine("for(int " + lname + "=0; " + lname + " < " + f.ArrayLength + "; " + lname + "++ )");
            b.Append(' ', pad); b.AppendLine("{");
            b.Append(' ', pad + 4); b.AppendLine(f.SubType.Name + " " + tfield + ";");
            f.SubType.GenerateFieldFileRead(b, pad + 4, f, bitBufferName, tfield, fields);
            b.Append(' ', pad + 4); b.AppendLine("_" + fieldname + "[" + lname + "] = " + tfield + ";");
            b.Append(' ', pad); b.AppendLine("}");
        }
        public override void GenerateFixedArrayEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname)
        {
            b.Append(' ', pad); b.AppendLine("//still checking fixedarrays on basictypes");

            if (f.HasArrayLengthOffset)
            {
                b.Append(' ', pad);
                b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits2 + ", " + fieldname + ".Length);");
            }

            b.Append(' ', pad); b.AppendLine("for(int loop" + pad + " = 0;loop" + pad + " < _" + fieldname + ".Length;loop" + pad + "++)");
            b.Append(' ', pad); b.AppendLine("{");
            f.SubType.GenerateEncodeBitBuffer(b, pad, f, bitBufferName, "_" + fieldname + "[loop" + pad + "]");
            b.Append(' ', pad); b.AppendLine("}");
        }
Esempio n. 14
0
        public override void GenerateFieldFileRead(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname, FieldDescriptor[] fields)
        {
            b.Append(' ', pad); b.AppendLine("//still checking variablearrays");
            b.Append(' ', pad); b.AppendLine(fieldname + " = new List<byte>();");
            var ser = fields.First((w) => w.Offset == f.Offset + f.VariableOffset);

            var tfield = "temp" + pad + "_" + fieldname;

            int subfieldsize = 1;

            b.Append(' ', pad); b.AppendLine("for(int i = 0; i < (int)(" + ser.GetFieldName() + ".Field1 / " + subfieldsize.ToString() + "); i++)");
            b.Append(' ', pad); b.AppendLine("{");
            b.Append(' ', pad + 4); b.AppendLine(bitBufferName + ".Position = " + ser.GetFieldName() + ".Field0 + 16 + (" + subfieldsize.ToString() + "*i) ;");
            b.Append(' ', pad + 4); b.AppendLine("byte " + tfield + ";");
            b.Append(' ', pad + 4); b.AppendLine(tfield + " = (byte)stream.ReadByte();");
            b.Append(' ', pad + 4); b.AppendLine("_" + fieldname + ".Add(" + tfield + ");");
            b.Append(' ', pad); b.AppendLine("}");
        }
Esempio n. 15
0
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname)
 {
     if (f.HasMinMax)
     {
         b.Append(' ', pad);
         b.AppendLine("minmax is still unsupported on floats.");
     }
     if (
        (f.Float16Encoding) ||
        (f.EncodedBits != 32)
         )
     {
         b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteFloat(" + fieldname + "," + f.EncodedBits.ToString() + ");");
     }
     if (f.EncodedBits == 32)
     {
         b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteFloat32(" + fieldname + ");");
     }
 }
Esempio n. 16
0
        public override void GenerateFieldFileRead(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname, FieldDescriptor[] fields)
        {
            b.Append(' ', pad); b.AppendLine("//still checking cstrings");
            var ser = fields.First((w) => w.Offset == f.Offset + f.VariableOffset);

            var tfield = "temp" + pad + "_" + fieldname;

            int subfieldsize = 1;
            if (f.SubType is StructureTypeDescriptor)
            {
                subfieldsize = (f.SubType as StructureTypeDescriptor).Fields.Last().Offset;
            }
            else
            {
                subfieldsize = (f.SubType as BasicTypeDescriptor).TypeSize;
            }

            b.Append(' ', pad); b.AppendLine("stream.Position = "+ser.Name + ".Field0 + 16;");
            b.Append(' ', pad); b.AppendLine(fieldname + " = stream.ReadString((uint)" + ser.Name + ".Field1);");
        }
Esempio n. 17
0
 public override void GenerateField(StringBuilder b, int pad, FieldDescriptor f)
 {
     if (f.HasMinMax)
     {
         if (f.Min == 0 && f.Max == 1)
         {
             b.Append(' ', pad); b.AppendLine("public bool " + f.GetFieldName() + ";");
         }
         else
         {
             var name = f.GetFieldName();
             b.Append(' ', pad); b.AppendLine("int _" + name + ";");
             b.Append(' ', pad); b.AppendLine("public int " + name + " { get { return _" + name + "; } set { if(value < " + f.Min.ToMaybeHexString(1024) + " || value > " + f.Max.ToMaybeHexString(1024) + ") throw new ArgumentOutOfRangeException(); _" + name + " = value; } }");
         }
     }
     else
     {
         b.Append(' ', pad); b.AppendLine("public int " + f.GetFieldName() + ";");
     }
 }
Esempio n. 18
0
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName, string fieldname)
 {
     if (f.HasMinMax)
     {
         if (f.Min == 0 && f.Max == 1)
         {
             b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteBool(" + fieldname + ");");
         }
         else
         {
             b.Append(' ', pad);
             if(f.Min != 0)
                 b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + fieldname + " - (" + f.Min + "));");
             else
                 b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + fieldname + ");");
         }
     }
     else
     {
         b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + fieldname + ");");
     }
 }
Esempio n. 19
0
 public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     var fieldName = f.GetFieldName();
     b.Append(' ', pad); b.Append(fieldName + " = ");
     if (f.HasMinMax)
     {
         if (f.Min == 0 && f.Max == 1)
         {
             b.AppendLine(bitBufferName + ".ReadBool();");
         }
         else
         {
             if(f.Min != 0)
                 b.AppendLine(bitBufferName + ".ReadInt(" + f.EncodedBits + ") + (" + f.Min + ");");
             else
                 b.AppendLine(bitBufferName + ".ReadInt(" + f.EncodedBits + ");");
         }
     }
     else
     {
         b.AppendLine(bitBufferName + ".ReadInt(" + f.EncodedBits + ");");
     }
 }
Esempio n. 20
0
 public override void GenerateFixedArrayField(StringBuilder b, int pad, FieldDescriptor f)
 {
     b.Append(' ', pad); b.AppendLine("int[] _" + f.GetFieldName() + ";");
     b.Append(' ', pad);
     b.AppendLine("public int[] " + f.GetFieldName() + " { get { return _" + f.GetFieldName() + "; } set { if(value != null && value.Length " + (f.HasArrayLengthOffset ? "> " : "!= ") + f.ArrayLength + ") throw new ArgumentOutOfRangeException(); _" + f.GetFieldName() + " = value; } }");
 }
Esempio n. 21
0
 public virtual void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     throw new NotImplementedException();
 }
Esempio n. 22
0
 public override void GenerateOptionalField(StringBuilder b, int pad, FieldDescriptor f)
 {
     b.Append(' ', pad); b.AppendLine("public float? " + f.GetFieldName() + ";");
 }
Esempio n. 23
0
 public virtual void LoadFields(FieldDescriptor[] fields) { throw new Exception("This type doesnt handle fields."); }
Esempio n. 24
0
 public override void GenerateOptionalParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine("if(" + bitBufferName + ".ReadBool())");
     GenerateParseBitBuffer(b, pad + 4, f, bitBufferName);
 }
Esempio n. 25
0
 public override void GenerateOptionalField(StringBuilder b, int pad, FieldDescriptor f)
 {
     b.Append(' ', pad); b.AppendLine("public float? " + f.GetFieldName() + ";");
 }
Esempio n. 26
0
        public override void GenerateFixedArrayEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
        {
            var fieldName = f.GetFieldName();

            if (f.HasArrayLengthOffset)
            {
                b.Append(' ', pad);
                b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits2 + ", _" + f.GetFieldName() + ".Length);");
            }

            b.Append(' ', pad); b.AppendLine("for(int i = 0;i < _" + fieldName + ".Length;i++) _" + fieldName + "[i].Encode(" + bitBufferName + ");");
        }
Esempio n. 27
0
 public override void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine("if(" + f.GetFieldName() + " != null)");
     b.Append(' ', pad + 4); b.AppendLine(bitBufferName + ".WriteCharArray(" + f.ArrayLength + ", " + f.GetFieldName() + ");");
 }
Esempio n. 28
0
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     f.SubType.GenerateFixedArrayEncodeBitBuffer(b, pad, f, bitBufferName);
 }
Esempio n. 29
0
 public override void GenerateField(StringBuilder b, int pad, FieldDescriptor f)
 {
     f.SubType.GenerateFixedArrayField(b, pad, f);
 }
Esempio n. 30
0
        public override void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
        {
            if (f.HasMinMax)
            {
                throw new NotImplementedException();
            }
            if (f.Float16Encoding)
            {
                throw new NotImplementedException();
            }
            if (f.EncodedBits != 32)
            {
                throw new NotImplementedException();
            }
            var fieldName = f.GetFieldName();

            b.Append(' ', pad); b.AppendLine("if(" + fieldName + ".HasValue)");
            b.Append(' ', pad + 4); b.AppendLine(bitBufferName + ".WriteFloat32(" + f.GetFieldName() + ".Value);");
        }
Esempio n. 31
0
 public override void GenerateOptionalParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine("if(" + bitBufferName + ".ReadBool())");
     GenerateParseBitBuffer(b, pad + 4, f, bitBufferName);
 }
Esempio n. 32
0
        public override void GenerateFixedArrayEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
        {
            if (f.HasMinMax)
            {
                throw new NotImplementedException();
            }

            var fieldName = f.GetFieldName();

            if (f.HasArrayLengthOffset)
            {
                b.Append(' ', pad);
                b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits2 + ", " + f.GetFieldName() + ".Length);");
            }
            b.Append(' ', pad); b.AppendLine("for(int i = 0;i < _" + fieldName + ".Length;i++) " + bitBufferName + ".WriteInt(" + f.EncodedBits + ", _" + fieldName + "[i]);");
        }
Esempio n. 33
0
 public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad);
     b.AppendLine(f.GetFieldName() + " = " + bitBufferName + ".ReadCharArray(" + f.ArrayLength + ");");
 }
Esempio n. 34
0
 public override void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine("if(" + f.GetFieldName() + ".HasValue)");
     b.Append(' ', pad + 4);
     if (f.HasMinMax)
     {
         if (f.Min == 0 && f.Max == 1)
         {
             b.AppendLine(bitBufferName + ".WriteBool(" + f.GetFieldName() + ".Value);");
         }
         else
         {
             if (f.Min != 0)
             {
                 b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + f.GetFieldName() + ".Value - (" + f.Min + "));");
             }
             else
             {
                 b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + f.GetFieldName() + ".Value);");
             }
         }
     }
     else
     {
         b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + f.GetFieldName() + ".Value);");
     }
 }
Esempio n. 35
0
 public override void GenerateOptionalField(StringBuilder b, int pad, FieldDescriptor f)
 {
     GenerateField(b, pad, f);
 }
Esempio n. 36
0
 public override void LoadFields(FieldDescriptor[] fields)
 {
     Fields = fields;
 }
Esempio n. 37
0
 public override void GenerateField(StringBuilder b, int pad, FieldDescriptor f)
 {
     b.Append(' ', pad); b.AppendLine("public string _" + f.GetFieldName() + ";");
     b.Append(' ', pad); b.AppendLine("public string " + f.GetFieldName() + " { get { return _" + f.GetFieldName() + "; } set { if(value != null && value.Length > " + f.ArrayLength + ") throw new ArgumentOutOfRangeException(); _" + f.GetFieldName() + " = value; } }");
 }
Esempio n. 38
0
        public override void GenerateFixedArrayParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
        {
            if (f.HasMinMax)
            {
                throw new NotImplementedException();
            }

            var fieldName = f.GetFieldName();

            b.Append(' ', pad);
            if (f.HasArrayLengthOffset)
            {
                b.AppendLine(fieldName + " = new int[" + bitBufferName + ".ReadInt(" + f.EncodedBits2 + ")];");
            }
            else
            {
                b.AppendLine(fieldName + " = new int[" + f.ArrayLength + "];");
            }
            b.Append(' ', pad); b.AppendLine("for(int i = 0;i < _" + fieldName + ".Length;i++) _" + fieldName + "[i] = " + bitBufferName + ".ReadInt(" + f.EncodedBits + ");");
        }
Esempio n. 39
0
 public virtual void GenerateOptionalEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName) { throw new NotImplementedException(); }
Esempio n. 40
0
 public override void GenerateEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine(bitBufferName + ".WriteInt(" + f.EncodedBits + ", " + f.GetFieldName() + ".Id);");
 }
Esempio n. 41
0
 public override void GenerateField(StringBuilder b, int pad, FieldDescriptor f)
 {
     b.Append(' ', pad); b.AppendLine("public GameAttribute " + f.GetFieldName() + ";");
 }
Esempio n. 42
0
 public virtual void GenerateOptionalField(StringBuilder b, int pad, FieldDescriptor f) { throw new NotImplementedException(); }
Esempio n. 43
0
 public virtual void GenerateFixedArrayEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     b.Append(' ', pad); b.AppendLine("public byte[" + f.ArrayLength + "] _" + f.GetFieldName() + ";");
     b.Append(' ', pad); b.AppendLine("public byte[" + f.ArrayLength + "] " + f.GetFieldName() + " { get { return _" + f.GetFieldName() + "; } set { _" + f.GetFieldName() + " = value; } }");
     //throw new NotImplementedException();
 }
Esempio n. 44
0
 public virtual void GenerateFixedArrayEncodeBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName) 
 {
     b.Append(' ', pad); b.AppendLine("public byte[" + f.ArrayLength + "] _" + f.GetFieldName() + ";");
     b.Append(' ', pad); b.AppendLine("public byte[" + f.ArrayLength + "] " + f.GetFieldName() + " { get { return _" + f.GetFieldName() + "; } set { _" + f.GetFieldName() + " = value; } }");
     //throw new NotImplementedException(); 
 }
Esempio n. 45
0
 public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     f.SubType.GenerateOptionalParseBitBuffer(b, pad, f, bitBufferName);
 }
Esempio n. 46
0
        static TypeDescriptor DiscoverMessageDescriptors(Mem32 mem, Dictionary<int, TypeDescriptor> table, int offset)
        {
            if (offset == 0)
                return null;
            string name = mem[offset + 4].CStringPtr;
            int unkValue = mem[offset + 8].Int32;
            var fields = mem[offset + 12].Ptr;

            if (fields.Offset == 0)
            {
                var basicType = TypeDescriptor.AllocateBasicType(name);
                basicType.Name = name;
                basicType.UnkValue = unkValue;
                table.Add(offset, basicType);
                return basicType;
            }

            StructureTypeDescriptor typeDesc;

            GameMessageInfo gmi;

            if (_gameMessageLookUp.TryGetValue(offset, out gmi))
            {
                var gm = TypeDescriptor.AllocateGameMessage(name);
                gm.Size = gmi.Size;
                gm.NetworkIds = gmi.Opcodes.ToArray();
                typeDesc = gm;
            }
            else
                typeDesc = TypeDescriptor.AllocateStructure(name);
            typeDesc.Name = name;
            typeDesc.UnkValue = unkValue;

            table.Add(offset, typeDesc);

            List<FieldDescriptor> list = new List<FieldDescriptor>();
            for (; ; )
            {
                FieldDescriptor f = new FieldDescriptor();
                f.Name = fields.CStringPtr;
                int type = fields[4].Int32;
                if (mem[type + 4].CStringPtr != "DT_NULL" && !table.TryGetValue(type, out f.Type))
                    f.Type = DiscoverMessageDescriptors(mem, table, type);
                f.Offset = fields[8].Int32;
                var defaultValuePtr = fields[12].Ptr;
                f.Min = fields[0x10].Int32;
                f.Max = fields[0x14].Int32;
                f.Flags = fields[0x18].Int32;
                type = fields[0x1C].Int32;
                if (mem[type + 4].CStringPtr != "DT_NULL" && !table.TryGetValue(type, out f.SubType))
                    f.SubType = DiscoverMessageDescriptors(mem, table, type);
                f.VariableOffset = fields[0x20].Int32;
                f.ArrayLength = fields[0x24].Int32;
                f.ArrayLengthOffset = fields[0x28].Int32;
                f.EncodedBits = fields[0x2C].UInt16;
                f.EncodedBits2 = fields[0x2E].UInt16;
                f.SnoType = fields[0x30].Int32;
                f.TagMapRelated = fields[0x34].Int32;
                var enumFields = fields[0x38].Ptr;
                if (enumFields.Offset != 0)
                {
                    List<Tuple<string, int>> enums = new List<Tuple<string, int>>();
                    for (; ; )
                    {
                        if (enumFields[4].Int32 == 0)
                            break;
                        enums.Add(new Tuple<string, int>(enumFields[4].CStringPtr, enumFields.Int32));
                        enumFields = enumFields[8];
                    }
                    f.EnumFields = enums.ToArray();
                }
                f.FlagIndex = fields[0x3C].Int32;
                int funcA = fields[0x40].Int32; // TODO
                int funcB = fields[0x44].Int32; // TODO
                f.DspIndex = fields[0x48].Int32;

                var str = fields[0x4C].CString;
                // 0x4C 64 bytes, unused string
                //if (str != string.Empty)  Console.WriteLine(str);

                list.Add(f);
                if (fields.Int32 == 0)
                    break;
                fields = fields[140];

            }


            typeDesc.Fields = list.ToArray();
            return typeDesc;
        }
Esempio n. 47
0
 public virtual void GenerateOptionalField(StringBuilder b, int pad, FieldDescriptor f)
 {
     throw new NotImplementedException();
 }
Esempio n. 48
0
 public override void GenerateParseBitBuffer(StringBuilder b, int pad, FieldDescriptor f, string bitBufferName)
 {
     f.SubType.GenerateFixedArrayParseBitBuffer(b, pad, f, bitBufferName);
 }
Esempio n. 49
0
 public override void GenerateField(StringBuilder b, int pad, FieldDescriptor f)
 {
     f.SubType.GenerateFixedArrayField(b, pad, f);
 }