using JetBrains.Annotations; using System; using System.Collections; using System.Collections.Generic; namespace BEG.Localization { public class LocalizationContext { public interface IParam { [PublicAPI] public event Action OnValueChanged; } public class Param: IParam { public event Action OnValueChanged; [PublicAPI] public T Value { get => value; set { OnValueChanged?.Invoke(); this.value = value; } } [NotNull] private readonly Func formatter; private T value; public Param(T value, Func formatter) { this.formatter = formatter ?? (v => v.ToString()); Value = value; } public override string ToString() => formatter(value); } private Dictionary parameters = new (); public void SetParam(string name, IParam param) { if (parameters.ContainsKey(name)) parameters[name] = param; else parameters.Add(name, param); } public void RemoveParam(string name) => parameters.Remove(name); public IParam GetParam(string name) => parameters[name]; public void ClearParams() => parameters.Clear(); public IParam this[string name] { get => GetParam(name); set => SetParam(name, value); } } }