Fixed different sized enums being a problem for AngelScript, minor fixes for Item class
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-01-22 10:33:10 +01:00
parent 9372ba4b27
commit 22648e8617
7 changed files with 117 additions and 42 deletions

View File

@@ -39,6 +39,13 @@ void RegisterMoveTypes::RegisterMoveTarget(asIScriptEngine* engine) {
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)
void RegisterMoveTypes::RegisterMoveType(asIScriptEngine* engine) {
[[maybe_unused]] int r = engine->RegisterObjectType("MoveData", 0, asOBJ_REF | asOBJ_NOCOUNT);
assert(r >= 0);
@@ -49,7 +56,7 @@ void RegisterMoveTypes::RegisterMoveType(asIScriptEngine* engine) {
asMETHOD(PkmnLib::Library::MoveData, GetType), asCALL_THISCALL);
assert(r >= 0);
r = engine->RegisterObjectMethod("MoveData", "MoveCategory get_Category() const property",
asMETHOD(PkmnLib::Library::MoveData, GetCategory), asCALL_THISCALL);
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);
@@ -61,10 +68,10 @@ void RegisterMoveTypes::RegisterMoveType(asIScriptEngine* engine) {
asMETHOD(PkmnLib::Library::MoveData, GetBaseUsages), asCALL_THISCALL);
assert(r >= 0);
r = engine->RegisterObjectMethod("MoveData", "MoveTarget get_Target() const property",
asMETHOD(PkmnLib::Library::MoveData, GetTarget), asCALL_THISCALL);
asFUNCTION(Move_TargetWrapper), asCALL_CDECL_OBJLAST);
assert(r >= 0);
r = engine->RegisterObjectMethod("MoveData", "int8 get_Priority() const property",
asMETHOD(PkmnLib::Library::MoveData, GetTarget), asCALL_THISCALL);
asMETHOD(PkmnLib::Library::MoveData, GetPriority), asCALL_THISCALL);
assert(r >= 0);
r = engine->RegisterObjectMethod("MoveData", "bool HasFlag(const string &in flag) const",
asMETHOD(PkmnLib::Library::MoveData, HasFlag), asCALL_THISCALL);
@@ -76,7 +83,6 @@ void RegisterMoveTypes::RegisterMoveLibrary(asIScriptEngine* engine) {
r = engine->RegisterObjectMethod("MoveLibrary", "const MoveData@ GetMove(const string &in name) const",
asMETHOD(PkmnLib::Library::MoveLibrary, GetMove), asCALL_THISCALL);
assert(r >= 0);
}
#undef REGISTER_ENUM_VALUE

View File

@@ -3,7 +3,13 @@
#include <Library/Items/Item.hpp>
namespace PkmnLib::Library {
class Item : public CreatureLib::Library::Item {};
class Item : public CreatureLib::Library::Item {
public:
Item(std::string name, CreatureLib::Library::ItemCategory category,
CreatureLib::Library::BattleItemCategory battleCategory, int32_t price,
std::unordered_set<std::string> flags)
: CreatureLib::Library::Item(name, category, battleCategory, price, flags) {}
};
}
#endif // PKMNLIB_ITEM_HPP