PkmnLibRSharp/PkmnLibRSharp/StaticData/SecondaryEffect.cs

49 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using PkmnLibSharp.Utils;
using Interface = PkmnLibSharp.FFI.StaticData.MoveData;
namespace PkmnLibSharp.StaticData
{
/// <summary>
/// A secondary effect is an effect on a move that happens after it hits.
/// </summary>
public class SecondaryEffect : HandleType
{
/// <inheritdoc cref="SecondaryEffect"/>
protected SecondaryEffect(FFIHandle handle) : base(handle)
{
}
/// <summary>
/// Instantiates a new Secondary Effect.
/// </summary>
public static SecondaryEffect Create(float chance, string effectName, IReadOnlyList<EffectParameter> parameters)
{
var parameterPtrs = parameters.Select(x => (FFIHandleValue)x.Handle).ToArray();
var parameterArrayPtr = parameterPtrs.ArrayPtr();
var handle = Interface.secondary_effect_new(chance, effectName.ToPtr(), parameterArrayPtr,
(ulong)parameters.Count);
var effect = Resolver.Instance.ResolveSecondaryEffect(handle.Resolve());
effect.Parameters = parameters;
return effect;
}
private float? _chance;
/// <summary>
/// The chance in percentages that the effect triggers. -1 to make it always trigger.
/// </summary>
public float Chance => _chance ??= Interface.secondary_effect_chance(Handle);
private string? _name;
/// <summary>
/// The name of the effect.
/// </summary>
public string Name => _name ??= Interface.secondary_effect_effect_name(Handle).Result().PtrString()!;
/// <summary>
/// A list of parameters for the effect.
/// </summary>
public IReadOnlyList<EffectParameter> Parameters { get; private set; } = null!;
}
}