PkmnLibRSharp/PkmnLibRSharp/DynamicData/Libraries/DynamicLibrary.cs

34 lines
1.3 KiB
C#

using PkmnLibSharp.FFI;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.DynamicData.Libraries.DynamicLibrary;
namespace PkmnLibSharp.DynamicData.Libraries
{
public class DynamicLibrary : ExternPointer<DynamicLibrary.CacheData>
{
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);
}
}