Implements additional functionality for Pokemon class, such as Status and helper function to restore PP.

This commit is contained in:
Deukhoofd 2020-08-08 12:43:09 +02:00
parent 1acd32b986
commit 26f8722fee
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
12 changed files with 83 additions and 16 deletions

View File

@ -9,6 +9,11 @@ namespace PkmnLibSharp.Battling
{ {
public class Battle : PointerWrapper public class Battle : PointerWrapper
{ {
internal Battle(IntPtr ptr) : base(ptr)
{
Initialize(ptr);
}
public Battle(BattleLibrary library, BattleParty[] parties, bool canFlee, byte numberOfSides, byte pokemonPerSide, public Battle(BattleLibrary library, BattleParty[] parties, bool canFlee, byte numberOfSides, byte pokemonPerSide,
ulong randomSeed) ulong randomSeed)
{ {

View File

@ -1,3 +1,4 @@
using System;
using PkmnLibSharp.Utilities; using PkmnLibSharp.Utilities;
namespace PkmnLibSharp.Battling namespace PkmnLibSharp.Battling
@ -5,10 +6,11 @@ namespace PkmnLibSharp.Battling
public class BattleSide : PointerWrapper public class BattleSide : PointerWrapper
{ {
public BattleSide(){} public BattleSide(){}
internal BattleSide(IntPtr ptr) : base(ptr){}
protected override void DeletePtr() protected override void DeletePtr()
{ {
throw new System.NotImplementedException(); Creaturelib.Generated.BattleSide.Destruct(Ptr);
} }
} }
} }

View File

@ -111,10 +111,30 @@ namespace PkmnLibSharp.Battling
return ptr.PtrString(); return ptr.PtrString();
} }
} }
// TODO: Change to wrapped public Battle Battle
public IntPtr Battle => Creaturelib.Generated.Creature.GetBattle(Ptr); {
// TODO: Change to wrapped get
public IntPtr BattleSide => Creaturelib.Generated.Creature.GetBattleSide(Ptr); {
var ptr = Creaturelib.Generated.Creature.GetBattle(Ptr);
if (_battle != null && _battle.Ptr == ptr) return _battle;
if (TryResolvePointer(ptr, out _battle))
return _battle;
_battle = new Battle(ptr);
return _battle;
}
}
public BattleSide BattleSide
{
get
{
var ptr = Creaturelib.Generated.Creature.GetBattleSide(Ptr);
if (_battleSide != null && _battleSide.Ptr == ptr) return _battleSide;
if (TryResolvePointer(ptr, out _battleSide))
return _battleSide;
_battleSide = new BattleSide(ptr);
return _battleSide;
}
}
public bool IsOnBattleField => Creaturelib.Generated.Creature.IsOnBattleField(Ptr) == 1; public bool IsOnBattleField => Creaturelib.Generated.Creature.IsOnBattleField(Ptr) == 1;
public Item HeldItem public Item HeldItem
{ {
@ -207,7 +227,9 @@ namespace PkmnLibSharp.Battling
return _nature; return _nature;
} }
} }
public string StatusName => Pkmnlib.Generated.Pokemon.GetStatusName(Ptr).PtrString();
public void ChangeForme(Forme forme) public void ChangeForme(Forme forme)
{ {
_forme = null; _forme = null;
@ -245,6 +267,10 @@ namespace PkmnLibSharp.Battling
{ {
Creaturelib.Generated.Creature.Heal(Ptr, damage, canRevive.ToNative()); Creaturelib.Generated.Creature.Heal(Ptr, damage, canRevive.ToNative());
} }
public void RestoreAllPP()
{
Creaturelib.Generated.Creature.RestoreAllAttackUses(Ptr);
}
public void OverrideActiveAbility(string ability) public void OverrideActiveAbility(string ability)
{ {
Creaturelib.Generated.Creature.OverrideActiveTalent(Ptr, ability.ToPtr()).Assert(); Creaturelib.Generated.Creature.OverrideActiveTalent(Ptr, ability.ToPtr()).Assert();
@ -304,6 +330,15 @@ namespace PkmnLibSharp.Battling
return Pkmnlib.Generated.Pokemon.GetEffortValue(Ptr, (Pkmnlib.Statistic) stat); return Pkmnlib.Generated.Pokemon.GetEffortValue(Ptr, (Pkmnlib.Statistic) stat);
} }
public void SetStatus(string name)
{
Pkmnlib.Generated.Pokemon.SetStatus(Ptr, name.ToPtr());
}
public void ClearStatus()
{
Pkmnlib.Generated.Pokemon.ClearStatus(Ptr);
}
private Species _displaySpecies; private Species _displaySpecies;
private Forme _displayForme; private Forme _displayForme;
private Species _species; private Species _species;
@ -311,7 +346,9 @@ namespace PkmnLibSharp.Battling
private string _nickname; private string _nickname;
private ReadOnlyNativePtrArray<LearnedMove> _moves; private ReadOnlyNativePtrArray<LearnedMove> _moves;
private Nature _nature; private Nature _nature;
private Battle _battle;
private BattleSide _battleSide;
protected override void DeletePtr() protected override void DeletePtr()
{ {
Pkmnlib.Generated.Pokemon.Destruct(Ptr); Pkmnlib.Generated.Pokemon.Destruct(Ptr);

View File

@ -163,6 +163,11 @@ namespace Creaturelib.Generated
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Creature_Heal")] [DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Creature_Heal")]
internal static extern byte Heal(IntPtr p, uint health, byte canRevive); internal static extern byte Heal(IntPtr p, uint health, byte canRevive);
/// <param name="p">Creature *</param>
/// <returns>unsigned char</returns>
[DllImport("CreatureLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "CreatureLib_Creature_RestoreAllAttackUses")]
internal static extern byte RestoreAllAttackUses(IntPtr p);
/// <param name="p">const Creature *</param> /// <param name="p">const Creature *</param>
/// <param name="out">const char * &</param> /// <param name="out">const char * &</param>
/// <returns>unsigned char</returns> /// <returns>unsigned char</returns>

View File

@ -7,5 +7,6 @@ namespace Pkmnlib
internal enum PkmnEventDataKind : byte internal enum PkmnEventDataKind : byte
{ {
WeatherChange = 128, WeatherChange = 128,
StatusChange = 129,
} }
} }

View File

@ -6,6 +6,7 @@ namespace Pkmnlib
[SuppressMessage("ReSharper", "InconsistentNaming")] [SuppressMessage("ReSharper", "InconsistentNaming")]
internal enum PkmnScriptCategory : byte internal enum PkmnScriptCategory : byte
{ {
Weather = 6, Weather = 128,
Status = 129,
} }
} }

