2024-03-01 13:12:02 +00:00
|
|
|
#include "classbindings.hpp"
|
|
|
|
|
2023-11-02 17:08:07 +00:00
|
|
|
#include <components/esm3/loadclas.hpp>
|
|
|
|
#include <components/lua/luastate.hpp>
|
|
|
|
|
2024-02-28 16:20:46 +00:00
|
|
|
#include "idcollectionbindings.hpp"
|
2023-10-26 02:38:42 +00:00
|
|
|
#include "types/types.hpp"
|
2023-10-24 03:19:16 +00:00
|
|
|
|
|
|
|
namespace sol
|
|
|
|
{
|
|
|
|
template <>
|
|
|
|
struct is_automagical<ESM::Class> : std::false_type
|
|
|
|
{
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace MWLua
|
|
|
|
{
|
|
|
|
|
2024-02-08 15:53:48 +00:00
|
|
|
sol::table initClassRecordBindings(const Context& context)
|
2023-10-24 03:19:16 +00:00
|
|
|
{
|
|
|
|
sol::state_view& lua = context.mLua->sol();
|
2023-10-26 02:38:42 +00:00
|
|
|
sol::table classes(context.mLua->sol(), sol::create);
|
|
|
|
addRecordFunctionBinding<ESM::Class>(classes, context);
|
2023-11-02 17:17:55 +00:00
|
|
|
|
2023-10-24 03:19:16 +00:00
|
|
|
auto classT = lua.new_usertype<ESM::Class>("ESM3_Class");
|
|
|
|
classT[sol::meta_function::to_string]
|
|
|
|
= [](const ESM::Class& rec) -> std::string { return "ESM3_Class[" + rec.mId.toDebugString() + "]"; };
|
|
|
|
classT["id"] = sol::readonly_property([](const ESM::Class& rec) { return rec.mId.serializeText(); });
|
|
|
|
classT["name"] = sol::readonly_property([](const ESM::Class& rec) -> std::string_view { return rec.mName; });
|
|
|
|
classT["description"]
|
|
|
|
= sol::readonly_property([](const ESM::Class& rec) -> std::string_view { return rec.mDescription; });
|
2023-11-02 17:17:55 +00:00
|
|
|
|
2023-10-24 03:19:16 +00:00
|
|
|
classT["attributes"] = sol::readonly_property([lua](const ESM::Class& rec) -> sol::table {
|
2024-02-28 16:20:46 +00:00
|
|
|
return createReadOnlyRefIdTable(lua, rec.mData.mAttribute, ESM::Attribute::indexToRefId);
|
2023-10-24 03:19:16 +00:00
|
|
|
});
|
2023-11-17 20:51:19 +00:00
|
|
|
classT["majorSkills"] = sol::readonly_property([lua](const ESM::Class& rec) -> sol::table {
|
2024-02-28 16:20:46 +00:00
|
|
|
return createReadOnlyRefIdTable(
|
|
|
|
lua, rec.mData.mSkills, [](const auto& pair) { return ESM::Skill::indexToRefId(pair[1]); });
|
2023-11-17 20:51:19 +00:00
|
|
|
});
|
2023-10-24 03:19:16 +00:00
|
|
|
classT["minorSkills"] = sol::readonly_property([lua](const ESM::Class& rec) -> sol::table {
|
2024-02-28 16:20:46 +00:00
|
|
|
return createReadOnlyRefIdTable(
|
|
|
|
lua, rec.mData.mSkills, [](const auto& pair) { return ESM::Skill::indexToRefId(pair[0]); });
|
2023-10-24 03:19:16 +00:00
|
|
|
});
|
2023-11-02 17:17:55 +00:00
|
|
|
|
2023-11-03 22:19:53 +00:00
|
|
|
classT["specialization"] = sol::readonly_property([](const ESM::Class& rec) -> std::string_view {
|
2023-11-16 13:36:40 +00:00
|
|
|
return ESM::Class::specializationIndexToLuaId.at(rec.mData.mSpecialization);
|
2023-11-03 22:19:53 +00:00
|
|
|
});
|
2023-10-24 03:19:16 +00:00
|
|
|
classT["isPlayable"]
|
|
|
|
= sol::readonly_property([](const ESM::Class& rec) -> bool { return rec.mData.mIsPlayable; });
|
2023-11-01 18:23:32 +00:00
|
|
|
return LuaUtil::makeReadOnly(classes);
|
2023-10-24 03:19:16 +00:00
|
|
|
}
|
|
|
|
}
|