PkmnLibSharp/PkmnLibSharp/Library/Moves/MoveData.cs

57 lines
2.2 KiB
C#

using System;
using System.Linq;
using Creaturelib;
using Creaturelib.Generated;
using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Library.Moves
{
public class MoveData : PointerWrapper
{
private string? _name;
private string? _secondaryEffectName;
public string Name => _name ??= AttackData.GetName(Ptr).PtrString()!;
public byte Type => AttackData.GetType(Ptr);
public MoveCategory Category => (MoveCategory) AttackData.GetCategory(Ptr);
public byte BasePower => AttackData.GetBasePower(Ptr);
public byte Accuracy => AttackData.GetAccuracy(Ptr);
public byte BaseUsages => AttackData.GetBaseUsages(Ptr);
public MoveTarget Target => (MoveTarget) AttackData.GetTarget(Ptr);
public sbyte Priority => AttackData.GetPriority(Ptr);
public bool HasSecondaryEffect => AttackData.HasSecondaryEffect(Ptr) == 1;
public float SecondaryEffectChance => AttackData.GetSecondaryEffectChance(Ptr);
public string SecondaryEffectName =>
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString()!;
public bool HasFlag(string s)
{
return AttackData.HasFlag(Ptr, s.ToPtr()) == 1;
}
public MoveData(string name, byte type, MoveCategory category, byte power, byte accuracy,
byte baseUsage, MoveTarget target, sbyte priority, float effectChance, string effectName,
EffectParameter[] parameters, string[] flags)
{
var ptr = IntPtr.Zero;
var pars = parameters.Select(x => x.Ptr).ToArray().ArrayPtr();
var f = flags.Select(x => x.ToPtr()).ToArray().ArrayPtr();
AttackData.Construct(ref ptr, name.ToPtr(), type, (AttackCategory) category, power, accuracy, baseUsage,
(AttackTarget) target, priority, effectChance, effectName.ToPtr(), pars,
(ulong) parameters.Length, f, (ulong) flags.Length).Assert();
Initialize(ptr);
}
public override string ToString()
{
return base.ToString() + $": {Name}";
}
protected override void DeletePtr()
{
AttackData.Destruct(Ptr);
}
}
}