View File

@ -64,5 +64,21 @@ namespace Pkmnlib.Generated
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetEffortValue")] [DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetEffortValue")]
internal static extern byte GetEffortValue(IntPtr p, Statistic stat); internal static extern byte GetEffortValue(IntPtr p, Statistic stat);
/// <param name="p">Pokemon *</param>
/// <param name="name">const char *</param>
/// <returns>unsigned char</returns>
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_SetStatus")]
internal static extern byte SetStatus(IntPtr p, IntPtr name);
/// <param name="p">Pokemon *</param>
/// <returns>unsigned char</returns>
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_ClearStatus")]
internal static extern byte ClearStatus(IntPtr p);
/// <param name="p">Pokemon *</param>
/// <returns>const char *</returns>
[DllImport("pkmnLib", CallingConvention = CallingConvention.Cdecl, EntryPoint= "PkmnLib_Pokemon_GetStatusName")]
internal static extern IntPtr GetStatusName(IntPtr p);
} }
} }

BIN
PkmnLibSharp/Native/libArbutils.so (Stored with Git LFS)

Binary file not shown.

BIN
PkmnLibSharp/Native/libCreatureLib.so (Stored with Git LFS)

Binary file not shown.

BIN
PkmnLibSharp/Native/libpkmnLib.so (Stored with Git LFS)

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long