summaryrefslogtreecommitdiffstats
path: root/src/Bindings/ManualBindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Bindings/ManualBindings.cpp')
-rw-r--r--src/Bindings/ManualBindings.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp
index 91e80acbc..9945929d0 100644
--- a/src/Bindings/ManualBindings.cpp
+++ b/src/Bindings/ManualBindings.cpp
@@ -37,6 +37,7 @@
#include "../CommandOutput.h"
#include "../BuildInfo.h"
#include "../HTTP/UrlParser.h"
+#include "../BoundingBox.h"
@@ -3143,6 +3144,80 @@ static int tolua_cBlockArea_SaveToSchematicString(lua_State * tolua_S)
+static int tolua_cBoundingBox_CalcLineIntersection(lua_State * a_LuaState)
+{
+ /* Function signatures:
+ bbox:CalcLineIntersection(pt1, pt2) -> bool, [number, blockface]
+ cBoundingBox:CalcLineIntersection(min, max, pt1, pt2) -> bool, [number, blockface]
+ */
+ cLuaState L(a_LuaState);
+ const Vector3d * min;
+ const Vector3d * max;
+ const Vector3d * pt1;
+ const Vector3d * pt2;
+ double lineCoeff;
+ eBlockFace blockFace;
+ bool res;
+ if (L.GetStackValues(2, min, max, pt1, pt2)) // Try the static signature first
+ {
+ res = cBoundingBox::CalcLineIntersection(min, max, pt1, pt2, lineCoeff, blockFace);
+ }
+ else
+ {
+ const cBoundingBox * bbox;
+ if (!L.GetStackValues(1, bbox, pt1, pt2)) // Try the regular signature
+ {
+ L.LogStack();
+ tolua_error(a_LuaState, "Invalid function params. Expected either bbox:CalcLineIntersection(pt1, pt2) or cBoundingBox:CalcLineIntersection(min, max, pt1, pt2).", nullptr);
+ return 0;
+ }
+ res = bbox->CalcLineIntersection(pt1, pt2, lineCoeff, blockFace);
+ }
+ L.Push(res);
+ if (res)
+ {
+ L.Push(lineCoeff);
+ L.Push(blockFace);
+ return 3;
+ }
+ return 1;
+}
+
+
+
+
+
+static int tolua_cBoundingBox_Intersect(lua_State * a_LuaState)
+{
+ /* Function signature:
+ bbox:Intersect(a_OtherBbox) -> bool, cBoundingBox
+ */
+ cLuaState L(a_LuaState);
+ const cBoundingBox * self;
+ const cBoundingBox * other;
+ if (!L.GetStackValues(1, self, other))
+ {
+ L.LogStack();
+ tolua_error(a_LuaState, "Invalid function params. Expected bbox:Intersect(otherBbox).", nullptr);
+ return 0;
+ }
+ auto intersection = new cBoundingBox(*self);
+ auto res = self->Intersect(*other, *intersection);
+ L.Push(res);
+ if (!res)
+ {
+ delete intersection;
+ return 1;
+ }
+ L.Push(intersection);
+ tolua_register_gc(L, lua_gettop(L)); // Make Lua own the "intersection" object
+ return 2;
+}
+
+
+
+
+
static int tolua_cCompositeChat_AddRunCommandPart(lua_State * tolua_S)
{
// function cCompositeChat:AddRunCommandPart(Message, Command, [Style])
@@ -3431,6 +3506,11 @@ void cManualBindings::Bind(lua_State * tolua_S)
tolua_function(tolua_S, "SaveToSchematicString", tolua_cBlockArea_SaveToSchematicString);
tolua_endmodule(tolua_S);
+ tolua_beginmodule(tolua_S, "cBoundingBox");
+ tolua_function(tolua_S, "CalcLineIntersection", tolua_cBoundingBox_CalcLineIntersection);
+ tolua_function(tolua_S, "Intersect", tolua_cBoundingBox_Intersect);
+ tolua_endmodule(tolua_S);
+
tolua_beginmodule(tolua_S, "cClientHandle");
tolua_constant(tolua_S, "MAX_VIEW_DISTANCE", cClientHandle::MAX_VIEW_DISTANCE);
tolua_constant(tolua_S, "MIN_VIEW_DISTANCE", cClientHandle::MIN_VIEW_DISTANCE);