using System; using PkmnLibSharp.Utilities; namespace PkmnLibSharp.Battling.History { public abstract class HistoryElement : PointerWrapper { internal HistoryElement(IntPtr ptr) : base(ptr){} public HistoryElementKind Kind => (HistoryElementKind) Creaturelib.Generated.HistoryElement.GetKind(Ptr); public HistoryElement? GetPrevious() { if (_previous != null) return _previous; var ptr = Creaturelib.Generated.HistoryElement.GetPrevious(Ptr); _previous = Construct(ptr); return _previous; } internal static HistoryElement? Construct(IntPtr ptr) { if (ptr == IntPtr.Zero) return null; var kind = (HistoryElementKind) Creaturelib.Generated.HistoryElement.GetKind(ptr); switch (kind) { case HistoryElementKind.MoveUse: return new MoveUseHistory(ptr); default: throw new ArgumentOutOfRangeException(); } } private HistoryElement? _previous; protected override void DeletePtr() { } } }