92 lines
5.2 KiB
C++
92 lines
5.2 KiB
C++
#include "RegisterMoveTypes.hpp"
|
|
#include <cassert>
|
|
#include "../../../../Library/Moves/MoveData.hpp"
|
|
#include "../../../../Library/Moves/MoveLibrary.hpp"
|
|
|
|
void RegisterMoveTypes::Register(asIScriptEngine* engine) {
|
|
RegisterMoveCategory(engine);
|
|
RegisterMoveTarget(engine);
|
|
RegisterMoveType(engine);
|
|
RegisterMoveLibrary(engine);
|
|
}
|
|
|
|
#define REGISTER_ENUM_VALUE(asName, cName, valueName) \
|
|
r = engine->RegisterEnumValue(#asName, #valueName, (int)cName::valueName); \
|
|
assert(r >= 0);
|
|
|
|
void RegisterMoveTypes::RegisterMoveCategory(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("MoveCategory");
|
|
assert(r >= 0);
|
|
REGISTER_ENUM_VALUE(MoveCategory, PkmnLib::Library::MoveCategory, Physical)
|
|
REGISTER_ENUM_VALUE(MoveCategory, PkmnLib::Library::MoveCategory, Special)
|
|
REGISTER_ENUM_VALUE(MoveCategory, PkmnLib::Library::MoveCategory, Status)
|
|
}
|
|
|
|
void RegisterMoveTypes::RegisterMoveTarget(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("MoveTarget");
|
|
assert(r >= 0);
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, Adjacent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AdjacentAlly)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AdjacentAllySelf)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AdjacentOpponent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, All)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AllAdjacent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AllAdjacentOpponent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AllAlly)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, AllOpponent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, Any)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, RandomOpponent)
|
|
REGISTER_ENUM_VALUE(MoveTarget, CreatureLib::Library::AttackTarget, Self)
|
|
}
|
|
|
|
// Hack to handle AngelScript not recognizing different sized enums on fields, and returning invalid values due to it.
|
|
#define ENUM__SIZE_WRAPPER(name, type, func) \
|
|
int32_t name(type* obj) { return static_cast<int32_t>(obj->func()); }
|
|
|
|
ENUM__SIZE_WRAPPER(Move_CategoryWrapper, PkmnLib::Library::MoveData, GetCategory)
|
|
ENUM__SIZE_WRAPPER(Move_TargetWrapper, PkmnLib::Library::MoveData, GetTarget)
|
|
|
|
static bool HasFlag(const PkmnLib::Library::MoveData* obj, const Arbutils::CaseInsensitiveConstString& str) {
|
|
return obj->HasFlag(str);
|
|
}
|
|
|
|
void RegisterMoveTypes::RegisterMoveType(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("MoveData", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "const constString& get_Name() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetName), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "uint8 get_Type() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetType), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "MoveCategory get_Category() const property",
|
|
asFUNCTION(Move_CategoryWrapper), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "uint8 get_BasePower() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetBasePower), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "uint8 get_Accuracy() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetAccuracy), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "uint8 get_BaseUsages() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetBaseUsages), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "MoveTarget get_Target() const property",
|
|
asFUNCTION(Move_TargetWrapper), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "int8 get_Priority() const property",
|
|
asMETHOD(PkmnLib::Library::MoveData, GetPriority), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveData", "bool HasFlag(const constString &in flag) const",
|
|
asFUNCTION(HasFlag), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
}
|
|
void RegisterMoveTypes::RegisterMoveLibrary(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("MoveLibrary", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("MoveLibrary", "const MoveData@ Get(const constString &in name) const",
|
|
asMETHOD(PkmnLib::Library::MoveLibrary, Get), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
#undef REGISTER_ENUM_VALUE |