1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-06 06:11:33 +00:00

Replace sol::table::create_table_with with a more compiler-friendly implementation. It fixes MSVC error "compiler is out of heap space" and also slightly reduces binary size.

This commit is contained in:
Petr Mikheev 2021-11-11 22:35:41 +01:00
parent d285427485
commit ed85393288
4 changed files with 226 additions and 216 deletions

View file

@ -71,210 +71,210 @@ namespace MWLua
api["getControlSwitch"] = [input](std::string_view key) { return input->getControlSwitch(key); }; api["getControlSwitch"] = [input](std::string_view key) { return input->getControlSwitch(key); };
api["setControlSwitch"] = [input](std::string_view key, bool v) { input->toggleControlSwitch(key, v); }; api["setControlSwitch"] = [input](std::string_view key, bool v) { input->toggleControlSwitch(key, v); };
api["ACTION"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["ACTION"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, MWInput::Actions>({
"GameMenu", MWInput::A_GameMenu, {"GameMenu", MWInput::A_GameMenu},
"Screenshot", MWInput::A_Screenshot, {"Screenshot", MWInput::A_Screenshot},
"Inventory", MWInput::A_Inventory, {"Inventory", MWInput::A_Inventory},
"Console", MWInput::A_Console, {"Console", MWInput::A_Console},
"MoveLeft", MWInput::A_MoveLeft, {"MoveLeft", MWInput::A_MoveLeft},
"MoveRight", MWInput::A_MoveRight, {"MoveRight", MWInput::A_MoveRight},
"MoveForward", MWInput::A_MoveForward, {"MoveForward", MWInput::A_MoveForward},
"MoveBackward", MWInput::A_MoveBackward, {"MoveBackward", MWInput::A_MoveBackward},
"Activate", MWInput::A_Activate, {"Activate", MWInput::A_Activate},
"Use", MWInput::A_Use, {"Use", MWInput::A_Use},
"Jump", MWInput::A_Jump, {"Jump", MWInput::A_Jump},
"AutoMove", MWInput::A_AutoMove, {"AutoMove", MWInput::A_AutoMove},
"Rest", MWInput::A_Rest, {"Rest", MWInput::A_Rest},
"Journal", MWInput::A_Journal, {"Journal", MWInput::A_Journal},
"Weapon", MWInput::A_Weapon, {"Weapon", MWInput::A_Weapon},
"Spell", MWInput::A_Spell, {"Spell", MWInput::A_Spell},
"Run", MWInput::A_Run, {"Run", MWInput::A_Run},
"CycleSpellLeft", MWInput::A_CycleSpellLeft, {"CycleSpellLeft", MWInput::A_CycleSpellLeft},
"CycleSpellRight", MWInput::A_CycleSpellRight, {"CycleSpellRight", MWInput::A_CycleSpellRight},
"CycleWeaponLeft", MWInput::A_CycleWeaponLeft, {"CycleWeaponLeft", MWInput::A_CycleWeaponLeft},
"CycleWeaponRight", MWInput::A_CycleWeaponRight, {"CycleWeaponRight", MWInput::A_CycleWeaponRight},
"ToggleSneak", MWInput::A_ToggleSneak, {"ToggleSneak", MWInput::A_ToggleSneak},
"AlwaysRun", MWInput::A_AlwaysRun, {"AlwaysRun", MWInput::A_AlwaysRun},
"Sneak", MWInput::A_Sneak, {"Sneak", MWInput::A_Sneak},
"QuickSave", MWInput::A_QuickSave, {"QuickSave", MWInput::A_QuickSave},
"QuickLoad", MWInput::A_QuickLoad, {"QuickLoad", MWInput::A_QuickLoad},
"QuickMenu", MWInput::A_QuickMenu, {"QuickMenu", MWInput::A_QuickMenu},
"ToggleWeapon", MWInput::A_ToggleWeapon, {"ToggleWeapon", MWInput::A_ToggleWeapon},
"ToggleSpell", MWInput::A_ToggleSpell, {"ToggleSpell", MWInput::A_ToggleSpell},
"TogglePOV", MWInput::A_TogglePOV, {"TogglePOV", MWInput::A_TogglePOV},
"QuickKey1", MWInput::A_QuickKey1, {"QuickKey1", MWInput::A_QuickKey1},
"QuickKey2", MWInput::A_QuickKey2, {"QuickKey2", MWInput::A_QuickKey2},
"QuickKey3", MWInput::A_QuickKey3, {"QuickKey3", MWInput::A_QuickKey3},
"QuickKey4", MWInput::A_QuickKey4, {"QuickKey4", MWInput::A_QuickKey4},
"QuickKey5", MWInput::A_QuickKey5, {"QuickKey5", MWInput::A_QuickKey5},
"QuickKey6", MWInput::A_QuickKey6, {"QuickKey6", MWInput::A_QuickKey6},
"QuickKey7", MWInput::A_QuickKey7, {"QuickKey7", MWInput::A_QuickKey7},
"QuickKey8", MWInput::A_QuickKey8, {"QuickKey8", MWInput::A_QuickKey8},
"QuickKey9", MWInput::A_QuickKey9, {"QuickKey9", MWInput::A_QuickKey9},
"QuickKey10", MWInput::A_QuickKey10, {"QuickKey10", MWInput::A_QuickKey10},
"QuickKeysMenu", MWInput::A_QuickKeysMenu, {"QuickKeysMenu", MWInput::A_QuickKeysMenu},
"ToggleHUD", MWInput::A_ToggleHUD, {"ToggleHUD", MWInput::A_ToggleHUD},
"ToggleDebug", MWInput::A_ToggleDebug, {"ToggleDebug", MWInput::A_ToggleDebug},
"ZoomIn", MWInput::A_ZoomIn, {"ZoomIn", MWInput::A_ZoomIn},
"ZoomOut", MWInput::A_ZoomOut {"ZoomOut", MWInput::A_ZoomOut}
)); }));
api["CONTROL_SWITCH"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["CONTROL_SWITCH"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, std::string_view>({
"Controls", "playercontrols", {"Controls", "playercontrols"},
"Fighting", "playerfighting", {"Fighting", "playerfighting"},
"Jumping", "playerjumping", {"Jumping", "playerjumping"},
"Looking", "playerlooking", {"Looking", "playerlooking"},
"Magic", "playermagic", {"Magic", "playermagic"},
"ViewMode", "playerviewswitch", {"ViewMode", "playerviewswitch"},
"VanityMode", "vanitymode" {"VanityMode", "vanitymode"}
)); }));
api["CONTROLLER_BUTTON"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["CONTROLLER_BUTTON"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, SDL_GameControllerButton>({
"A", SDL_CONTROLLER_BUTTON_A, {"A", SDL_CONTROLLER_BUTTON_A},
"B", SDL_CONTROLLER_BUTTON_B, {"B", SDL_CONTROLLER_BUTTON_B},
"X", SDL_CONTROLLER_BUTTON_X, {"X", SDL_CONTROLLER_BUTTON_X},
"Y", SDL_CONTROLLER_BUTTON_Y, {"Y", SDL_CONTROLLER_BUTTON_Y},
"Back", SDL_CONTROLLER_BUTTON_BACK, {"Back", SDL_CONTROLLER_BUTTON_BACK},
"Guide", SDL_CONTROLLER_BUTTON_GUIDE, {"Guide", SDL_CONTROLLER_BUTTON_GUIDE},
"Start", SDL_CONTROLLER_BUTTON_START, {"Start", SDL_CONTROLLER_BUTTON_START},
"LeftStick", SDL_CONTROLLER_BUTTON_LEFTSTICK, {"LeftStick", SDL_CONTROLLER_BUTTON_LEFTSTICK},
"RightStick", SDL_CONTROLLER_BUTTON_RIGHTSTICK, {"RightStick", SDL_CONTROLLER_BUTTON_RIGHTSTICK},
"LeftShoulder", SDL_CONTROLLER_BUTTON_LEFTSHOULDER, {"LeftShoulder", SDL_CONTROLLER_BUTTON_LEFTSHOULDER},
"RightShoulder", SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, {"RightShoulder", SDL_CONTROLLER_BUTTON_RIGHTSHOULDER},
"DPadUp", SDL_CONTROLLER_BUTTON_DPAD_UP, {"DPadUp", SDL_CONTROLLER_BUTTON_DPAD_UP},
"DPadDown", SDL_CONTROLLER_BUTTON_DPAD_DOWN, {"DPadDown", SDL_CONTROLLER_BUTTON_DPAD_DOWN},
"DPadLeft", SDL_CONTROLLER_BUTTON_DPAD_LEFT, {"DPadLeft", SDL_CONTROLLER_BUTTON_DPAD_LEFT},
"DPadRight", SDL_CONTROLLER_BUTTON_DPAD_RIGHT {"DPadRight", SDL_CONTROLLER_BUTTON_DPAD_RIGHT}
)); }));
api["CONTROLLER_AXIS"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["CONTROLLER_AXIS"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, int>({
"LeftX", SDL_CONTROLLER_AXIS_LEFTX, {"LeftX", SDL_CONTROLLER_AXIS_LEFTX},
"LeftY", SDL_CONTROLLER_AXIS_LEFTY, {"LeftY", SDL_CONTROLLER_AXIS_LEFTY},
"RightX", SDL_CONTROLLER_AXIS_RIGHTX, {"RightX", SDL_CONTROLLER_AXIS_RIGHTX},
"RightY", SDL_CONTROLLER_AXIS_RIGHTY, {"RightY", SDL_CONTROLLER_AXIS_RIGHTY},
"TriggerLeft", SDL_CONTROLLER_AXIS_TRIGGERLEFT, {"TriggerLeft", SDL_CONTROLLER_AXIS_TRIGGERLEFT},
"TriggerRight", SDL_CONTROLLER_AXIS_TRIGGERRIGHT, {"TriggerRight", SDL_CONTROLLER_AXIS_TRIGGERRIGHT},
"LookUpDown", SDL_CONTROLLER_AXIS_MAX + MWInput::A_LookUpDown, {"LookUpDown", SDL_CONTROLLER_AXIS_MAX + MWInput::A_LookUpDown},
"LookLeftRight", SDL_CONTROLLER_AXIS_MAX + MWInput::A_LookLeftRight, {"LookLeftRight", SDL_CONTROLLER_AXIS_MAX + MWInput::A_LookLeftRight},
"MoveForwardBackward", SDL_CONTROLLER_AXIS_MAX + MWInput::A_MoveForwardBackward, {"MoveForwardBackward", SDL_CONTROLLER_AXIS_MAX + MWInput::A_MoveForwardBackward},
"MoveLeftRight", SDL_CONTROLLER_AXIS_MAX + MWInput::A_MoveLeftRight {"MoveLeftRight", SDL_CONTROLLER_AXIS_MAX + MWInput::A_MoveLeftRight}
)); }));
api["KEY"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["KEY"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, SDL_Scancode>({
"_0", SDL_SCANCODE_0, {"_0", SDL_SCANCODE_0},
"_1", SDL_SCANCODE_1, {"_1", SDL_SCANCODE_1},
"_2", SDL_SCANCODE_2, {"_2", SDL_SCANCODE_2},
"_3", SDL_SCANCODE_3, {"_3", SDL_SCANCODE_3},
"_4", SDL_SCANCODE_4, {"_4", SDL_SCANCODE_4},
"_5", SDL_SCANCODE_5, {"_5", SDL_SCANCODE_5},
"_6", SDL_SCANCODE_6, {"_6", SDL_SCANCODE_6},
"_7", SDL_SCANCODE_7, {"_7", SDL_SCANCODE_7},
"_8", SDL_SCANCODE_8, {"_8", SDL_SCANCODE_8},
"_9", SDL_SCANCODE_9, {"_9", SDL_SCANCODE_9},
"NP_0", SDL_SCANCODE_KP_0, {"NP_0", SDL_SCANCODE_KP_0},
"NP_1", SDL_SCANCODE_KP_1, {"NP_1", SDL_SCANCODE_KP_1},
"NP_2", SDL_SCANCODE_KP_2, {"NP_2", SDL_SCANCODE_KP_2},
"NP_3", SDL_SCANCODE_KP_3, {"NP_3", SDL_SCANCODE_KP_3},
"NP_4", SDL_SCANCODE_KP_4, {"NP_4", SDL_SCANCODE_KP_4},
"NP_5", SDL_SCANCODE_KP_5, {"NP_5", SDL_SCANCODE_KP_5},
"NP_6", SDL_SCANCODE_KP_6, {"NP_6", SDL_SCANCODE_KP_6},
"NP_7", SDL_SCANCODE_KP_7, {"NP_7", SDL_SCANCODE_KP_7},
"NP_8", SDL_SCANCODE_KP_8, {"NP_8", SDL_SCANCODE_KP_8},
"NP_9", SDL_SCANCODE_KP_9, {"NP_9", SDL_SCANCODE_KP_9},
"NP_Divide", SDL_SCANCODE_KP_DIVIDE, {"NP_Divide", SDL_SCANCODE_KP_DIVIDE},
"NP_Enter", SDL_SCANCODE_KP_ENTER, {"NP_Enter", SDL_SCANCODE_KP_ENTER},
"NP_Minus", SDL_SCANCODE_KP_MINUS, {"NP_Minus", SDL_SCANCODE_KP_MINUS},
"NP_Multiply", SDL_SCANCODE_KP_MULTIPLY, {"NP_Multiply", SDL_SCANCODE_KP_MULTIPLY},
"NP_Delete", SDL_SCANCODE_KP_PERIOD, {"NP_Delete", SDL_SCANCODE_KP_PERIOD},
"NP_Plus", SDL_SCANCODE_KP_PLUS, {"NP_Plus", SDL_SCANCODE_KP_PLUS},
"F1", SDL_SCANCODE_F1, {"F1", SDL_SCANCODE_F1},
"F2", SDL_SCANCODE_F2, {"F2", SDL_SCANCODE_F2},
"F3", SDL_SCANCODE_F3, {"F3", SDL_SCANCODE_F3},
"F4", SDL_SCANCODE_F4, {"F4", SDL_SCANCODE_F4},
"F5", SDL_SCANCODE_F5, {"F5", SDL_SCANCODE_F5},
"F6", SDL_SCANCODE_F6, {"F6", SDL_SCANCODE_F6},
"F7", SDL_SCANCODE_F7, {"F7", SDL_SCANCODE_F7},
"F8", SDL_SCANCODE_F8, {"F8", SDL_SCANCODE_F8},
"F9", SDL_SCANCODE_F9, {"F9", SDL_SCANCODE_F9},
"F10", SDL_SCANCODE_F10, {"F10", SDL_SCANCODE_F10},
"F11", SDL_SCANCODE_F11, {"F11", SDL_SCANCODE_F11},
"F12", SDL_SCANCODE_F12, {"F12", SDL_SCANCODE_F12},
"A", SDL_SCANCODE_A, {"A", SDL_SCANCODE_A},
"B", SDL_SCANCODE_B, {"B", SDL_SCANCODE_B},
"C", SDL_SCANCODE_C, {"C", SDL_SCANCODE_C},
"D", SDL_SCANCODE_D, {"D", SDL_SCANCODE_D},
"E", SDL_SCANCODE_E, {"E", SDL_SCANCODE_E},
"F", SDL_SCANCODE_F, {"F", SDL_SCANCODE_F},
"G", SDL_SCANCODE_G, {"G", SDL_SCANCODE_G},
"H", SDL_SCANCODE_H, {"H", SDL_SCANCODE_H},
"I", SDL_SCANCODE_I, {"I", SDL_SCANCODE_I},
"J", SDL_SCANCODE_J, {"J", SDL_SCANCODE_J},
"K", SDL_SCANCODE_K, {"K", SDL_SCANCODE_K},
"L", SDL_SCANCODE_L, {"L", SDL_SCANCODE_L},
"M", SDL_SCANCODE_M, {"M", SDL_SCANCODE_M},
"N", SDL_SCANCODE_N, {"N", SDL_SCANCODE_N},
"O", SDL_SCANCODE_O, {"O", SDL_SCANCODE_O},
"P", SDL_SCANCODE_P, {"P", SDL_SCANCODE_P},
"Q", SDL_SCANCODE_Q, {"Q", SDL_SCANCODE_Q},
"R", SDL_SCANCODE_R, {"R", SDL_SCANCODE_R},
"S", SDL_SCANCODE_S, {"S", SDL_SCANCODE_S},
"T", SDL_SCANCODE_T, {"T", SDL_SCANCODE_T},
"U", SDL_SCANCODE_U, {"U", SDL_SCANCODE_U},
"V", SDL_SCANCODE_V, {"V", SDL_SCANCODE_V},
"W", SDL_SCANCODE_W, {"W", SDL_SCANCODE_W},
"X", SDL_SCANCODE_X, {"X", SDL_SCANCODE_X},
"Y", SDL_SCANCODE_Y, {"Y", SDL_SCANCODE_Y},
"Z", SDL_SCANCODE_Z, {"Z", SDL_SCANCODE_Z},
"LeftArrow", SDL_SCANCODE_LEFT, {"LeftArrow", SDL_SCANCODE_LEFT},
"RightArrow", SDL_SCANCODE_RIGHT, {"RightArrow", SDL_SCANCODE_RIGHT},
"UpArrow", SDL_SCANCODE_UP, {"UpArrow", SDL_SCANCODE_UP},
"DownArrow", SDL_SCANCODE_DOWN, {"DownArrow", SDL_SCANCODE_DOWN},
"LeftAlt", SDL_SCANCODE_LALT, {"LeftAlt", SDL_SCANCODE_LALT},
"LeftCtrl", SDL_SCANCODE_LCTRL, {"LeftCtrl", SDL_SCANCODE_LCTRL},
"LeftBracket", SDL_SCANCODE_LEFTBRACKET, {"LeftBracket", SDL_SCANCODE_LEFTBRACKET},
"LeftSuper", SDL_SCANCODE_LGUI, {"LeftSuper", SDL_SCANCODE_LGUI},
"LeftShift", SDL_SCANCODE_LSHIFT, {"LeftShift", SDL_SCANCODE_LSHIFT},
"RightAlt", SDL_SCANCODE_RALT, {"RightAlt", SDL_SCANCODE_RALT},
"RightCtrl", SDL_SCANCODE_RCTRL, {"RightCtrl", SDL_SCANCODE_RCTRL},
"RightSuper", SDL_SCANCODE_RGUI, {"RightSuper", SDL_SCANCODE_RGUI},
"RightBracket", SDL_SCANCODE_RIGHTBRACKET, {"RightBracket", SDL_SCANCODE_RIGHTBRACKET},
"RightShift", SDL_SCANCODE_RSHIFT, {"RightShift", SDL_SCANCODE_RSHIFT},
"BackSlash", SDL_SCANCODE_BACKSLASH, {"BackSlash", SDL_SCANCODE_BACKSLASH},
"Backspace", SDL_SCANCODE_BACKSPACE, {"Backspace", SDL_SCANCODE_BACKSPACE},
"CapsLock", SDL_SCANCODE_CAPSLOCK, {"CapsLock", SDL_SCANCODE_CAPSLOCK},
"Comma", SDL_SCANCODE_COMMA, {"Comma", SDL_SCANCODE_COMMA},
"Delete", SDL_SCANCODE_DELETE, {"Delete", SDL_SCANCODE_DELETE},
"End", SDL_SCANCODE_END, {"End", SDL_SCANCODE_END},
"Enter", SDL_SCANCODE_RETURN, {"Enter", SDL_SCANCODE_RETURN},
"Equals", SDL_SCANCODE_EQUALS, {"Equals", SDL_SCANCODE_EQUALS},
"Escape", SDL_SCANCODE_ESCAPE, {"Escape", SDL_SCANCODE_ESCAPE},
"Home", SDL_SCANCODE_HOME, {"Home", SDL_SCANCODE_HOME},
"Insert", SDL_SCANCODE_INSERT, {"Insert", SDL_SCANCODE_INSERT},
"Minus", SDL_SCANCODE_MINUS, {"Minus", SDL_SCANCODE_MINUS},
"NumLock", SDL_SCANCODE_NUMLOCKCLEAR, {"NumLock", SDL_SCANCODE_NUMLOCKCLEAR},
"PageDown", SDL_SCANCODE_PAGEDOWN, {"PageDown", SDL_SCANCODE_PAGEDOWN},
"PageUp", SDL_SCANCODE_PAGEUP, {"PageUp", SDL_SCANCODE_PAGEUP},
"Pause", SDL_SCANCODE_PAUSE, {"Pause", SDL_SCANCODE_PAUSE},
"PrintScreen", SDL_SCANCODE_PRINTSCREEN, {"PrintScreen", SDL_SCANCODE_PRINTSCREEN},
"ScrollLock", SDL_SCANCODE_SCROLLLOCK, {"ScrollLock", SDL_SCANCODE_SCROLLLOCK},
"Semicolon", SDL_SCANCODE_SEMICOLON, {"Semicolon", SDL_SCANCODE_SEMICOLON},
"Slash", SDL_SCANCODE_SLASH, {"Slash", SDL_SCANCODE_SLASH},
"Space", SDL_SCANCODE_SPACE, {"Space", SDL_SCANCODE_SPACE},
"Tab", SDL_SCANCODE_TAB {"Tab", SDL_SCANCODE_TAB}
)); }));
return LuaUtil::makeReadOnly(api); return LuaUtil::makeReadOnly(api);
} }

