diff --git a/Editor/AGS.Types/RuntimeSetup.cs b/Editor/AGS.Types/RuntimeSetup.cs index 49999fd8f26..3ee1dda7c3e 100644 --- a/Editor/AGS.Types/RuntimeSetup.cs +++ b/Editor/AGS.Types/RuntimeSetup.cs @@ -425,16 +425,8 @@ public void FromXml(XmlNode node) public RuntimeSetup Clone() { - XmlDocument doc = new XmlDocument(); - using (StringWriter stringWriter = new StringWriter()) - { - XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter); - this.ToXml(xmlWriter); - doc.LoadXml(stringWriter.ToString()); - } - RuntimeSetup clone = new RuntimeSetup(_gameSettings); - clone.FromXml(doc); + Utilities.NaiveCopyProperties(this, clone); return clone; } diff --git a/Editor/AGS.Types/Utilities.cs b/Editor/AGS.Types/Utilities.cs index 70b6505e71b..ac4311aaca4 100644 --- a/Editor/AGS.Types/Utilities.cs +++ b/Editor/AGS.Types/Utilities.cs @@ -5,7 +5,8 @@ using System.IO; using System.Text; using System.Reflection; - +using System.Linq; + namespace AGS.Types { public static class Utilities @@ -211,5 +212,16 @@ public static Encoding EncodingFromName(string name) return Utilities.UTF8; // UTF-8 w/o BOM return Encoding.GetEncoding(name); } + + public static void NaiveCopyProperties(object source_obj, object clone) + { + IEnumerable properties = source_obj.GetType().GetProperties() + .Where(f => f.CanWrite && f.CanRead ); + + foreach (PropertyInfo prop in properties) + { + prop.SetValue(clone, prop.GetValue(source_obj)); + } + } } }