Skip to content

Commit d8515fd

Browse files
committed
fix valuebuilder not correctly making arrays
1 parent c07daf0 commit d8515fd

1 file changed

Lines changed: 102 additions & 92 deletions

File tree

Lines changed: 102 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,102 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
6-
namespace AssetsTools.NET.Extra
7-
{
8-
public class ValueBuilder
9-
{
10-
public static AssetTypeValueField DefaultValueFieldFromArrayTemplate(AssetTypeValueField arrayField)
11-
{
12-
return DefaultValueFieldFromArrayTemplate(arrayField.templateField);
13-
}
14-
public static AssetTypeValueField DefaultValueFieldFromArrayTemplate(AssetTypeTemplateField arrayField)
15-
{
16-
if (!arrayField.isArray)
17-
return null;
18-
19-
AssetTypeTemplateField templateField = arrayField.children[1];
20-
return DefaultValueFieldFromTemplate(templateField);
21-
}
22-
23-
public static AssetTypeValueField DefaultValueFieldFromTemplate(AssetTypeTemplateField templateField)
24-
{
25-
AssetTypeTemplateField[] templateChildren = templateField.children;
26-
AssetTypeValueField[] valueChildren;
27-
if (templateField.valueType == EnumValueTypes.Array ||
28-
templateField.valueType == EnumValueTypes.ByteArray ||
29-
templateField.valueType == EnumValueTypes.String)
30-
{
31-
valueChildren = new AssetTypeValueField[0];
32-
}
33-
else
34-
{
35-
valueChildren = new AssetTypeValueField[templateChildren.Length];
36-
for (int i = 0; i < templateChildren.Length; i++)
37-
{
38-
valueChildren[i] = DefaultValueFieldFromTemplate(templateChildren[i]);
39-
}
40-
}
41-
42-
AssetTypeValue defaultValue = DefaultValueFromTemplate(templateField);
43-
44-
AssetTypeValueField root = new AssetTypeValueField()
45-
{
46-
children = valueChildren, childrenCount = valueChildren.Length,
47-
templateField = templateField,
48-
value = defaultValue
49-
};
50-
return root;
51-
}
52-
53-
public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField)
54-
{
55-
object obj;
56-
switch (templateField.valueType)
57-
{
58-
case EnumValueTypes.Int8:
59-
obj = (sbyte)0; break;
60-
case EnumValueTypes.UInt8:
61-
obj = (byte)0; break;
62-
case EnumValueTypes.Bool:
63-
obj = false; break;
64-
case EnumValueTypes.Int16:
65-
obj = (short)0; break;
66-
case EnumValueTypes.UInt16:
67-
obj = (ushort)0; break;
68-
case EnumValueTypes.Int32:
69-
obj = 0; break;
70-
case EnumValueTypes.UInt32:
71-
obj = 0u; break;
72-
case EnumValueTypes.Int64:
73-
obj = 0L; break;
74-
case EnumValueTypes.UInt64:
75-
obj = 0uL; break;
76-
case EnumValueTypes.Float:
77-
obj = 0f; break;
78-
case EnumValueTypes.Double:
79-
obj = 0d; break;
80-
case EnumValueTypes.String:
81-
obj = string.Empty; break;
82-
case EnumValueTypes.Array:
83-
obj = new AssetTypeArray(); break;
84-
case EnumValueTypes.ByteArray:
85-
obj = new AssetTypeByteArray(); break;
86-
default:
87-
obj = null; break;
88-
}
89-
return new AssetTypeValue(templateField.valueType, obj);
90-
}
91-
}
92-
}
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace AssetsTools.NET.Extra
7+
{
8+
public class ValueBuilder
9+
{
10+
public static AssetTypeValueField DefaultValueFieldFromArrayTemplate(AssetTypeValueField arrayField)
11+
{
12+
return DefaultValueFieldFromArrayTemplate(arrayField.templateField);
13+
}
14+
public static AssetTypeValueField DefaultValueFieldFromArrayTemplate(AssetTypeTemplateField arrayField)
15+
{
16+
if (!arrayField.isArray)
17+
return null;
18+
19+
AssetTypeTemplateField templateField = arrayField.children[1];
20+
return DefaultValueFieldFromTemplate(templateField);
21+
}
22+
23+
public static AssetTypeValueField DefaultValueFieldFromTemplate(AssetTypeTemplateField templateField)
24+
{
25+
AssetTypeTemplateField[] templateChildren = templateField.children;
26+
AssetTypeValueField[] valueChildren;
27+
if (templateField.isArray ||
28+
templateField.valueType == EnumValueTypes.String)
29+
{
30+
valueChildren = new AssetTypeValueField[0];
31+
}
32+
else
33+
{
34+
valueChildren = new AssetTypeValueField[templateChildren.Length];
35+
for (int i = 0; i < templateChildren.Length; i++)
36+
{
37+
valueChildren[i] = DefaultValueFieldFromTemplate(templateChildren[i]);
38+
}
39+
}
40+
41+
AssetTypeValue defaultValue = DefaultValueFromTemplate(templateField);
42+
43+
AssetTypeValueField root = new AssetTypeValueField()
44+
{
45+
children = valueChildren,
46+
childrenCount = valueChildren.Length,
47+
templateField = templateField,
48+
value = defaultValue
49+
};
50+
return root;
51+
}
52+
53+
public static AssetTypeValue DefaultValueFromTemplate(AssetTypeTemplateField templateField)
54+
{
55+
object obj;
56+
switch (templateField.valueType)
57+
{
58+
case EnumValueTypes.Int8:
59+
obj = (sbyte)0; break;
60+
case EnumValueTypes.UInt8:
61+
obj = (byte)0; break;
62+
case EnumValueTypes.Bool:
63+
obj = false; break;
64+
case EnumValueTypes.Int16:
65+
obj = (short)0; break;
66+
case EnumValueTypes.UInt16:
67+
obj = (ushort)0; break;
68+
case EnumValueTypes.Int32:
69+
obj = 0; break;
70+
case EnumValueTypes.UInt32:
71+
obj = 0u; break;
72+
case EnumValueTypes.Int64:
73+
obj = 0L; break;
74+
case EnumValueTypes.UInt64:
75+
obj = 0uL; break;
76+
case EnumValueTypes.Float:
77+
obj = 0f; break;
78+
case EnumValueTypes.Double:
79+
obj = 0d; break;
80+
case EnumValueTypes.String:
81+
obj = string.Empty; break;
82+
case EnumValueTypes.Array:
83+
obj = new AssetTypeArray(); break;
84+
case EnumValueTypes.ByteArray:
85+
obj = new AssetTypeByteArray(); break;
86+
default:
87+
obj = null; break;
88+
}
89+
if (obj == null && templateField.isArray)
90+
{
91+
//arrays don't usually have their type set,
92+
//so we have to check .isArray instead
93+
obj = new AssetTypeArray();
94+
return new AssetTypeValue(EnumValueTypes.Array, obj);
95+
}
96+
else
97+
{
98+
return new AssetTypeValue(templateField.valueType, obj);
99+
}
100+
}
101+
}
102+
}

0 commit comments

Comments
 (0)