using System; using System.Runtime.InteropServices; using Decal.Interop.Filters; namespace Decal.Adapter.Wrappers; [CLSCompliant(true)] public class SkillInfoWrapper : MarshalByRefObject, IDisposable { private SkillInfo mySkillInfo; private TrainingType myTraining; private bool isDisposed; public int Base => mySkillInfo.Base; public int Bonus => mySkillInfo.Bonus; public int Buffed => mySkillInfo.Buffed; public int Current => mySkillInfo.Current; public int XP => mySkillInfo.Exp; public string Formula => mySkillInfo.Formula; public int Increment => mySkillInfo.Increment; public bool Known => mySkillInfo.Known; public string Name => mySkillInfo.Name; public string ShortName => mySkillInfo.ShortName; public TrainingType Training => myTraining; internal SkillInfoWrapper(SkillInfo info) { mySkillInfo = info; switch (info.Training) { case eTrainingType.eTrainUnusable: myTraining = TrainingType.Unusable; break; case eTrainingType.eTrainUntrained: myTraining = TrainingType.Untrained; break; case eTrainingType.eTrainTrained: myTraining = TrainingType.Trained; break; case eTrainingType.eTrainSpecialized: myTraining = TrainingType.Specialized; break; default: myTraining = TrainingType.Unusable; break; } } ~SkillInfoWrapper() { Dispose(disposing: false); } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!isDisposed) { } if (mySkillInfo != null) { Marshal.ReleaseComObject(mySkillInfo); } isDisposed = true; } protected void EnforceDisposedOnce() { if (isDisposed) { throw new ObjectDisposedException("SkillInfoWrapper"); } } }