using System; using System.Xml.Linq; using Barotrauma.LuaCs.Data; using OneOf; namespace Barotrauma.LuaCs.Data; public abstract class SettingBase : ISettingBase { protected SettingBase(IConfigInfo configInfo) { ConfigInfo = configInfo; } protected IConfigInfo ConfigInfo { get; private set; } public string InternalName => ConfigInfo.InternalName; public ContentPackage OwnerPackage => ConfigInfo.OwnerPackage; #if CLIENT public IConfigDisplayInfo GetDisplayInfo() => ConfigInfo; #endif public virtual bool Equals(ISettingBase other) { return other is not null && ( ReferenceEquals(this, other) || !IsDisposed && OwnerPackage == other.OwnerPackage && InternalName.Equals(other.InternalName)); } private int _isDisposed = 0; public virtual bool IsDisposed { get => ModUtils.Threading.GetBool(ref _isDisposed); private set => ModUtils.Threading.SetBool(ref _isDisposed, value); } protected abstract void OnDispose(); public virtual void Dispose() { if (!ModUtils.Threading.CheckIfClearAndSetBool(ref _isDisposed)) { return; } OnDispose(); ConfigInfo = null; GC.SuppressFinalize(this); } // -- Must be implemented public abstract Type GetValueType(); public abstract string GetStringValue(); public abstract string GetDefaultStringValue(); public abstract bool TrySetValue(OneOf value); public abstract event Action OnValueChanged; public abstract OneOf GetSerializableValue(); }