diff --git a/CInterface/Battling/Pokemon.cpp b/CInterface/Battling/Pokemon.cpp new file mode 100644 index 0000000..86b46f2 --- /dev/null +++ b/CInterface/Battling/Pokemon.cpp @@ -0,0 +1,38 @@ +#include "../../src/Battling/Pokemon/Pokemon.hpp" +#include "../Core.hpp" +using namespace PkmnLib::Battling; + +export Pokemon* PkmnLib_Pokemon_Construct(const BattleLibrary* library, const PkmnLib::Library::PokemonSpecies* species, + const PkmnLib::Library::PokemonForme* forme, uint8_t level, + uint32_t experience, uint32_t uid, CreatureLib::Library::Gender gender, + uint8_t coloring, const PkmnLib::Library::Item* heldItem, + const char* nickname, bool hiddenAbility, uint8_t abilityIndex, + CreatureLib::Battling::LearnedAttack* const* moves, size_t moveCount, + uint8_t hpIv, uint8_t attIv, uint8_t defIv, uint8_t sAtIv, uint8_t sDeIv, + uint8_t spIv, uint8_t hpEv, uint8_t attEv, uint8_t defEv, uint8_t sAtEv, + uint8_t sDeEv, uint8_t spEv, const PkmnLib::Library::Nature* nature) { + std::string nick(nickname); + Arbutils::Collections::List cMoves(moves, moves + moveCount); + + return new Pokemon(library, species, forme, level, experience, uid, gender, coloring, heldItem, nick, + CreatureLib::Library::TalentIndex(hiddenAbility, abilityIndex), cMoves, + CreatureLib::Library::StatisticSet(hpIv, attIv, defIv, sAtIv, sDeIv, spIv), + CreatureLib::Library::StatisticSet(hpEv, attEv, defEv, sAtEv, sDeEv, spEv), nature); +}; + +export void PkmnLib_Pokemon_Destruct(const Pokemon* p) { delete p; } + +#define SIMPLE_GET_FUNC(type, name, returnType) \ + export returnType PkmnLib_##type##_##name(const PkmnLib::Battling::type* p) { return p->name(); } + +SIMPLE_GET_FUNC(Pokemon, IsShiny, bool) +SIMPLE_GET_FUNC(Pokemon, GetNature, const PkmnLib::Library::Nature*) + +#undef SIMPLE_GET_FUNC + +export uint8_t PkmnLib_Pokemon_GetIndividualValue(const Pokemon* p, CreatureLib::Library::Statistic stat) { + return p->GetIndividualValue(stat); +} +export uint8_t PkmnLib_Pokemon_GetEffortValue(const Pokemon* p, CreatureLib::Library::Statistic stat) { + return p->GetEffortValue(stat); +} \ No newline at end of file diff --git a/src/Battling/Pokemon/Pokemon.cpp b/src/Battling/Pokemon/Pokemon.cpp index d2298bc..71f641f 100644 --- a/src/Battling/Pokemon/Pokemon.cpp +++ b/src/Battling/Pokemon/Pokemon.cpp @@ -1,4 +1 @@ #include "Pokemon.hpp" -const PkmnLib::Library::Nature* PkmnLib::Battling::Pokemon::GetNature() const{ - return _nature; -} diff --git a/src/Battling/Pokemon/Pokemon.hpp b/src/Battling/Pokemon/Pokemon.hpp index f1b9d21..b85e153 100644 --- a/src/Battling/Pokemon/Pokemon.hpp +++ b/src/Battling/Pokemon/Pokemon.hpp @@ -22,7 +22,7 @@ namespace PkmnLib::Battling { const Library::PokemonForme* forme, uint8_t level, uint32_t experience, uint32_t uid, CreatureLib::Library::Gender gender, uint8_t coloring, const Library::Item* heldItem, const std::string& nickname, const CreatureLib::Library::TalentIndex& talent, - List moves, + const List& moves, CreatureLib::Library::StatisticSet individualValues, CreatureLib::Library::StatisticSet effortValues, const PkmnLib::Library::Nature* nature) : CreatureLib::Battling::Creature(library, species, forme, level, experience, uid, gender, coloring, @@ -33,17 +33,19 @@ namespace PkmnLib::Battling { return dynamic_cast(GetVariant()); } - bool IsShiny() const { return _coloring == 1; } + inline bool IsShiny() const noexcept { return _coloring == 1; } - const std::vector& GetMoves() const { - return reinterpret_cast&>(_attacks); + const Arbutils::Collections::List& GetMoves() const { + return reinterpret_cast&>(_attacks); } - const Library::Nature* GetNature() const; - uint8_t GetIndividualValue(CreatureLib::Library::Statistic stat) const { + inline const Library::Nature* GetNature() const noexcept { return _nature; } + inline uint8_t GetIndividualValue(CreatureLib::Library::Statistic stat) const { return _individualValues.GetStat(stat); } - uint8_t GetEffortValue(CreatureLib::Library::Statistic stat) const { return _effortValues.GetStat(stat); } + inline uint8_t GetEffortValue(CreatureLib::Library::Statistic stat) const { + return _effortValues.GetStat(stat); + } }; } diff --git a/src/ScriptResolving/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp b/src/ScriptResolving/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp index 920d7c8..4c526cd 100644 --- a/src/ScriptResolving/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp +++ b/src/ScriptResolving/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp @@ -74,8 +74,8 @@ CScriptArray* GetMoves(const PkmnLib::Battling::Pokemon* obj) { asIScriptEngine* engine = ctx->GetEngine(); asITypeInfo* t = engine->GetTypeInfoByDecl("array"); auto a = obj->GetMoves(); - CScriptArray* arr = CScriptArray::Create(t, a.size()); - for (size_t i = 0; i < a.size(); i++) { + CScriptArray* arr = CScriptArray::Create(t, a.Count()); + for (size_t i = 0; i < a.Count(); i++) { arr->SetValue(i, &a[i]); } return arr; diff --git a/tests/ScriptTests/ScriptTypeTests/Battle/PokemonTests.cpp b/tests/ScriptTests/ScriptTypeTests/Battle/PokemonTests.cpp index eceddb1..2539772 100644 --- a/tests/ScriptTests/ScriptTypeTests/Battle/PokemonTests.cpp +++ b/tests/ScriptTests/ScriptTypeTests/Battle/PokemonTests.cpp @@ -321,7 +321,7 @@ TEST_CASE("Validate Pokemon GetMoves in Script") { ->LearnMove("testMove2"_cnc, CreatureLib::Battling::AttackLearnMethod::Unknown) ->Build(); - for (size_t i = 0; i < mon->GetMoves().size(); i++) { + for (size_t i = 0; i < mon->GetMoves().Count(); i++) { auto data = GetScript(mainLib, "testMove"_cnc); data.Context->SetArgObject(0, const_cast(mon));