61 lines
3.0 KiB
C++
61 lines
3.0 KiB
C++
#include <CreatureLib/Battling/Models/ExecutingAttack.hpp>
|
|
#include <PkmnLib/Battling/Battle/Battle.hpp>
|
|
#include <PkmnLib/Battling/Pokemon/CreatePokemon.hpp>
|
|
#include "../../../../extern/doctest.hpp"
|
|
#include "../../Macros/MoveMacros.hpp"
|
|
|
|
TEST_CASE("Ally Switch - Swaps two mons around") {
|
|
auto library = Library::GetLibrary();
|
|
auto userMon = PkmnLib::Battling::CreatePokemon(library, "charizard"_cnc, 50)
|
|
.LearnMove("ally_switch"_cnc, CreatureLib::Battling::AttackLearnMethod::Unknown)
|
|
.Build();
|
|
auto userMon2 = PkmnLib::Battling::CreatePokemon(library, "blastoise"_cnc, 50).Build();
|
|
auto foeMon = PkmnLib::Battling::CreatePokemon(library, "venusaur"_cnc, 50).Build();
|
|
auto foeMon2 = PkmnLib::Battling::CreatePokemon(library, "pidgey"_cnc, 50).Build();
|
|
|
|
auto userParty = CreatureLib::Battling::CreatureParty({userMon, userMon2});
|
|
auto targetParty = CreatureLib::Battling::CreatureParty({foeMon, foeMon2});
|
|
auto battle = new PkmnLib::Battling::Battle(
|
|
library,
|
|
{
|
|
new CreatureLib::Battling::BattleParty(
|
|
&userParty, {CreatureLib::Battling::CreatureIndex(0, 0), CreatureLib::Battling::CreatureIndex(0, 1)}),
|
|
new CreatureLib::Battling::BattleParty(
|
|
&targetParty, {CreatureLib::Battling::CreatureIndex(1, 0), CreatureLib::Battling::CreatureIndex(1, 1)}),
|
|
},
|
|
false, 2, 2);
|
|
|
|
battle->SwitchCreature(0, 0, userMon);
|
|
battle->SwitchCreature(0, 1, userMon2);
|
|
battle->SwitchCreature(1, 0, foeMon);
|
|
battle->SwitchCreature(1, 1, foeMon2);
|
|
|
|
auto moveData = library->GetMoveLibrary()->Get("ally_switch"_cnc);
|
|
REQUIRE(moveData->HasSecondaryEffect());
|
|
auto& effect = moveData->GetSecondaryEffect();
|
|
auto script = library->LoadScript(ScriptCategory::Attack, effect->GetEffectName());
|
|
REQUIRE(script != nullptr);
|
|
script->OnInitialize(effect->GetParameters());
|
|
|
|
auto index1 = battle->GetSides()[0]->GetCreatureIndex(userMon);
|
|
auto index2 = battle->GetSides()[0]->GetCreatureIndex(userMon2);
|
|
CHECK(index1 == 0);
|
|
CHECK(index2 == 1);
|
|
CHECK(battle->GetCreature(0, 0).GetValue()->GetSpecies()->GetName() == "charizard"_cnc);
|
|
CHECK(battle->GetCreature(0, 1).GetValue()->GetSpecies()->GetName() == "blastoise"_cnc);
|
|
|
|
auto executingMove = CreatureLib::Battling::ExecutingAttack(
|
|
ArbUt::List<ArbUt::OptionalBorrowedPtr<CreatureLib::Battling::Creature>>{userMon2}, (uint8_t)1, userMon,
|
|
userMon->GetMoves()[0], std::unique_ptr<AngelScriptScript::BattleScript>(script));
|
|
script->OnSecondaryEffect(&executingMove, userMon2, 0);
|
|
|
|
index1 = battle->GetSides()[0]->GetCreatureIndex(userMon);
|
|
index2 = battle->GetSides()[0]->GetCreatureIndex(userMon2);
|
|
CHECK(index1 == 1);
|
|
CHECK(index2 == 0);
|
|
CHECK(battle->GetCreature(0, 0).GetValue()->GetSpecies()->GetName() == "blastoise"_cnc);
|
|
CHECK(battle->GetCreature(0, 1).GetValue()->GetSpecies()->GetName() == "charizard"_cnc);
|
|
|
|
delete battle;
|
|
}
|