From 740bc97e91a8ab040cd2693a0a9d26c95bb6c8d0 Mon Sep 17 00:00:00 2001 From: Eris Date: Fri, 28 Aug 2020 00:20:59 +0200 Subject: [PATCH] Added HexColorConverter Implementation provided by https://github.com/Caeden117/CountersPlus/blob/rewrite/Counters%2B/ConfigModels/Converters/ColorConverter.cs --- IPA.Loader/Config/Stores/Converters.cs | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/IPA.Loader/Config/Stores/Converters.cs b/IPA.Loader/Config/Stores/Converters.cs index 6c247dd6..6cd104c4 100644 --- a/IPA.Loader/Config/Stores/Converters.cs +++ b/IPA.Loader/Config/Stores/Converters.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; using Boolean = IPA.Config.Data.Boolean; namespace IPA.Config.Stores.Converters @@ -483,6 +484,42 @@ namespace IPA.Config.Stores.Converters public IReadOnlyDictionaryConverter() : base(new TConverter()) { } } #endif + + /// + /// A converter for objects. + /// + public sealed class HexColorConverter : ValueConverter + { + /// + /// Converts a that is a node to the corresponding object. + /// + /// the to convert + /// the object which will own the created object + /// the deserialized Color object + /// if is not a node or couldn't be parsed into a Color object + public override Color FromValue(Value value, object parent) + { + if (value is Text t) + { + if (ColorUtility.TryParseHtmlString(t.Value, out Color color)) + { + return color; + } + + throw new ArgumentException("Value cannot be parsed into a Color.", nameof(value)); + } + + throw new ArgumentException("Value not a string", nameof(value)); + } + + /// + /// Converts color of type to a node. + /// + /// the object to serialize + /// the object which owns + /// a node representing + public override Value ToValue(Color obj, object parent) => Value.Text($"#{ColorUtility.ToHtmlStringRGB(obj)}"); + } internal class StringConverter : ValueConverter {