diff --git a/OpenRA.Game/FieldLoader.cs b/OpenRA.Game/FieldLoader.cs index ad7904edc4..996456cbef 100644 --- a/OpenRA.Game/FieldLoader.cs +++ b/OpenRA.Game/FieldLoader.cs @@ -87,6 +87,7 @@ namespace OpenRA { typeof(WAngle), ParseWAngle }, { typeof(WRot), ParseWRot }, { typeof(CPos), ParseCPos }, + { typeof(CPos[]), ParseCPosArray }, { typeof(CVec), ParseCVec }, { typeof(CVec[]), ParseCVecArray }, { typeof(BooleanExpression), ParseBooleanExpression }, @@ -283,6 +284,29 @@ namespace OpenRA return InvalidValueAction(value, fieldType, fieldName); } + static object ParseCPosArray(string fieldName, Type fieldType, string value, MemberInfo field) + { + if (value != null) + { + var parts = value.Split(SplitComma); + + if (parts.Length % 2 != 0) + return InvalidValueAction(value, fieldType, fieldName); + + var vecs = new CPos[parts.Length / 2]; + for (var i = 0; i < vecs.Length; i++) + { + if (int.TryParse(parts[2 * i], out var rx) + && int.TryParse(parts[2 * i + 1], out var ry)) + vecs[i] = new CPos(rx, ry); + } + + return vecs; + } + + return InvalidValueAction(value, fieldType, fieldName); + } + static object ParseCVec(string fieldName, Type fieldType, string value, MemberInfo field) { if (value != null)