Initial battle class tests.
This commit is contained in:
parent
d29aa60010
commit
283825b355
|
@ -8,13 +8,14 @@ namespace PkmnLibSharp.Battling
|
||||||
{
|
{
|
||||||
public class Battle : PointerWrapper
|
public class Battle : PointerWrapper
|
||||||
{
|
{
|
||||||
public Battle(BattleLibrary library, BattleParty[] parties, bool canFlee, byte numberOfSides, byte creaturesPerSide,
|
public Battle(BattleLibrary library, BattleParty[] parties, bool canFlee, byte numberOfSides, byte pokemonPerSide,
|
||||||
ulong randomSeed)
|
ulong randomSeed)
|
||||||
{
|
{
|
||||||
var ptr = IntPtr.Zero;
|
var ptr = IntPtr.Zero;
|
||||||
var arr = parties.Select(x => x.Ptr).ToArray();
|
var arr = parties.Select(x => x.Ptr).ToArray();
|
||||||
Pkmnlib.Generated.Battle.Construct(ref ptr, library.Ptr, arr.ArrayPtr(), (ulong) arr.Length,
|
Pkmnlib.Generated.Battle.Construct(ref ptr, library.Ptr, arr.ArrayPtr(), (ulong) arr.Length,
|
||||||
canFlee.ToNative(), numberOfSides, creaturesPerSide, randomSeed);
|
canFlee.ToNative(), numberOfSides, pokemonPerSide, randomSeed);
|
||||||
|
Initialize(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BattleLibrary Library
|
public BattleLibrary Library
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace PkmnLibSharp.Battling
|
||||||
|
{
|
||||||
|
public class BattleBuilder
|
||||||
|
{
|
||||||
|
private readonly BattleLibrary _library;
|
||||||
|
private readonly bool _canFlee;
|
||||||
|
private readonly byte _numberOfSides;
|
||||||
|
private readonly byte _pokemonPerSide;
|
||||||
|
private ulong? _seed;
|
||||||
|
private readonly List<BattleParty> _parties = new List<BattleParty>();
|
||||||
|
|
||||||
|
public BattleBuilder(BattleLibrary library, bool canFlee, byte numberOfSides = 2, byte pokemonPerSide = 1)
|
||||||
|
{
|
||||||
|
_library = library;
|
||||||
|
_canFlee = canFlee;
|
||||||
|
_numberOfSides = numberOfSides;
|
||||||
|
_pokemonPerSide = pokemonPerSide;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BattleBuilder WithRandomSeed(ulong seed)
|
||||||
|
{
|
||||||
|
_seed = seed;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BattleBuilder WithPartyOnPositions(PokemonParty party, params BattlePosition[] positions)
|
||||||
|
{
|
||||||
|
var battleParty = new BattleParty(party, positions.SelectMany(x => new[] {x.Side, x.Index}).ToArray());
|
||||||
|
_parties.Add(battleParty);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Battle Build()
|
||||||
|
{
|
||||||
|
// Use the milliseconds since epoch time as random seed if none is specified.
|
||||||
|
_seed ??= (ulong) (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds;
|
||||||
|
return new Battle(_library, _parties.ToArray(), _canFlee, _numberOfSides, _pokemonPerSide, _seed.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ namespace PkmnLibSharp.Battling
|
||||||
{
|
{
|
||||||
var ptr = IntPtr.Zero;
|
var ptr = IntPtr.Zero;
|
||||||
Creaturelibbattling.Generated.BattleParty.Construct(ref ptr, party.Ptr, responsibleIndices.ArrayPtr(),
|
Creaturelibbattling.Generated.BattleParty.Construct(ref ptr, party.Ptr, responsibleIndices.ArrayPtr(),
|
||||||
(ulong) responsibleIndices.Length).Assert();
|
(ulong) responsibleIndices.Length / 2).Assert();
|
||||||
Initialize(ptr);
|
Initialize(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
namespace PkmnLibSharp.Battling
|
||||||
|
{
|
||||||
|
public readonly struct BattlePosition
|
||||||
|
{
|
||||||
|
public readonly byte Side;
|
||||||
|
public readonly byte Index;
|
||||||
|
|
||||||
|
public BattlePosition(byte side, byte index)
|
||||||
|
{
|
||||||
|
Side = side;
|
||||||
|
Index = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -319,11 +319,11 @@ namespace PkmnLibSharp.Battling
|
||||||
|
|
||||||
protected internal override void MarkAsDeleted()
|
protected internal override void MarkAsDeleted()
|
||||||
{
|
{
|
||||||
base.MarkAsDeleted();
|
|
||||||
foreach (var move in Moves)
|
foreach (var move in Moves)
|
||||||
{
|
{
|
||||||
move.MarkAsDeleted();
|
move?.MarkAsDeleted();
|
||||||
}
|
}
|
||||||
|
base.MarkAsDeleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,7 +7,7 @@ namespace PkmnLibSharp.Battling
|
||||||
{
|
{
|
||||||
private ReadOnlyNativePtrArray<Pokemon> _party;
|
private ReadOnlyNativePtrArray<Pokemon> _party;
|
||||||
|
|
||||||
public PokemonParty(ulong size) : base(Creaturelibbattling.Generated.CreatureParty.ConstructWithSize(size))
|
public PokemonParty(ulong size = 6) : base(Creaturelibbattling.Generated.CreatureParty.ConstructWithSize(size))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
public PokemonParty(Pokemon[] pokemon) : base(
|
public PokemonParty(Pokemon[] pokemon) : base(
|
||||||
|
|
BIN
PkmnLibSharp/Native/libArbutils.so (Stored with Git LFS)
BIN
PkmnLibSharp/Native/libArbutils.so (Stored with Git LFS)
Binary file not shown.
BIN
PkmnLibSharp/Native/libCreatureLibBattling.so (Stored with Git LFS)
BIN
PkmnLibSharp/Native/libCreatureLibBattling.so (Stored with Git LFS)
Binary file not shown.
BIN
PkmnLibSharp/Native/libCreatureLibLibrary.so (Stored with Git LFS)
BIN
PkmnLibSharp/Native/libCreatureLibLibrary.so (Stored with Git LFS)
Binary file not shown.
BIN
PkmnLibSharp/Native/libpkmnLib.so (Stored with Git LFS)
BIN
PkmnLibSharp/Native/libpkmnLib.so (Stored with Git LFS)
Binary file not shown.
|
@ -0,0 +1,45 @@
|
||||||
|
using NUnit.Framework;
|
||||||
|
using PkmnLibSharp.Battling;
|
||||||
|
|
||||||
|
namespace PkmnLibSharpTests.Battling.BattleTests
|
||||||
|
{
|
||||||
|
public class BasicBattleTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void InitializeBattle()
|
||||||
|
{
|
||||||
|
var lib = BattleLibraryHelper.GetLibrary();
|
||||||
|
var battle = new BattleBuilder(lib, true, 2, 1).Build();
|
||||||
|
Assert.AreEqual(lib, battle.Library);
|
||||||
|
Assert.AreEqual(true, battle.CanFlee);
|
||||||
|
Assert.AreEqual(2, battle.SidesCount);
|
||||||
|
Assert.AreEqual(false, battle.HasEnded);
|
||||||
|
Assert.AreEqual(0, battle.PartiesCount);
|
||||||
|
battle.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PokemonParty BuildTestParty(BattleLibrary lib)
|
||||||
|
{
|
||||||
|
var party = new PokemonParty();
|
||||||
|
party.SwapInto(0, new PokemonBuilder(lib, "testSpecies", 50).Build());
|
||||||
|
return party;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void InitializeBattleWithParties()
|
||||||
|
{
|
||||||
|
var lib = BattleLibraryHelper.GetLibrary();
|
||||||
|
var battle =
|
||||||
|
new BattleBuilder(lib, true, 2, 1)
|
||||||
|
.WithPartyOnPositions(BuildTestParty(lib), new BattlePosition(0, 0))
|
||||||
|
.WithPartyOnPositions(BuildTestParty(lib), new BattlePosition(1, 0))
|
||||||
|
.Build();
|
||||||
|
Assert.AreEqual(lib, battle.Library);
|
||||||
|
Assert.AreEqual(true, battle.CanFlee);
|
||||||
|
Assert.AreEqual(2, battle.SidesCount);
|
||||||
|
Assert.AreEqual(false, battle.HasEnded);
|
||||||
|
Assert.AreEqual(2, battle.PartiesCount);
|
||||||
|
battle.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ namespace PkmnLibSharpTests.Battling
|
||||||
Assert.AreEqual("testSpecies", pokemon.Species.Name);
|
Assert.AreEqual("testSpecies", pokemon.Species.Name);
|
||||||
Assert.AreEqual(50, pokemon.Level);
|
Assert.AreEqual(50, pokemon.Level);
|
||||||
Assert.AreEqual("default", pokemon.Forme.Name);
|
Assert.AreEqual("default", pokemon.Forme.Name);
|
||||||
|
pokemon.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -24,6 +25,7 @@ namespace PkmnLibSharpTests.Battling
|
||||||
.WithNickname("cuteNickname")
|
.WithNickname("cuteNickname")
|
||||||
.Build();
|
.Build();
|
||||||
Assert.AreEqual("cuteNickname", pokemon.Nickname);
|
Assert.AreEqual("cuteNickname", pokemon.Nickname);
|
||||||
|
pokemon.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -34,6 +36,7 @@ namespace PkmnLibSharpTests.Battling
|
||||||
.WithGender(Gender.Female)
|
.WithGender(Gender.Female)
|
||||||
.Build();
|
.Build();
|
||||||
Assert.AreEqual(Gender.Female, pokemon.Gender);
|
Assert.AreEqual(Gender.Female, pokemon.Gender);
|
||||||
|
pokemon.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -46,6 +49,7 @@ namespace PkmnLibSharpTests.Battling
|
||||||
.Build();
|
.Build();
|
||||||
Assert.AreEqual("testMove", pokemon.Moves[0].Move.Name);
|
Assert.AreEqual("testMove", pokemon.Moves[0].Move.Name);
|
||||||
Assert.AreEqual("testMove2", pokemon.Moves[1].Move.Name);
|
Assert.AreEqual("testMove2", pokemon.Moves[1].Move.Name);
|
||||||
|
pokemon.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue