diff --git a/PkmnLibSharp/Library/Forme.cs b/PkmnLibSharp/Library/Forme.cs index 911dc54..fa90923 100644 --- a/PkmnLibSharp/Library/Forme.cs +++ b/PkmnLibSharp/Library/Forme.cs @@ -143,6 +143,12 @@ namespace PkmnLibSharp.Library { } + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + _moves?.MarkAsDeleted(); + } + protected override void DeletePtr() { SpeciesVariant.Destruct(Ptr); diff --git a/PkmnLibSharp/Library/Items/ItemLibrary.cs b/PkmnLibSharp/Library/Items/ItemLibrary.cs index 5d14ae3..d5872bf 100644 --- a/PkmnLibSharp/Library/Items/ItemLibrary.cs +++ b/PkmnLibSharp/Library/Items/ItemLibrary.cs @@ -63,6 +63,15 @@ namespace PkmnLibSharp.Library.Items { } + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + foreach (var item in _cache) + { + item.Value.MarkAsDeleted(); + } + } + protected override void DeletePtr() { Creatureliblibrary.Generated.ItemLibrary.Destruct(Ptr); diff --git a/PkmnLibSharp/Library/Moves/MoveLibrary.cs b/PkmnLibSharp/Library/Moves/MoveLibrary.cs index 2c09877..08d91e9 100644 --- a/PkmnLibSharp/Library/Moves/MoveLibrary.cs +++ b/PkmnLibSharp/Library/Moves/MoveLibrary.cs @@ -66,6 +66,15 @@ namespace PkmnLibSharp.Library.Moves { } + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + foreach (var moveData in _cache) + { + moveData.Value.MarkAsDeleted(); + } + } + protected override void DeletePtr() { AttackLibrary.Destruct(Ptr); diff --git a/PkmnLibSharp/Library/NatureLibrary.cs b/PkmnLibSharp/Library/NatureLibrary.cs index 741b0f6..22e85ac 100644 --- a/PkmnLibSharp/Library/NatureLibrary.cs +++ b/PkmnLibSharp/Library/NatureLibrary.cs @@ -58,5 +58,14 @@ namespace PkmnLibSharp.Library { Pkmnlib.Generated.NatureLibrary.Destruct(Ptr); } + + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + foreach (var nature in _cache) + { + nature.Value.MarkAsDeleted(); + } + } } } \ No newline at end of file diff --git a/PkmnLibSharp/Library/PokemonLibrary.cs b/PkmnLibSharp/Library/PokemonLibrary.cs index 2e28dba..39ff734 100644 --- a/PkmnLibSharp/Library/PokemonLibrary.cs +++ b/PkmnLibSharp/Library/PokemonLibrary.cs @@ -133,5 +133,17 @@ namespace PkmnLibSharp.Library { Pkmnlib.Generated.PokemonLibrary.Destruct(Ptr); } + + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + _settings?.MarkAsDeleted(); + _species?.MarkAsDeleted(); + _moves?.MarkAsDeleted(); + _items?.MarkAsDeleted(); + _growthRateLibrary?.MarkAsDeleted(); + _typeLibrary?.MarkAsDeleted(); + _natureLibrary?.MarkAsDeleted(); + } } } \ No newline at end of file diff --git a/PkmnLibSharp/Library/Species.cs b/PkmnLibSharp/Library/Species.cs index 5368cf6..e96b1c8 100644 --- a/PkmnLibSharp/Library/Species.cs +++ b/PkmnLibSharp/Library/Species.cs @@ -84,6 +84,15 @@ namespace PkmnLibSharp.Library return s; } + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + foreach (var forme in _formes) + { + forme.Value.MarkAsDeleted(); + } + } + protected override void DeletePtr() { PokemonSpecies.Destruct(Ptr); diff --git a/PkmnLibSharp/Library/SpeciesLibrary.cs b/PkmnLibSharp/Library/SpeciesLibrary.cs index 08d4124..e781477 100644 --- a/PkmnLibSharp/Library/SpeciesLibrary.cs +++ b/PkmnLibSharp/Library/SpeciesLibrary.cs @@ -67,5 +67,14 @@ namespace PkmnLibSharp.Library { Creatureliblibrary.Generated.SpeciesLibrary.Destruct(Ptr); } + + protected internal override void MarkAsDeleted() + { + base.MarkAsDeleted(); + foreach (var species in _cache) + { + species.Value.MarkAsDeleted(); + } + } } } \ No newline at end of file diff --git a/PkmnLibSharp/PkmnLibSharp.csproj b/PkmnLibSharp/PkmnLibSharp.csproj index 86ec704..7e23032 100644 --- a/PkmnLibSharp/PkmnLibSharp.csproj +++ b/PkmnLibSharp/PkmnLibSharp.csproj @@ -22,4 +22,7 @@ + + + diff --git a/PkmnLibSharp/Utilities/PointerWrapper.cs b/PkmnLibSharp/Utilities/PointerWrapper.cs index 4aa51cc..d138074 100644 --- a/PkmnLibSharp/Utilities/PointerWrapper.cs +++ b/PkmnLibSharp/Utilities/PointerWrapper.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Concurrent; -using System.Linq; -using System.Reflection; namespace PkmnLibSharp.Utilities { @@ -70,9 +68,14 @@ namespace PkmnLibSharp.Utilities { if (_isDeleted) return; - Cached.TryRemove(Ptr, out _); DeletePtr(); + MarkAsDeleted(); + } + + protected internal virtual void MarkAsDeleted() + { _isDeleted = true; + Cached.TryRemove(_ptr, out _); } protected bool Equals(PointerWrapper other)