Remove public empty constructors for pointer arrays, implements basic evolutions.
This commit is contained in:
17 files changed
+204
-36
No files matched your search
@@ -5,8 +5,6 @@ namespace PkmnLibSharp.Battling
|
|||||||
{
|
{
|
||||||
public class BattleParty : PointerWrapper
|
public class BattleParty : PointerWrapper
|
||||||
{
|
{
|
||||||
public BattleParty(){}
|
|
||||||
|
|
||||||
public BattleParty(PokemonParty party, byte[] responsibleIndices)
|
public BattleParty(PokemonParty party, byte[] responsibleIndices)
|
||||||
{
|
{
|
||||||
var ptr = IntPtr.Zero;
|
var ptr = IntPtr.Zero;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ namespace PkmnLibSharp.Battling
|
|||||||
{
|
{
|
||||||
public class BattleSide : PointerWrapper
|
public class BattleSide : PointerWrapper
|
||||||
{
|
{
|
||||||
public BattleSide(){}
|
|
||||||
internal BattleSide(IntPtr ptr) : base(ptr){}
|
internal BattleSide(IntPtr ptr) : base(ptr){}
|
||||||
|
|
||||||
protected override void DeletePtr()
|
protected override void DeletePtr()
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ namespace PkmnLibSharp.Battling
|
|||||||
{
|
{
|
||||||
public class LearnedMove : PointerWrapper
|
public class LearnedMove : PointerWrapper
|
||||||
{
|
{
|
||||||
public LearnedMove(){}
|
|
||||||
internal LearnedMove(IntPtr ptr) : base(ptr){}
|
internal LearnedMove(IntPtr ptr) : base(ptr){}
|
||||||
|
|
||||||
public LearnedMove(MoveData move, byte maxUses, MoveLearnMethod learnMethod)
|
public LearnedMove(MoveData move, byte maxUses, MoveLearnMethod learnMethod)
|
||||||
|
|||||||
@@ -11,12 +11,6 @@ namespace PkmnLibSharp.Battling
|
|||||||
{
|
{
|
||||||
public class Pokemon : PointerWrapper
|
public class Pokemon : PointerWrapper
|
||||||
{
|
{
|
||||||
public Pokemon()
|
|
||||||
{
|
|
||||||
// Just here so BattleLibrary can be initialized
|
|
||||||
Library = new BattleLibrary(IntPtr.Zero);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal Pokemon(IntPtr ptr) : base(ptr)
|
internal Pokemon(IntPtr ptr) : base(ptr)
|
||||||
{
|
{
|
||||||
Library = new BattleLibrary(Creaturelib.Generated.Creature.GetLibrary(ptr));
|
Library = new BattleLibrary(Creaturelib.Generated.Creature.GetLibrary(ptr));
|
||||||
|
|||||||
@@ -30,5 +30,83 @@ namespace Pkmnlib.Generated
|
|||||||
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateLocationEvolution")]
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateLocationEvolution")]
|
||||||
internal static extern IntPtr CreateLocationEvolution(IntPtr location, IntPtr into);
|
internal static extern IntPtr CreateLocationEvolution(IntPtr location, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="time">TimeOfDay</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTimeEvolution")]
|
||||||
|
internal static extern IntPtr CreateTimeEvolution(TimeOfDay time, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="item">const Item *</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemEvolution")]
|
||||||
|
internal static extern IntPtr CreateItemEvolution(IntPtr item, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="gender">Gender</param>
|
||||||
|
/// <param name="level">unsigned char</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateGenderBasedEvolution")]
|
||||||
|
internal static extern IntPtr CreateGenderBasedEvolution(Gender gender, byte level, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="item">const Item *</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemUseEvolution")]
|
||||||
|
internal static extern IntPtr CreateItemUseEvolution(IntPtr item, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="item">const Item *</param>
|
||||||
|
/// <param name="gender">Gender</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateItemUseWithGenderEvolution")]
|
||||||
|
internal static extern IntPtr CreateItemUseWithGenderEvolution(IntPtr item, Gender gender, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeEvolution")]
|
||||||
|
internal static extern IntPtr CreateTradeEvolution(IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="item">const Item *</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeWithItemEvolution")]
|
||||||
|
internal static extern IntPtr CreateTradeWithItemEvolution(IntPtr item, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="traded">const PokemonSpecies *</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateTradeWithSpeciesEvolution")]
|
||||||
|
internal static extern IntPtr CreateTradeWithSpeciesEvolution(IntPtr traded, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="data">const EffectParameter * *</param>
|
||||||
|
/// <param name="dataLength">long unsigned int</param>
|
||||||
|
/// <param name="into">const PokemonSpecies *</param>
|
||||||
|
/// <returns>const EvolutionData *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_CreateCustomEvolution")]
|
||||||
|
internal static extern IntPtr CreateCustomEvolution(IntPtr data, ulong dataLength, IntPtr into);
|
||||||
|
|
||||||
|
/// <param name="data">const EvolutionData *</param>
|
||||||
|
/// <returns>EvolutionMethod</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetMethod")]
|
||||||
|
internal static extern EvolutionMethod GetMethod(IntPtr data);
|
||||||
|
|
||||||
|
/// <param name="data">const EvolutionData *</param>
|
||||||
|
/// <returns>const PokemonSpecies *</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetNewSpecies")]
|
||||||
|
internal static extern IntPtr GetNewSpecies(IntPtr data);
|
||||||
|
|
||||||
|
/// <param name="data">const EvolutionData *</param>
|
||||||
|
/// <returns>long unsigned int</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetDataCount")]
|
||||||
|
internal static extern ulong GetDataCount(IntPtr data);
|
||||||
|
|
||||||
|
/// <param name="data">const EvolutionData *</param>
|
||||||
|
/// <param name="index">long unsigned int</param>
|
||||||
|
/// <param name="out">const EffectParameter * &</param>
|
||||||
|
/// <returns>unsigned char</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_EvolutionData_GetData")]
|
||||||
|
internal static extern byte GetData(IntPtr data, ulong index, ref IntPtr @out);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,5 +46,11 @@ namespace Pkmnlib.Generated
|
|||||||
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolution")]
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolution")]
|
||||||
internal static extern byte GetEvolution(IntPtr p, ulong index, ref IntPtr @out);
|
internal static extern byte GetEvolution(IntPtr p, ulong index, ref IntPtr @out);
|
||||||
|
|
||||||
|
/// <param name="p">const PokemonSpecies *</param>
|
||||||
|
/// <param name="out">const const EvolutionData * * &</param>
|
||||||
|
/// <returns>unsigned char</returns>
|
||||||
|
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_PokemonSpecies_GetEvolutions")]
|
||||||
|
internal static extern byte GetEvolutions(IntPtr p, ref IntPtr @out);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,8 @@ namespace PkmnLibSharp.Library
|
|||||||
|
|
||||||
public class EffectParameter : PointerWrapper
|
public class EffectParameter : PointerWrapper
|
||||||
{
|
{
|
||||||
|
internal EffectParameter(IntPtr ptr) : base(ptr){}
|
||||||
|
|
||||||
public EffectParameter(string s) : base(Creaturelib.Generated.EffectParameter.FromString(s.ToPtr()))
|
public EffectParameter(string s) : base(Creaturelib.Generated.EffectParameter.FromString(s.ToPtr()))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,10 +9,6 @@ namespace PkmnLibSharp.Library
|
|||||||
public byte MaximalMoves => Creaturelib.Generated.LibrarySettings.GetMaximalMoves(Ptr);
|
public byte MaximalMoves => Creaturelib.Generated.LibrarySettings.GetMaximalMoves(Ptr);
|
||||||
public ushort ShinyRate => Pkmnlib.Generated.LibrarySettings.GetShinyRate(Ptr);
|
public ushort ShinyRate => Pkmnlib.Generated.LibrarySettings.GetShinyRate(Ptr);
|
||||||
|
|
||||||
internal LibrarySettings()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
internal LibrarySettings(IntPtr ptr) : base(ptr)
|
internal LibrarySettings(IntPtr ptr) : base(ptr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using System;
|
||||||
|
using PkmnLibSharp.Utilities;
|
||||||
|
|
||||||
|
namespace PkmnLibSharp.Library.Evolution
|
||||||
|
{
|
||||||
|
public class EvolutionData : PointerWrapper
|
||||||
|
{
|
||||||
|
private EvolutionData(IntPtr ptr) : base(ptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EvolutionData CreateLevelEvolution(byte level, Species into)
|
||||||
|
{
|
||||||
|
return new EvolutionData(Pkmnlib.Generated.EvolutionData.CreateLevelEvolution(level, into.Ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
public EvolutionMethod Method => (EvolutionMethod) Pkmnlib.Generated.EvolutionData.GetMethod(Ptr);
|
||||||
|
|
||||||
|
public Species NewSpecies
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_species != null) return _species;
|
||||||
|
var ptr = Pkmnlib.Generated.EvolutionData.GetNewSpecies(Ptr);
|
||||||
|
if (TryResolvePointer(ptr, out _species))
|
||||||
|
return _species!;
|
||||||
|
_species = new Species(ptr);
|
||||||
|
return _species;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ulong DataLength => Pkmnlib.Generated.EvolutionData.GetDataCount(Ptr);
|
||||||
|
|
||||||
|
public EffectParameter GetData(ulong index)
|
||||||
|
{
|
||||||
|
var ptr = IntPtr.Zero;
|
||||||
|
Pkmnlib.Generated.EvolutionData.GetData(Ptr, index, ref ptr).Assert();
|
||||||
|
if (TryResolvePointer(ptr, out EffectParameter? parameter))
|
||||||
|
return parameter!;
|
||||||
|
return new EffectParameter(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Species? _species;
|
||||||
|
protected override void DeletePtr()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
namespace PkmnLibSharp.Library.Evolution
|
||||||
|
{
|
||||||
|
public enum EvolutionMethod
|
||||||
|
{
|
||||||
|
Level = 0,
|
||||||
|
HighFriendship = 1,
|
||||||
|
KnownMove = 2,
|
||||||
|
LocationBased = 3,
|
||||||
|
TimeBased = 4,
|
||||||
|
HoldsItem = 5,
|
||||||
|
IsGenderAndLevel = 6,
|
||||||
|
EvolutionItemUse = 7,
|
||||||
|
EvolutionItemUseWithGender = 8,
|
||||||
|
Trade = 9,
|
||||||
|
TradeWithHeldItem = 10,
|
||||||
|
TradeWithSpecificPokemon = 11,
|
||||||
|
Custom = 12,
|
||||||
|
}
|
||||||
|
}
|
||||||
File renamed without changes.
File renamed without changes.
@@ -4,6 +4,7 @@ using Creaturelib.Generated;
|
|||||||
using Pkmnlib;
|
using Pkmnlib;
|
||||||
using Pkmnlib.Generated;
|
using Pkmnlib.Generated;
|
||||||
using PkmnLibSharp.Utilities;
|
using PkmnLibSharp.Utilities;
|
||||||
|
using EvolutionData = PkmnLibSharp.Library.Evolution.EvolutionData;
|
||||||
using Gender = PkmnLibSharp.Battling.Gender;
|
using Gender = PkmnLibSharp.Battling.Gender;
|
||||||
using Random = PkmnLibSharp.Utilities.Random;
|
using Random = PkmnLibSharp.Utilities.Random;
|
||||||
|
|
||||||
@@ -11,11 +12,19 @@ namespace PkmnLibSharp.Library
|
|||||||
{
|
{
|
||||||
public class Species : PointerWrapper
|
public class Species : PointerWrapper
|
||||||
{
|
{
|
||||||
private string? _name;
|
internal Species(IntPtr ptr) : base(ptr)
|
||||||
private string? _growthRate;
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private readonly Dictionary<string, Forme> _formes =
|
public Species(ushort id, string name, Forme defaultForme, float genderRatio, string growthRate,
|
||||||
new Dictionary<string, Forme>(StringComparer.InvariantCultureIgnoreCase);
|
byte captureRate, byte baseHappiness)
|
||||||
|
{
|
||||||
|
var ptr = IntPtr.Zero;
|
||||||
|
PokemonSpecies.Construct(ref ptr, id, name.ToPtr(), defaultForme.Ptr, genderRatio,
|
||||||
|
growthRate.ToPtr(), captureRate, baseHappiness).Assert();
|
||||||
|
_formes.Add("default", defaultForme);
|
||||||
|
Initialize(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
public ushort Id => CreatureSpecies.GetId(Ptr);
|
public ushort Id => CreatureSpecies.GetId(Ptr);
|
||||||
public float GenderRate => CreatureSpecies.GetGenderRate(Ptr);
|
public float GenderRate => CreatureSpecies.GetGenderRate(Ptr);
|
||||||
@@ -23,6 +32,19 @@ namespace PkmnLibSharp.Library
|
|||||||
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString()!;
|
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString()!;
|
||||||
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString()!;
|
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString()!;
|
||||||
|
|
||||||
|
public ReadOnlyNativePtrArray<EvolutionData> Evolutions
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_evolutions != null) return _evolutions;
|
||||||
|
var ptr = IntPtr.Zero;
|
||||||
|
PokemonSpecies.GetEvolutions(Ptr, ref ptr);
|
||||||
|
var length = PokemonSpecies.GetEvolutionCount(Ptr);
|
||||||
|
_evolutions = new ReadOnlyNativePtrArray<EvolutionData>(ptr, (int) length);
|
||||||
|
return _evolutions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasForme(string s)
|
public bool HasForme(string s)
|
||||||
{
|
{
|
||||||
return CreatureSpecies.HasVariant(Ptr, s.ToPtr()) == MarshalHelper.True;
|
return CreatureSpecies.HasVariant(Ptr, s.ToPtr()) == MarshalHelper.True;
|
||||||
@@ -76,20 +98,18 @@ namespace PkmnLibSharp.Library
|
|||||||
return (Gender) CreatureSpecies.GetRandomGender(Ptr, random.Ptr);
|
return (Gender) CreatureSpecies.GetRandomGender(Ptr, random.Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddEvolution(EvolutionData evolutionData)
|
||||||
internal Species(IntPtr ptr) : base(ptr)
|
|
||||||
{
|
{
|
||||||
|
Pkmnlib.Generated.PokemonSpecies.AddEvolution(Ptr, evolutionData.Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Species(ushort id, string name, Forme defaultForme, float genderRatio, string growthRate,
|
private string? _name;
|
||||||
byte captureRate, byte baseHappiness)
|
private string? _growthRate;
|
||||||
{
|
|
||||||
var ptr = IntPtr.Zero;
|
private readonly Dictionary<string, Forme> _formes =
|
||||||
PokemonSpecies.Construct(ref ptr, id, name.ToPtr(), defaultForme.Ptr, genderRatio,
|
new Dictionary<string, Forme>(StringComparer.InvariantCultureIgnoreCase);
|
||||||
growthRate.ToPtr(), captureRate, baseHappiness).Assert();
|
|
||||||
_formes.Add("default", defaultForme);
|
private ReadOnlyNativePtrArray<EvolutionData>? _evolutions;
|
||||||
Initialize(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected internal override void MarkAsDeleted()
|
protected internal override void MarkAsDeleted()
|
||||||
{
|
{
|
||||||
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Cbattle/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Cbattle/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Cchoiceturn/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Cchoiceturn/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Clibrary/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=battling_005Clibrary/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=library_005Cspecies/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||||
@@ -1,17 +1,21 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace PkmnLibSharp.Utilities
|
namespace PkmnLibSharp.Utilities
|
||||||
{
|
{
|
||||||
public class ReadOnlyNativePtrArray<T> : IReadOnlyList<T> where T : PointerWrapper, new()
|
public class ReadOnlyNativePtrArray<T> : IReadOnlyList<T> where T : PointerWrapper
|
||||||
{
|
{
|
||||||
private readonly IntPtr _ptr;
|
private readonly IntPtr _ptr;
|
||||||
|
private T?[] _cache;
|
||||||
|
private Type _type = typeof(T);
|
||||||
|
|
||||||
internal ReadOnlyNativePtrArray(IntPtr ptr, int length)
|
internal ReadOnlyNativePtrArray(IntPtr ptr, int length)
|
||||||
{
|
{
|
||||||
_ptr = ptr;
|
_ptr = ptr;
|
||||||
Count = length;
|
Count = length;
|
||||||
|
_cache = new T[Count];
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator<T> GetEnumerator()
|
public IEnumerator<T> GetEnumerator()
|
||||||
@@ -45,7 +49,7 @@ namespace PkmnLibSharp.Utilities
|
|||||||
|
|
||||||
public int Count { get; }
|
public int Count { get; }
|
||||||
|
|
||||||
public int IndexOf(T item)
|
public int IndexOf(T? item)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < Count; i++)
|
for (var i = 0; i < Count; i++)
|
||||||
{
|
{
|
||||||
@@ -67,10 +71,13 @@ namespace PkmnLibSharp.Utilities
|
|||||||
// Where's your god now?
|
// Where's your god now?
|
||||||
// (We add the offset of the index to the pointer, then dereference the pointer pointer to get the actual pointer to the object we want.)
|
// (We add the offset of the index to the pointer, then dereference the pointer pointer to get the actual pointer to the object we want.)
|
||||||
var p = new IntPtr(*(void**)IntPtr.Add(_ptr, index * IntPtr.Size).ToPointer());
|
var p = new IntPtr(*(void**)IntPtr.Add(_ptr, index * IntPtr.Size).ToPointer());
|
||||||
|
if (_cache[index]?.Ptr == p)
|
||||||
|
return _cache[index]!;
|
||||||
if (PointerWrapper.TryResolvePointer(p, out T? t))
|
if (PointerWrapper.TryResolvePointer(p, out T? t))
|
||||||
return t!;
|
return t!;
|
||||||
t = new T();
|
t = (T) FormatterServices.GetUninitializedObject(_type);
|
||||||
t.Initialize(p);
|
t.Initialize(p);
|
||||||
|
_cache[index] = t;
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"enums":[{"byteSize":1,"filename":"pkmnLib","name":"ScriptCategory","values":{"0":"Attack","1":"Talent","2":"Status","3":"Creature","4":"Battle","5":"Side"}},{"byteSize":4,"filename":"pkmnLib","name":"asEObjTypeFlags","values":{"1":"asOBJ_REF","1024":"asOBJ_APP_CLASS_DESTRUCTOR","1048576":"asOBJ_IMPLICIT_HANDLE","1073741824":"asOBJ_APP_ALIGN16","128":"asOBJ_ASHANDLE","1280":"asOBJ_APP_CLASS_D","131072":"asOBJ_APP_CLASS_ALLFLOATS","134217728":"asOBJ_TEMPLATE_SUBTYPE","16":"asOBJ_NOHANDLE","16384":"asOBJ_APP_FLOAT","16777216":"asOBJ_FUNCDEF","1792":"asOBJ_APP_CLASS_CD","2":"asOBJ_VALUE","2048":"asOBJ_APP_CLASS_ASSIGNMENT","2097151":"asOBJ_MASK_VALID_FLAGS","2097152":"asOBJ_SCRIPT_OBJECT","2304":"asOBJ_APP_CLASS_A","256":"asOBJ_APP_CLASS","262144":"asOBJ_NOCOUNT","268435456":"asOBJ_TYPEDEF","2816":"asOBJ_APP_CLASS_CA","32":"asOBJ_SCOPED","32768":"asOBJ_APP_ARRAY","3328":"asOBJ_APP_CLASS_DA","33554432":"asOBJ_LIST_PATTERN","3840":"asOBJ_APP_CLASS_CDA","4":"asOBJ_GC","4096":"asOBJ_APP_CLASS_COPY_CONSTRUCTOR","4194304":"asOBJ_SHARED","4352":"asOBJ_APP_CLASS_K","4864":"asOBJ_APP_CLASS_CK","512":"asOBJ_APP_CLASS_CONSTRUCTOR","524288":"asOBJ_APP_CLASS_ALIGN8","536870912":"asOBJ_ABSTRACT","5376":"asOBJ_APP_CLASS_DK","5888":"asOBJ_APP_CLASS_CDK","64":"asOBJ_TEMPLATE","6400":"asOBJ_APP_CLASS_AK","65536":"asOBJ_APP_CLASS_ALLINTS","67108864":"asOBJ_ENUM","6912":"asOBJ_APP_CLASS_CAK","7424":"asOBJ_APP_CLASS_DAK","768":"asOBJ_APP_CLASS_C","7936":"asOBJ_APP_CLASS_CDAK","8":"asOBJ_POD","8192":"asOBJ_APP_PRIMITIVE","8388608":"asOBJ_NOINHERIT"}},{"byteSize":4,"filename":"pkmnLib","name":"asECallConvTypes","values":{"0":"asCALL_CDECL","1":"asCALL_STDCALL","2":"asCALL_THISCALL_ASGLOBAL","3":"asCALL_THISCALL","4":"asCALL_CDECL_OBJLAST","5":"asCALL_CDECL_OBJFIRST","6":"asCALL_GENERIC","7":"asCALL_THISCALL_OBJLAST","8":"asCALL_THISCALL_OBJFIRST"}},{"byteSize":1,"filename":"pkmnLib","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"pkmnLib","name":"MoveCategory","values":{"0":"Physical","1":"Special","2":"Status"}},{"byteSize":1,"filename":"pkmnLib","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}},{"byteSize":1,"filename":"pkmnLib","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":4,"filename":"pkmnLib","name":"AttackLearnMethod","values":{"0":"Unknown","1":"Level"}},{"byteSize":1,"filename":"pkmnLib","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":1,"filename":"pkmnLib","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"pkmnLib","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"pkmnLib","name":"EvolutionMethod","values":{"0":"Level","1":"HighFriendship","10":"TradeWithHeldItem","11":"TradeWithSpecificPokemon","12":"Custom","2":"KnownMove","3":"LocationBased","4":"TimeBased","5":"HoldsItem","6":"IsGenderAndLevel","7":"EvolutionItemUse","8":"EvolutionItemUseWithGender","9":"Trade"}},{"byteSize":1,"filename":"pkmnLib","name":"TimeOfDay","values":{"0":"Night","1":"Morning","2":"Afternoon","3":"Evening"}},{"byteSize":4,"filename":"pkmnLib","name":"asETypeIdFlags","values":{"0":"asTYPEID_VOID","1":"asTYPEID_BOOL","10":"asTYPEID_FLOAT","1073741824":"asTYPEID_OBJHANDLE","11":"asTYPEID_DOUBLE","134217728":"asTYPEID_SCRIPTOBJECT","2":"asTYPEID_INT8","268435456":"asTYPEID_TEMPLATE","3":"asTYPEID_INT16","4":"asTYPEID_INT32","469762048":"asTYPEID_MASK_OBJECT","5":"asTYPEID_INT64","536870912":"asTYPEID_HANDLETOCONST","6":"asTYPEID_UINT8","67108863":"asTYPEID_MASK_SEQNBR","67108864":"asTYPEID_APPOBJECT","7":"asTYPEID_UINT16","8":"asTYPEID_UINT32","9":"asTYPEID_UINT64"}},{"byteSize":4,"filename":"pkmnLib","name":"asEContextState","values":{"0":"asEXECUTION_FINISHED","1":"asEXECUTION_SUSPENDED","2":"asEXECUTION_ABORTED","3":"asEXECUTION_EXCEPTION","4":"asEXECUTION_PREPARED","5":"asEXECUTION_UNINITIALIZED","6":"asEXECUTION_ACTIVE","7":"asEXECUTION_ERROR"}},{"byteSize":4,"filename":"pkmnLib","name":"asERetCodes","values":{"-1":"asERROR","-10":"asINVALID_DECLARATION","-11":"asINVALID_OBJECT","-12":"asINVALID_TYPE","-13":"asALREADY_REGISTERED","-14":"asMULTIPLE_FUNCTIONS","-15":"asNO_MODULE","-16":"asNO_GLOBAL_VAR","-17":"asINVALID_CONFIGURATION","-18":"asINVALID_INTERFACE","-19":"asCANT_BIND_ALL_FUNCTIONS","-2":"asCONTEXT_ACTIVE","-20":"asLOWER_ARRAY_DIMENSION_NOT_REGISTERED","-21":"asWRONG_CONFIG_GROUP","-22":"asCONFIG_GROUP_IS_IN_USE","-23":"asILLEGAL_BEHAVIOUR_FOR_TYPE","-24":"asWRONG_CALLING_CONV","-25":"asBUILD_IN_PLine truncated
|
{"enums":[{"byteSize":1,"filename":"pkmnLib","name":"ScriptCategory","values":{"0":"Attack","1":"Talent","2":"Status","3":"Creature","4":"Battle","5":"Side"}},{"byteSize":4,"filename":"pkmnLib","name":"asEObjTypeFlags","values":{"1":"asOBJ_REF","1024":"asOBJ_APP_CLASS_DESTRUCTOR","1048576":"asOBJ_IMPLICIT_HANDLE","1073741824":"asOBJ_APP_ALIGN16","128":"asOBJ_ASHANDLE","1280":"asOBJ_APP_CLASS_D","131072":"asOBJ_APP_CLASS_ALLFLOATS","134217728":"asOBJ_TEMPLATE_SUBTYPE","16":"asOBJ_NOHANDLE","16384":"asOBJ_APP_FLOAT","16777216":"asOBJ_FUNCDEF","1792":"asOBJ_APP_CLASS_CD","2":"asOBJ_VALUE","2048":"asOBJ_APP_CLASS_ASSIGNMENT","2097151":"asOBJ_MASK_VALID_FLAGS","2097152":"asOBJ_SCRIPT_OBJECT","2304":"asOBJ_APP_CLASS_A","256":"asOBJ_APP_CLASS","262144":"asOBJ_NOCOUNT","268435456":"asOBJ_TYPEDEF","2816":"asOBJ_APP_CLASS_CA","32":"asOBJ_SCOPED","32768":"asOBJ_APP_ARRAY","3328":"asOBJ_APP_CLASS_DA","33554432":"asOBJ_LIST_PATTERN","3840":"asOBJ_APP_CLASS_CDA","4":"asOBJ_GC","4096":"asOBJ_APP_CLASS_COPY_CONSTRUCTOR","4194304":"asOBJ_SHARED","4352":"asOBJ_APP_CLASS_K","4864":"asOBJ_APP_CLASS_CK","512":"asOBJ_APP_CLASS_CONSTRUCTOR","524288":"asOBJ_APP_CLASS_ALIGN8","536870912":"asOBJ_ABSTRACT","5376":"asOBJ_APP_CLASS_DK","5888":"asOBJ_APP_CLASS_CDK","64":"asOBJ_TEMPLATE","6400":"asOBJ_APP_CLASS_AK","65536":"asOBJ_APP_CLASS_ALLINTS","67108864":"asOBJ_ENUM","6912":"asOBJ_APP_CLASS_CAK","7424":"asOBJ_APP_CLASS_DAK","768":"asOBJ_APP_CLASS_C","7936":"asOBJ_APP_CLASS_CDAK","8":"asOBJ_POD","8192":"asOBJ_APP_PRIMITIVE","8388608":"asOBJ_NOINHERIT"}},{"byteSize":4,"filename":"pkmnLib","name":"asECallConvTypes","values":{"0":"asCALL_CDECL","1":"asCALL_STDCALL","2":"asCALL_THISCALL_ASGLOBAL","3":"asCALL_THISCALL","4":"asCALL_CDECL_OBJLAST","5":"asCALL_CDECL_OBJFIRST","6":"asCALL_GENERIC","7":"asCALL_THISCALL_OBJLAST","8":"asCALL_THISCALL_OBJFIRST"}},{"byteSize":1,"filename":"pkmnLib","name":"Statistic","values":{"0":"Health","1":"PhysicalAttack","2":"PhysicalDefense","3":"MagicalAttack","4":"MagicalDefense","5":"Speed"}},{"byteSize":1,"filename":"pkmnLib","name":"MoveCategory","values":{"0":"Physical","1":"Special","2":"Status"}},{"byteSize":1,"filename":"pkmnLib","name":"AttackTarget","values":{"0":"Adjacent","1":"AdjacentAlly","10":"RandomOpponent","11":"Self","2":"AdjacentAllySelf","3":"AdjacentOpponent","4":"All","5":"AllAdjacent","6":"AllAdjacentOpponent","7":"AllAlly","8":"AllOpponent","9":"Any"}},{"byteSize":1,"filename":"pkmnLib","name":"EffectParameterType","values":{"0":"None","1":"Bool","2":"Int","3":"Float","4":"String"}},{"byteSize":4,"filename":"pkmnLib","name":"AttackLearnMethod","values":{"0":"Unknown","1":"Level"}},{"byteSize":1,"filename":"pkmnLib","name":"Gender","values":{"0":"Male","1":"Female","2":"Genderless"}},{"byteSize":1,"filename":"pkmnLib","name":"ItemCategory","values":{"0":"MiscItem","1":"CaptureDevice","2":"Medicine","3":"Berry","4":"MoveLearner","5":"VariantChanger","6":"KeyItem","7":"Mail"}},{"byteSize":1,"filename":"pkmnLib","name":"BattleItemCategory","values":{"0":"None","1":"Healing","2":"StatusHealing","3":"CaptureDevice","4":"MiscBattleItem"}},{"byteSize":1,"filename":"pkmnLib","name":"EvolutionMethod","values":{"0":"Level","1":"HighFriendship","10":"TradeWithHeldItem","11":"TradeWithSpecificPokemon","12":"Custom","2":"KnownMove","3":"LocationBased","4":"TimeBased","5":"HoldsItem","6":"IsGenderAndLevel","7":"EvolutionItemUse","8":"EvolutionItemUseWithGender","9":"Trade"}},{"byteSize":1,"filename":"pkmnLib","name":"TimeOfDay","values":{"0":"Night","1":"Morning","2":"Afternoon","3":"Evening"}},{"byteSize":4,"filename":"pkmnLib","name":"asETypeIdFlags","values":{"0":"asTYPEID_VOID","1":"asTYPEID_BOOL","10":"asTYPEID_FLOAT","1073741824":"asTYPEID_OBJHANDLE","11":"asTYPEID_DOUBLE","134217728":"asTYPEID_SCRIPTOBJECT","2":"asTYPEID_INT8","268435456":"asTYPEID_TEMPLATE","3":"asTYPEID_INT16","4":"asTYPEID_INT32","469762048":"asTYPEID_MASK_OBJECT","5":"asTYPEID_INT64","536870912":"asTYPEID_HANDLETOCONST","6":"asTYPEID_UINT8","67108863":"asTYPEID_MASK_SEQNBR","67108864":"asTYPEID_APPOBJECT","7":"asTYPEID_UINT16","8":"asTYPEID_UINT32","9":"asTYPEID_UINT64"}},{"byteSize":4,"filename":"pkmnLib","name":"asEContextState","values":{"0":"asEXECUTION_FINISHED","1":"asEXECUTION_SUSPENDED","2":"asEXECUTION_ABORTED","3":"asEXECUTION_EXCEPTION","4":"asEXECUTION_PREPARED","5":"asEXECUTION_UNINITIALIZED","6":"asEXECUTION_ACTIVE","7":"asEXECUTION_ERROR"}},{"byteSize":4,"filename":"pkmnLib","name":"asERetCodes","values":{"-1":"asERROR","-10":"asINVALID_DECLARATION","-11":"asINVALID_OBJECT","-12":"asINVALID_TYPE","-13":"asALREADY_REGISTERED","-14":"asMULTIPLE_FUNCTIONS","-15":"asNO_MODULE","-16":"asNO_GLOBAL_VAR","-17":"asINVALID_CONFIGURATION","-18":"asINVALID_INTERFACE","-19":"asCANT_BIND_ALL_FUNCTIONS","-2":"asCONTEXT_ACTIVE","-20":"asLOWER_ARRAY_DIMENSION_NOT_REGISTERED","-21":"asWRONG_CONFIG_GROUP","-22":"asCONFIG_GROUP_IS_IN_USE","-23":"asILLEGAL_BEHAVIOUR_FOR_TYPE","-24":"asWRONG_CALLING_CONV","-25":"asBUILD_IN_PLine truncated
|
||||||
Reference in new issue
Block a user