From d072713936dd0dd870c40f51b7cf71858a129878 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 14 Nov 2017 21:09:07 +0200 Subject: [PATCH] Replaced manual rect parsing in a bunch of places with an extension method --- .../BarotraumaShared/Source/Items/Item.cs | 26 +++---------------- Barotrauma/BarotraumaShared/Source/Map/Gap.cs | 10 ++----- .../BarotraumaShared/Source/Map/Hull.cs | 11 ++------ .../BarotraumaShared/Source/Map/Structure.cs | 9 +------ .../Serialization/SerializableProperty.cs | 2 +- .../Source/Serialization/XMLExtensions.cs | 19 ++++++++++---- 6 files changed, 24 insertions(+), 53 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 14b7bfe32..1229b2aff 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -1591,29 +1591,11 @@ namespace Barotrauma } public static void Load(XElement element, Submarine submarine) - { - string rectString = element.GetAttributeString("rect", "0,0,0,0"); - string[] rectValues = rectString.Split(','); - Rectangle rect = Rectangle.Empty; - if (rectValues.Length==4) - { - rect = new Rectangle( - int.Parse(rectValues[0]), - int.Parse(rectValues[1]), - int.Parse(rectValues[2]), - int.Parse(rectValues[3])); - } - else - { - rect = new Rectangle( - int.Parse(rectValues[0]), - int.Parse(rectValues[1]), - 0, 0); - } - + { + Rectangle rect = element.GetAttributeRect("rect", Rectangle.Empty); string name = element.Attribute("name").Value; - + foreach (MapEntityPrefab ep in MapEntityPrefab.list) { ItemPrefab ip = ep as ItemPrefab; @@ -1621,7 +1603,7 @@ namespace Barotrauma if (ip.Name != name && (ip.Aliases == null || !ip.Aliases.Contains(name))) continue; - if (rect.Width==0 && rect.Height==0) + if (rect.Width == 0 && rect.Height == 0) { rect.Width = (int)ip.Size.X; rect.Height = (int)ip.Size.Y; diff --git a/Barotrauma/BarotraumaShared/Source/Map/Gap.cs b/Barotrauma/BarotraumaShared/Source/Map/Gap.cs index 6b4372847..c46522a86 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Gap.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Gap.cs @@ -654,17 +654,11 @@ namespace Barotrauma if (element.Attribute("rect") != null) { - string rectString = element.GetAttributeString("rect", "0,0,0,0"); - string[] rectValues = rectString.Split(','); - - rect = new Rectangle( - int.Parse(rectValues[0]), - int.Parse(rectValues[1]), - int.Parse(rectValues[2]), - int.Parse(rectValues[3])); + rect = element.GetAttributeRect("rect", Rectangle.Empty); } else { + //backwards compatibility rect = new Rectangle( int.Parse(element.Attribute("x").Value), int.Parse(element.Attribute("y").Value), diff --git a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs index 7aa0d0e05..564861196 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Hull.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Hull.cs @@ -708,20 +708,13 @@ namespace Barotrauma public static void Load(XElement element, Submarine submarine) { Rectangle rect = Rectangle.Empty; - if (element.Attribute("rect") != null) { - string rectString = element.GetAttributeString("rect", "0,0,0,0"); - string[] rectValues = rectString.Split(','); - - rect = new Rectangle( - int.Parse(rectValues[0]), - int.Parse(rectValues[1]), - int.Parse(rectValues[2]), - int.Parse(rectValues[3])); + rect = element.GetAttributeRect("rect", Rectangle.Empty); } else { + //backwards compatibility rect = new Rectangle( int.Parse(element.Attribute("x").Value), int.Parse(element.Attribute("y").Value), diff --git a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs index b80b788b3..409cb70b6 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs @@ -824,14 +824,7 @@ namespace Barotrauma public static void Load(XElement element, Submarine submarine) { - string rectString = element.GetAttributeString("rect", "0,0,0,0"); - string[] rectValues = rectString.Split(','); - - Rectangle rect = new Rectangle( - int.Parse(rectValues[0]), - int.Parse(rectValues[1]), - int.Parse(rectValues[2]), - int.Parse(rectValues[3])); + Rectangle rect = element.GetAttributeRect("rect", Rectangle.Empty); string name = element.Attribute("name").Value; diff --git a/Barotrauma/BarotraumaShared/Source/Serialization/SerializableProperty.cs b/Barotrauma/BarotraumaShared/Source/Serialization/SerializableProperty.cs index 2918f2fa1..ccc5d6f96 100644 --- a/Barotrauma/BarotraumaShared/Source/Serialization/SerializableProperty.cs +++ b/Barotrauma/BarotraumaShared/Source/Serialization/SerializableProperty.cs @@ -176,7 +176,7 @@ namespace Barotrauma propertyInfo.SetValue(obj, XMLExtensions.ParseColor(value)); break; case "rectangle": - propertyInfo.SetValue(obj, XMLExtensions.ParseRect(value)); + propertyInfo.SetValue(obj, XMLExtensions.ParseRect(value, true)); break; } diff --git a/Barotrauma/BarotraumaShared/Source/Serialization/XMLExtensions.cs b/Barotrauma/BarotraumaShared/Source/Serialization/XMLExtensions.cs index fba3131c8..169835f90 100644 --- a/Barotrauma/BarotraumaShared/Source/Serialization/XMLExtensions.cs +++ b/Barotrauma/BarotraumaShared/Source/Serialization/XMLExtensions.cs @@ -213,6 +213,15 @@ namespace Barotrauma return ParseVector4(val); } + public static Rectangle GetAttributeRect(this XElement element, string name, Rectangle defaultValue) + { + if (element == null || element.Attribute(name) == null) return defaultValue; + + string val = element.Attribute(name).Value; + + return ParseRect(val, false); + } + public static string ElementInnerText(this XElement el) { StringBuilder str = new StringBuilder(); @@ -337,13 +346,13 @@ namespace Barotrauma return new Color(components[0], components[1], components[2], components[3]); } - - public static Rectangle ParseRect(string stringColor, bool errorMessages = true) + + public static Rectangle ParseRect(string stringRect, bool requireSize, bool errorMessages = true) { - string[] strComponents = stringColor.Split(','); - if (strComponents.Length < 3) + string[] strComponents = stringRect.Split(','); + if ((strComponents.Length < 3 && requireSize) || strComponents.Length < 2) { - if (errorMessages) DebugConsole.ThrowError("Failed to parse the string \"" + stringColor + "\" to Color"); + if (errorMessages) DebugConsole.ThrowError("Failed to parse the string \"" + stringRect + "\" to Rectangle"); return new Rectangle(0, 0, 0, 0); }