Additional functionality.
This commit is contained in:
@@ -66,6 +66,19 @@ namespace PkmnLibSharp.Library.Items
|
||||
_cache.Add(key, item);
|
||||
return item;
|
||||
}
|
||||
|
||||
public IEnumerable<Item> GetEnumerator()
|
||||
{
|
||||
var count = Creaturelib.Generated.ItemLibrary.GetCount(Ptr);
|
||||
var ptr = IntPtr.Zero;
|
||||
for (ulong i = 0; i < count; i++)
|
||||
{
|
||||
Creaturelib.Generated.ItemLibrary.GetAtIndex(Ptr, i, ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out Item? item))
|
||||
yield return item!;
|
||||
yield return new Item(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
protected internal override void MarkAsDeleted()
|
||||
{
|
||||
|
||||
@@ -69,6 +69,19 @@ namespace PkmnLibSharp.Library.Moves
|
||||
AttackLibrary.Construct(ref ptr, defaultCapacity).Assert();
|
||||
Initialize(ptr);
|
||||
}
|
||||
|
||||
public IEnumerable<MoveData> GetEnumerator()
|
||||
{
|
||||
var count = AttackLibrary.GetCount(Ptr);
|
||||
var ptr = IntPtr.Zero;
|
||||
for (ulong i = 0; i < count; i++)
|
||||
{
|
||||
AttackLibrary.GetAtIndex(Ptr, i, ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out MoveData? move))
|
||||
yield return move!;
|
||||
yield return new MoveData(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
protected internal override void MarkAsDeleted()
|
||||
{
|
||||
|
||||
@@ -19,17 +19,19 @@ namespace PkmnLibSharp.Library
|
||||
public Forme(string name, float height, float weight, uint baseExperience, byte[] types,
|
||||
ushort baseHealth, ushort baseAttack, ushort baseDefense, ushort baseSpecialAttack,
|
||||
ushort baseSpecialDefense, ushort baseSpeed, IReadOnlyCollection<string> abilities,
|
||||
IReadOnlyCollection<string> hiddenAbilities,
|
||||
LearnableMoves moves)
|
||||
IReadOnlyCollection<string> hiddenAbilities, LearnableMoves moves, IReadOnlyCollection<string> tags)
|
||||
{
|
||||
var abilitiesConverted = abilities.Select(x => x.ToPtr()).ToArray();
|
||||
var hiddenAbilitiesConverted = hiddenAbilities.Select(x => x.ToPtr()).ToArray();
|
||||
var tagsConverted = tags.Select(x => x.ToPtr()).ToArray();
|
||||
var ab = abilitiesConverted.ArrayPtr();
|
||||
var hab = hiddenAbilitiesConverted.ArrayPtr();
|
||||
var tagsPtr = tagsConverted.ArrayPtr();
|
||||
|
||||
var ptr = SpeciesVariant.Construct(name.ToPtr(), height, weight, baseExperience, types.ArrayPtr(),
|
||||
(ulong) types.Length, baseHealth, baseAttack, baseDefense, baseSpecialAttack,
|
||||
baseSpecialDefense, baseSpeed, ab, (ulong) abilities.Count, hab,
|
||||
(ulong) hiddenAbilities.Count, moves.Ptr);
|
||||
(ulong) hiddenAbilities.Count, moves.Ptr, tagsPtr, (ulong) tags.Count);
|
||||
foreach (var intPtr in abilitiesConverted)
|
||||
Marshal.FreeHGlobal(intPtr);
|
||||
foreach (var intPtr in hiddenAbilitiesConverted)
|
||||
@@ -129,7 +131,7 @@ namespace PkmnLibSharp.Library
|
||||
}
|
||||
}
|
||||
|
||||
public int GetPkmnType(int index)
|
||||
public byte GetPkmnType(int index)
|
||||
{
|
||||
return Types[index];
|
||||
}
|
||||
@@ -139,6 +141,11 @@ namespace PkmnLibSharp.Library
|
||||
return SpeciesVariant.GetRandomTalent(Ptr, rand.Ptr);
|
||||
}
|
||||
|
||||
public bool HasFlag(string flag)
|
||||
{
|
||||
return SpeciesVariant.HasFlag(Ptr, flag.ToPtr()) == 1;
|
||||
}
|
||||
|
||||
protected internal override void MarkAsDeleted()
|
||||
{
|
||||
base.MarkAsDeleted();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Creaturelib.Generated;
|
||||
using Pkmnlib.Generated;
|
||||
using PkmnLibSharp.Utilities;
|
||||
@@ -15,12 +16,17 @@ namespace PkmnLibSharp.Library
|
||||
}
|
||||
|
||||
public Species(ushort id, string name, Forme defaultForme, float genderRatio, string growthRate,
|
||||
byte captureRate, byte baseHappiness, string[] eggGroups)
|
||||
byte captureRate, byte baseHappiness, IReadOnlyCollection<string> eggGroups, IReadOnlyCollection<string> tags)
|
||||
{
|
||||
var ptr = IntPtr.Zero;
|
||||
var eggGroupsPtr = eggGroups.ArrayPtr();
|
||||
var tagsConverted = tags.Select(x => x.ToPtr()).ToArray();
|
||||
var eggGroupsConverted = eggGroups.Select(x => x.ToPtr()).ToArray();
|
||||
var eggGroupsPtr = eggGroupsConverted.ArrayPtr();
|
||||
var tagsPtr = tagsConverted.ArrayPtr();
|
||||
|
||||
PokemonSpecies.Construct(ref ptr, id, name.ToPtr(), defaultForme.Ptr, genderRatio,
|
||||
growthRate.ToPtr(), captureRate, baseHappiness, eggGroupsPtr, (ulong) eggGroups.Length).Assert();
|
||||
growthRate.ToPtr(), captureRate, baseHappiness, eggGroupsPtr, (ulong) eggGroups.Count,
|
||||
tagsPtr, (ulong) tags.Count).Assert();
|
||||
_formeCache.Add("default", defaultForme);
|
||||
Initialize(ptr);
|
||||
}
|
||||
@@ -31,6 +37,21 @@ namespace PkmnLibSharp.Library
|
||||
public string Name => _name ??= CreatureSpecies.GetName(Ptr).PtrString()!;
|
||||
public string GrowthRate => _growthRate ??= CreatureSpecies.GetGrowthRate(Ptr).PtrString()!;
|
||||
|
||||
public string[] EggGroups
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_eggGroups != null) return _eggGroups;
|
||||
var count = Pkmnlib.Generated.PokemonSpecies.GetEggGroupCount(Ptr);
|
||||
_eggGroups = new string[count];
|
||||
for (ulong i = 0; i < count; i++)
|
||||
{
|
||||
_eggGroups[i] = PokemonSpecies.GetEggGroup(Ptr, i).PtrString()!;
|
||||
}
|
||||
return _eggGroups;
|
||||
}
|
||||
}
|
||||
|
||||
public ReadOnlyNativePtrArray<Forme> Formes
|
||||
{
|
||||
get
|
||||
@@ -114,6 +135,11 @@ namespace PkmnLibSharp.Library
|
||||
Pkmnlib.Generated.PokemonSpecies.AddEvolution(Ptr, evolutionData.Ptr);
|
||||
}
|
||||
|
||||
public bool HasFlag(string flag)
|
||||
{
|
||||
return CreatureSpecies.HasFlag(Ptr, flag.ToPtr()) == 1;
|
||||
}
|
||||
|
||||
private string? _name;
|
||||
private string? _growthRate;
|
||||
|
||||
@@ -122,6 +148,7 @@ namespace PkmnLibSharp.Library
|
||||
|
||||
private ReadOnlyNativePtrArray<EvolutionData>? _evolutions;
|
||||
private ReadOnlyNativePtrArray<Forme>? _formes;
|
||||
private string[]? _eggGroups;
|
||||
|
||||
protected internal override void MarkAsDeleted()
|
||||
{
|
||||
|
||||
@@ -54,6 +54,19 @@ namespace PkmnLibSharp.Library
|
||||
return species;
|
||||
}
|
||||
|
||||
public IEnumerable<Species> GetEnumerator()
|
||||
{
|
||||
var count = Creaturelib.Generated.SpeciesLibrary.GetCount(Ptr);
|
||||
var ptr = IntPtr.Zero;
|
||||
for (ulong i = 0; i < count; i++)
|
||||
{
|
||||
Creaturelib.Generated.SpeciesLibrary.GetAtIndex(Ptr, i, ref ptr).Assert();
|
||||
if (TryResolvePointer(ptr, out Species? species))
|
||||
yield return species!;
|
||||
yield return new Species(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
internal SpeciesLibrary(IntPtr ptr) : base(ptr)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user