PkmnLibRSharp/PkmnLibRSharp/StaticData/Ability.cs

33 lines
1.2 KiB
C#

using System.Collections.Generic;
using System.Linq;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.Ability;
namespace PkmnLibSharp.StaticData
{
public class Ability : HandleType
{
private string? _name;
public string Name => _name ??= Interface.ability_name(Handle).Result().PtrString()!;
private string? _effect;
public string Effect => _effect ??= Interface.ability_effect(Handle).Result().PtrString()!;
public IReadOnlyList<EffectParameter> Parameters { get; private set; } = null!;
protected Ability(FFIHandle handle) : base(handle)
{
}
public static Ability Create(string name, string effect, IReadOnlyList<EffectParameter> parameters)
{
var parameterArray = parameters.Select(x => (FFIHandleValue)x.Handle).ToArray();
var arrayPtr = parameterArray.ArrayPtr();
var handle = Interface.ability_new(name.ToPtr(), effect.ToPtr(), arrayPtr, (ulong)parameterArray.LongLength)
.Result();
var ability = Resolver.Instance.ResolveAbility(handle.Resolve());
ability.Parameters = parameters;
return ability;
}
}
}