using System.Collections.Generic; namespace Engine.Core.Config; public class BasicConfiguration : IConfiguration { public Event OnAdded { get; } = new(); public Event OnSet { get; } = new(); public Event OnRemoved { get; } = new(); private readonly Dictionary values = []; public IReadOnlyDictionary Values => values; public T? Get(string key, T? defaultValue = default) { if (!values.TryGetValue(key, out object? value)) return defaultValue; if (value is T castedObject) return castedObject; try { return (T?)System.Convert.ChangeType(value, typeof(T)); } catch { } return defaultValue; } public object? Get(string key) { values.TryGetValue(key, out object? value); return value; } public bool Has(string key) => values.ContainsKey(key); public void Remove(string key) { if (values.Remove(key)) OnRemoved.Invoke(this, new(key)); } public void Set(string key, T value) { if (!values.TryAdd(key, value)) values[key] = value; else OnAdded.Invoke(this, new(key)); OnSet.Invoke(this, new(key)); } }