Gen7Tests/src/ScriptTests/Moves/AMoves/AllySwitch.cpp

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;
}