From 85a10404c799475fcb3e43680cd6f1a174e66644 Mon Sep 17 00:00:00 2001 From: Johannes Fritz Date: Thu, 20 Apr 2023 09:36:33 -0500 Subject: [PATCH] Flatten out contact detection code --- mesecons_pressureplates/init.lua | 59 +++++++++++++++++--------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/mesecons_pressureplates/init.lua b/mesecons_pressureplates/init.lua index 26f131f..431828b 100644 --- a/mesecons_pressureplates/init.lua +++ b/mesecons_pressureplates/init.lua @@ -21,36 +21,39 @@ local function pp_on_timer(pos) local function obj_touching_plate_pos(obj_ref, plate_pos) local obj_pos = obj_ref:get_pos() local props = obj_ref:get_properties() - local parent = obj_ref:get_attach() - if props and obj_pos and not parent then - local collisionbox = props.collisionbox - local physical = props.physical - local is_player = obj_ref:is_player() - local luaentity = obj_ref:get_luaentity() - local is_item = luaentity and luaentity.name == "__builtin:item" - if collisionbox and physical or is_player or is_item then - local plate_x_min = plate_pos.x - 7 / 16 - local plate_x_max = plate_pos.x + 7 / 16 - local plate_z_min = plate_pos.z - 7 / 16 - local plate_z_max = plate_pos.z + 7 / 16 - local plate_y_max = plate_pos.y - 6.5 / 16 + if not (props and obj_pos and not obj_ref:get_attach()) then + return false + end - local obj_x_min = obj_pos.x + collisionbox[1] - local obj_x_max = obj_pos.x + collisionbox[4] - local obj_z_min = obj_pos.z + collisionbox[3] - local obj_z_max = obj_pos.z + collisionbox[6] - local obj_y_min = obj_pos.y + collisionbox[2] + local collisionbox = props.collisionbox + local physical = props.physical + local is_player = obj_ref:is_player() + local luaentity = obj_ref:get_luaentity() + local is_item = luaentity and luaentity.name == "__builtin:item" + if not (collisionbox and physical or is_player or is_item) then + return false + end - if - obj_y_min <= plate_y_max and - obj_x_min < plate_x_max and - obj_x_max > plate_x_min and - obj_z_min < plate_z_max and - obj_z_max > plate_z_min - then - return true - end - end + local plate_x_min = plate_pos.x - 7 / 16 + local plate_x_max = plate_pos.x + 7 / 16 + local plate_z_min = plate_pos.z - 7 / 16 + local plate_z_max = plate_pos.z + 7 / 16 + local plate_y_max = plate_pos.y - 6.5 / 16 + + local obj_x_min = obj_pos.x + collisionbox[1] + local obj_x_max = obj_pos.x + collisionbox[4] + local obj_z_min = obj_pos.z + collisionbox[3] + local obj_z_max = obj_pos.z + collisionbox[6] + local obj_y_min = obj_pos.y + collisionbox[2] + + if + obj_y_min <= plate_y_max and + obj_x_min < plate_x_max and + obj_x_max > plate_x_min and + obj_z_min < plate_z_max and + obj_z_max > plate_z_min + then + return true end return false end