89 lines
4.7 KiB
C++
89 lines
4.7 KiB
C++
#include "RegisterItemTypes.hpp"
|
|
#include <cassert>
|
|
#include "../../../../Library/Items/Item.hpp"
|
|
#include "../../../../Library/Items/ItemLibrary.hpp"
|
|
|
|
void RegisterItemTypes::Register(asIScriptEngine* engine) {
|
|
RegisterItemCategoryEnum(engine);
|
|
RegisterBattleItemCategoryEnum(engine);
|
|
RegisterItemType(engine);
|
|
RegisterItemLibrary(engine);
|
|
}
|
|
|
|
void RegisterItemTypes::RegisterItemCategoryEnum(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("ItemCategory");
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "Misc", (int)CreatureLib::Library::ItemCategory::MiscItem);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "Pokeball", (int)CreatureLib::Library::ItemCategory::CaptureDevice);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "Medicine", (int)CreatureLib::Library::ItemCategory::Medicine);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "Berry", (int)CreatureLib::Library::ItemCategory::Berry);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "TM", (int)CreatureLib::Library::ItemCategory::MoveLearner);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "VariantChanger", (int)CreatureLib::Library::ItemCategory::VariantChanger);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "KeyItem", (int)CreatureLib::Library::ItemCategory::KeyItem);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("ItemCategory", "Mail", (int)CreatureLib::Library::ItemCategory::Mail);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
void RegisterItemTypes::RegisterBattleItemCategoryEnum(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterEnum("BattleItemCategory");
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("BattleItemCategory", "None", (int)CreatureLib::Library::BattleItemCategory::None);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("BattleItemCategory", "Healing", (int)CreatureLib::Library::BattleItemCategory::Healing);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("BattleItemCategory", "StatusHealing", (int)CreatureLib::Library::BattleItemCategory::StatusHealing);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("BattleItemCategory", "CaptureDevice", (int)CreatureLib::Library::BattleItemCategory::CaptureDevice);
|
|
assert(r >= 0);
|
|
r = engine->RegisterEnumValue("BattleItemCategory", "Misc", (int)CreatureLib::Library::BattleItemCategory::MiscBattleItem);
|
|
assert(r >= 0);
|
|
}
|
|
|
|
// 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::Item, GetCategory)
|
|
ENUM__SIZE_WRAPPER(Move_BattleCategoryWrapper, PkmnLib::Library::Item, GetBattleCategory)
|
|
|
|
static bool HasFlag(const PkmnLib::Library::Item* obj, const Arbutils::CaseInsensitiveConstString& str) {
|
|
return obj->HasFlag(str);
|
|
}
|
|
|
|
|
|
void RegisterItemTypes::RegisterItemType(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("Item", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Item", "const string& get_Name() const property",
|
|
asMETHOD(PkmnLib::Library::Item, GetName), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Item", "ItemCategory get_Category() const property",
|
|
asFUNCTION(Move_CategoryWrapper), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Item", "BattleItemCategory get_BattleCategory() const property",
|
|
asFUNCTION(Move_BattleCategoryWrapper), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Item", "int get_Price() const property",
|
|
asMETHOD(PkmnLib::Library::Item, GetPrice), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("Item", "bool HasFlag(const string &in flag) const",
|
|
asFUNCTION(HasFlag), asCALL_CDECL_OBJLAST);
|
|
assert(r >= 0);
|
|
|
|
|
|
}
|
|
void RegisterItemTypes::RegisterItemLibrary(asIScriptEngine* engine) {
|
|
[[maybe_unused]] int r = engine->RegisterObjectType("ItemLibrary", 0, asOBJ_REF | asOBJ_NOCOUNT);
|
|
assert(r >= 0);
|
|
r = engine->RegisterObjectMethod("ItemLibrary", "const Item@ Get(const string &in name) const",
|
|
asMETHOD(PkmnLib::Library::ItemLibrary, Get), asCALL_THISCALL);
|
|
assert(r >= 0);
|
|
}
|