View file

@ -43,27 +43,27 @@ namespace MWLua
"Activator", "Armor", "Book", "Clothing", "Creature", "Door", "Ingredient", "Activator", "Armor", "Book", "Clothing", "Creature", "Door", "Ingredient",
"Light", "Miscellaneous", "NPC", "Player", "Potion", "Static", "Weapon" "Light", "Miscellaneous", "NPC", "Player", "Potion", "Static", "Weapon"
}); });
api["EQUIPMENT_SLOT"] = LuaUtil::makeReadOnly(lua->sol().create_table_with( api["EQUIPMENT_SLOT"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, int>({
"Helmet", MWWorld::InventoryStore::Slot_Helmet, {"Helmet", MWWorld::InventoryStore::Slot_Helmet},
"Cuirass", MWWorld::InventoryStore::Slot_Cuirass, {"Cuirass", MWWorld::InventoryStore::Slot_Cuirass},
"Greaves", MWWorld::InventoryStore::Slot_Greaves, {"Greaves", MWWorld::InventoryStore::Slot_Greaves},
"LeftPauldron", MWWorld::InventoryStore::Slot_LeftPauldron, {"LeftPauldron", MWWorld::InventoryStore::Slot_LeftPauldron},
"RightPauldron", MWWorld::InventoryStore::Slot_RightPauldron, {"RightPauldron", MWWorld::InventoryStore::Slot_RightPauldron},
"LeftGauntlet", MWWorld::InventoryStore::Slot_LeftGauntlet, {"LeftGauntlet", MWWorld::InventoryStore::Slot_LeftGauntlet},
"RightGauntlet", MWWorld::InventoryStore::Slot_RightGauntlet, {"RightGauntlet", MWWorld::InventoryStore::Slot_RightGauntlet},
"Boots", MWWorld::InventoryStore::Slot_Boots, {"Boots", MWWorld::InventoryStore::Slot_Boots},
"Shirt", MWWorld::InventoryStore::Slot_Shirt, {"Shirt", MWWorld::InventoryStore::Slot_Shirt},
"Pants", MWWorld::InventoryStore::Slot_Pants, {"Pants", MWWorld::InventoryStore::Slot_Pants},
"Skirt", MWWorld::InventoryStore::Slot_Skirt, {"Skirt", MWWorld::InventoryStore::Slot_Skirt},
"Robe", MWWorld::InventoryStore::Slot_Robe, {"Robe", MWWorld::InventoryStore::Slot_Robe},
"LeftRing", MWWorld::InventoryStore::Slot_LeftRing, {"LeftRing", MWWorld::InventoryStore::Slot_LeftRing},
"RightRing", MWWorld::InventoryStore::Slot_RightRing, {"RightRing", MWWorld::InventoryStore::Slot_RightRing},
"Amulet", MWWorld::InventoryStore::Slot_Amulet, {"Amulet", MWWorld::InventoryStore::Slot_Amulet},
"Belt", MWWorld::InventoryStore::Slot_Belt, {"Belt", MWWorld::InventoryStore::Slot_Belt},
"CarriedRight", MWWorld::InventoryStore::Slot_CarriedRight, {"CarriedRight", MWWorld::InventoryStore::Slot_CarriedRight},
"CarriedLeft", MWWorld::InventoryStore::Slot_CarriedLeft, {"CarriedLeft", MWWorld::InventoryStore::Slot_CarriedLeft},
"Ammunition", MWWorld::InventoryStore::Slot_Ammunition {"Ammunition", MWWorld::InventoryStore::Slot_Ammunition}
)); }));
return LuaUtil::makeReadOnly(api); return LuaUtil::makeReadOnly(api);
} }

