63 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
} |