using PkmnLibSharp.FFI; using PkmnLibSharp.Utils; using Interface = PkmnLibSharp.FFI.DynamicData.Libraries.DynamicLibrary; namespace PkmnLibSharp.DynamicData.Libraries { public class DynamicLibrary : ExternPointer { public class CacheData { public StaticData.Libraries.StaticData? StaticData { get; internal set; } } internal DynamicLibrary(IdentifiablePointer ptr) : base(ptr, false) { } public DynamicLibrary(StaticData.Libraries.StaticData staticData, BattleStatCalculator statCalculator, DamageLibrary damageLibrary, MiscLibrary miscLibrary, ScriptResolver scriptResolver) : base( Interface.dynamic_library_new(staticData.TakeOwnershipAndInvalidate(), statCalculator.TakeOwnershipAndInvalidate(), damageLibrary.TakeOwnershipAndInvalidate(), miscLibrary.TakeOwnershipAndInvalidate(), scriptResolver.TakeOwnershipAndInvalidate()), true) { } public StaticData.Libraries.StaticData StaticData => Cache.StaticData ??= new StaticData.Libraries.StaticData(Interface.dynamic_library_get_static_data(Ptr), false); protected override CacheData CreateCache() => new(); protected override void Destructor() => Interface.dynamic_library_drop(Ptr); } }