120 lines
6.7 KiB
C++
120 lines
6.7 KiB
C++
#include "RegisterSpeciesTypes.hpp"
|
|
#include <cassert>
|
|
#include "../../../../Library/Species/PokemonSpecies.hpp"
|
|
#include "../../../../Library/Species/SpeciesLibrary.hpp"
|
|
#include "../../../../Library/Statistic.hpp"
|
|
#include "../HelperFile.hpp"
|
|
|
|
void RegisterSpeciesTypes::Register(asIScriptEngine* engine) {
|
|
RegisterGenderEnum(engine);
|
|
RegisterStatisticEnum(engine);
|
|
RegisterFormeType(engine);
|
|
RegisterSpeciesType(engine);
|
|
RegisterSpeciesLibrary(engine);
|
|
}
|
|
|
|
void RegisterSpeciesTypes::RegisterGenderEnum(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("Gender");
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Gender", "Male", (int)CreatureLib::Library::Gender::Male);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Gender", "Female", (int)CreatureLib::Library::Gender::Female);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Gender", "Genderless", (int)CreatureLib::Library::Gender::Genderless);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
void RegisterSpeciesTypes::RegisterStatisticEnum(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("Statistic");
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "HP", (int)PkmnLib::Library::Statistic::HealthPoints);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "Attack", (int)PkmnLib::Library::Statistic::PhysicalAttack);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "Defense", (int)PkmnLib::Library::Statistic::PhysicalDefense);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "SpecialAttack", (int)PkmnLib::Library::Statistic::SpecialAttack);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "SpecialDefense", (int)PkmnLib::Library::Statistic::SpecialDefense);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("Statistic", "Speed", (int)PkmnLib::Library::Statistic::Speed);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
static const PkmnLib::Library::PokemonForme* GetFormeWrapper(const std::string& s,
|
|
const PkmnLib::Library::PokemonSpecies* species) {
|
|
return species->GetForme(ArbUt::StringView(s.c_str(), s.length()))
|
|
.As<const PkmnLib::Library::PokemonForme>()
|
|
.GetRaw();
|
|
}
|
|
BORROWED_PTR_GETTER_FUNC(PkmnLib::Library::PokemonSpecies, const PkmnLib::Library::PokemonForme, GetDefaultForme);
|
|
|
|
void RegisterSpeciesTypes::RegisterSpeciesType(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("Species", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "const constString& get_Name() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonSpecies, GetName), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "uint16 get_Id() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonSpecies, GetId), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "float get_GenderRate() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonSpecies, GetGenderRate), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "uint8 get_CaptureRate() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonSpecies, GetCaptureRate), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "Gender GetRandomGender() const",
|
|
asMETHOD(PkmnLib::Library::PokemonSpecies, GetRandomGender), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "const Forme@ GetForme(string key) const", asFUNCTION(GetFormeWrapper),
|
|
asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Species", "const Forme@ get_DefaultForme() const property",
|
|
asFUNCTION(GetDefaultFormeWrapper), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
const ArbUt::StringView& GetAbility(PkmnLib::Library::PokemonForme* p, bool hidden, uint8_t index) {
|
|
return p->GetAbility(CreatureLib::Library::TalentIndex(hidden, index));
|
|
}
|
|
|
|
void RegisterSpeciesTypes::RegisterFormeType(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("Forme", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "const constString& get_Name() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetName), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "float get_Weight() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetWeight), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "float get_Height() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetHeight), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "uint get_BaseExperience() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetBaseExperience), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "int get_TypeCount() const property",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetTypeCount), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "uint8 GetType(int index) const",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetType), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "uint GetStatistic(Statistic stat) const",
|
|
asMETHOD(PkmnLib::Library::PokemonForme, GetStatistic), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Forme", "const constString& GetAbility(bool hidden, uint8 index) const",
|
|
asFUNCTIONPR(GetAbility,
|
|
(PkmnLib::Library::PokemonForme * p, bool hidden, uint8_t index),
|
|
const ArbUt::StringView&),
|
|
asCALL_CDECL_OBJFIRST);
|
|
assert(r >= 0);
|
|
}
|
|
void RegisterSpeciesTypes::RegisterSpeciesLibrary(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("SpeciesLibrary", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("SpeciesLibrary", "const Species@ Get(const constString &in name) const",
|
|
asMETHOD(PkmnLib::Library::SpeciesLibrary, Get), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
}
|