private void ReadStructField(BfsStructField field, TreeNode parent)
{
if (field.FieldType is BfsFunctionType)
{
BfsFunctionType functionType = field.FieldType as BfsFunctionType;
if (functionType.FunctionName == "ascii")
AddFileLine(field.Name + " " + reader.ReadASCIIString(functionType.FunctionArgument), field.FieldType, parent);
}
if (field.FieldType is BfsPrimitiveType)
{
BfsPrimitiveType primitiveType = field.FieldType as BfsPrimitiveType;
switch (primitiveType.PrimitiveType)
{
case BfsPrimitiveTypeEnum.Bool:
AddFileLine(field.Name + " " + reader.ReadBool(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Sbyte:
AddFileLine(field.Name + " " + reader.ReadSbyte(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Ubyte:
AddFileLine(field.Name + " " + reader.ReadUbyte(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Int:
AddFileLine(field.Name + " " + reader.ReadInt(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Uint:
AddFileLine(field.Name + " " + reader.ReadUint(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Short:
AddFileLine(field.Name + " " + reader.ReadShort(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Ushort:
AddFileLine(field.Name + " " + reader.ReadUshort(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Long:
AddFileLine(field.Name + " " + reader.ReadLong(), field.FieldType, parent);
break;
case BfsPrimitiveTypeEnum.Ulong:
AddFileLine(field.Name + " " + reader.ReadUlong(), field.FieldType, parent);
break;
}
}
if (field.FieldType is BfsNamedType)
{
BfsNamedType namedType = field.FieldType as BfsNamedType;
if (namedType.DataBlock is BfsStruct)
{
BfsStruct subStruct = namedType.DataBlock as BfsStruct;
TreeNode newNode = new TreeNode(subStruct.Name);
parent.Nodes.Add(newNode);
ReadDataBlock(namedType.DataBlock, newNode);
}
}
}