Neg_Utils/NEG/Localization/LocalizationContext.cs

63 lines
1.6 KiB
C#

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<T>: IParam
{
public event Action OnValueChanged;
[PublicAPI]
public T Value
{
get => value;
set
{
OnValueChanged?.Invoke();
this.value = value;
}
}
[NotNull] private readonly Func<T, string> formatter;
private T value;
public Param(T value, Func<T, string> formatter)
{
this.formatter = formatter ?? (v => v.ToString());
Value = value;
}
public override string ToString() => formatter(value);
}
private Dictionary<string, IParam> 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);
}
}
}