Additional functionality.

This commit is contained in:
2020-08-10 19:13:17 +02:00
parent 12ed340643
commit e4f8e46102
22 changed files with 211 additions and 62 deletions

View File

@@ -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()
{

View File

@@ -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()
{

View File

@@ -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();

View File

@@ -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()
{

View File

@@ -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)
{
}