View file

@ -47,14 +47,15 @@ namespace MWLua
return LObject(getId(r.mHitObject), worldView->getObjectRegistry()); return LObject(getId(r.mHitObject), worldView->getObjectRegistry());
}); });
api["COLLISION_TYPE"] = LuaUtil::makeReadOnly(context.mLua->sol().create_table_with( api["COLLISION_TYPE"] = LuaUtil::makeReadOnly(context.mLua->tableFromPairs<std::string_view, MWPhysics::CollisionType>({
"World", MWPhysics::CollisionType_World, {"World", MWPhysics::CollisionType_World},
"Door", MWPhysics::CollisionType_Door, {"Door", MWPhysics::CollisionType_Door},
"Actor", MWPhysics::CollisionType_Actor, {"Actor", MWPhysics::CollisionType_Actor},
"HeightMap", MWPhysics::CollisionType_HeightMap, {"HeightMap", MWPhysics::CollisionType_HeightMap},
"Projectile", MWPhysics::CollisionType_Projectile, {"Projectile", MWPhysics::CollisionType_Projectile},
"Water", MWPhysics::CollisionType_Water, {"Water", MWPhysics::CollisionType_Water},
"Default", MWPhysics::CollisionType_Default)); {"Default", MWPhysics::CollisionType_Default}
}));
api["castRay"] = [](const osg::Vec3f& from, const osg::Vec3f& to, sol::optional<sol::table> options) api["castRay"] = [](const osg::Vec3f& from, const osg::Vec3f& to, sol::optional<sol::table> options)
{ {

View file

@ -38,6 +38,15 @@ namespace LuaUtil
// A shortcut to create a new Lua table. // A shortcut to create a new Lua table.
sol::table newTable() { return sol::table(mLua, sol::create); } sol::table newTable() { return sol::table(mLua, sol::create); }
template <typename Key, typename Value>
sol::table tableFromPairs(std::initializer_list<std::pair<Key, Value>> list)
{
sol::table res(mLua, sol::create);
for (const auto& [k, v] : list)
res[k] = v;
return res;
}
// Registers a package that will be available from every sandbox via `require(name)`. // Registers a package that will be available from every sandbox via `require(name)`.
// The package can be either a sol::table with an API or a sol::function. If it is a function, // The package can be either a sol::table with an API or a sol::function. If it is a function,
// it will be evaluated (once per sandbox) the first time when requested. If the package // it will be evaluated (once per sandbox) the first time when requested. If the package