PkmnLibSharp/PkmnLibSharp/Library/Moves/MoveData.cs

57 lines
2.2 KiB
C#
Raw Normal View History

2020-05-02 20:58:08 +00:00
using System;
using System.Linq;
using Creaturelib;
using Creaturelib.Generated;
2020-05-02 20:58:08 +00:00
using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Library.Moves
2020-05-02 20:58:08 +00:00
{
public class MoveData : PointerWrapper
{
private string? _name;
private string? _secondaryEffectName;
public string Name => _name ??= AttackData.GetName(Ptr).PtrString()!;
2020-05-02 20:58:08 +00:00
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);
2020-05-02 20:58:08 +00:00
public sbyte Priority => AttackData.GetPriority(Ptr);
2020-05-03 09:38:49 +00:00
public bool HasSecondaryEffect => AttackData.HasSecondaryEffect(Ptr) == 1;
2020-05-02 20:58:08 +00:00
public float SecondaryEffectChance => AttackData.GetSecondaryEffectChance(Ptr);
public string SecondaryEffectName =>
_secondaryEffectName ??= AttackData.GetSecondaryEffectName(Ptr).PtrString()!;
2020-05-02 20:58:08 +00:00
public bool HasFlag(string s)
{
2020-05-03 09:38:49 +00:00
return AttackData.HasFlag(Ptr, s.ToPtr()) == 1;
2020-05-02 20:58:08 +00:00
}
public MoveData(string name, byte type, MoveCategory category, byte power, byte accuracy,
byte baseUsage, MoveTarget target, sbyte priority, float effectChance, string effectName,
2020-05-02 20:58:08 +00:00
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,
2020-07-18 14:49:11 +00:00
(AttackTarget) target, priority, effectChance, effectName.ToPtr(), pars,
2020-05-02 20:58:08 +00:00
(ulong) parameters.Length, f, (ulong) flags.Length).Assert();
Initialize(ptr);
2020-05-02 20:58:08 +00:00
}
public override string ToString()
{
return base.ToString() + $": {Name}";
}
protected override void DeletePtr()
2020-05-02 20:58:08 +00:00
{
AttackData.Destruct(Ptr);
}
}
}