From c20cffad5ceb838bb1a348807f922c360bc07e67 Mon Sep 17 00:00:00 2001 From: Oliver Brakmann Date: Thu, 3 Oct 2019 16:21:47 +0200 Subject: [PATCH] Add support for CPos[] fields to FieldLoader --- OpenRA.Game/FieldLoader.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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)