diff --git a/apps/openmw/mwlua/cellbindings.cpp b/apps/openmw/mwlua/cellbindings.cpp index 202186d119..ec64a3cddd 100644 --- a/apps/openmw/mwlua/cellbindings.cpp +++ b/apps/openmw/mwlua/cellbindings.cpp @@ -299,35 +299,33 @@ namespace MWLua }; } - if (view["openmw_cellbindings"] != sol::nil) - return; // Only add the usertype once - - auto pathGridT = view.new_usertype("ESM3_PathGrid"); - pathGridT[sol::meta_function::to_string] = [](const ESM::Pathgrid& rec) -> std::string { - return "ESM3_PathGrid[" + rec.mCell.toDebugString() + "]"; - }; - pathGridT["getPoints"] = [](sol::this_state lua, const ESM::Pathgrid& rec) -> sol::table { - sol::table points(lua, sol::create); - for (const ESM::Pathgrid::Point& point : rec.mPoints) - { - sol::table table(lua, sol::create); - table["autoGenerated"] = point.mAutogenerated == 0; - table["relativePosition"] = osg::Vec3f(point.mX, point.mY, point.mZ); - sol::table edges(lua, sol::create); - table["connections"] = edges; - points.add(table); - } - for (const ESM::Pathgrid::Edge& edge : rec.mEdges) - { - sol::table p1 = points[edge.mV0 + 1]; - sol::table p2 = points[edge.mV1 + 1]; - p1.get("connections").add(p2); - p2.get("connections").add(p1); - } - return points; - }; - - view["openmw_cellbindings"] = true; + if (context.initializeOnce("openmw_cellbindings")) + { + auto pathGridT = view.new_usertype("ESM3_PathGrid"); + pathGridT[sol::meta_function::to_string] = [](const ESM::Pathgrid& rec) -> std::string { + return "ESM3_PathGrid[" + rec.mCell.toDebugString() + "]"; + }; + pathGridT["getPoints"] = [](sol::this_state lua, const ESM::Pathgrid& rec) -> sol::table { + sol::table points(lua, sol::create); + for (const ESM::Pathgrid::Point& point : rec.mPoints) + { + sol::table table(lua, sol::create); + table["autoGenerated"] = point.mAutogenerated == 0; + table["relativePosition"] = osg::Vec3f(point.mX, point.mY, point.mZ); + sol::table edges(lua, sol::create); + table["connections"] = edges; + points.add(table); + } + for (const ESM::Pathgrid::Edge& edge : rec.mEdges) + { + sol::table p1 = points[edge.mV0 + 1]; + sol::table p2 = points[edge.mV1 + 1]; + p1.get("connections").add(p2); + p2.get("connections").add(p1); + } + return points; + }; + } } void initCellBindingsForLocalScripts(const Context& context)