technic-cd2025/technic_cnc/pipeworks.lua
SX 96eb3b2016 CNC Mk2 (#183)
* CNC Mk2

* Formspec protection, mk2 textures, more digiline commands, fix digging

* Documentation, adjust formspec, add tests, adjust API and digilines

* Fix CLU and filter injectors, add few interaction tests

* Upgrade machines, adjust formspecs and textures, add few tests

* Adjust formspec, do check protection for quit event

* Remove unnecessary real_coordinates
2021-06-13 23:33:30 +03:00

64 lines
2.3 KiB
Lua

local S = minetest.get_translator("pipeworks")
local tube_entry = "^pipeworks_tube_connection_metallic.png"
local button_base = "image_button[%0.1f,%0.1f;1,0.6"
local button_label = "label[%0.1f,%0.1f;" .. S("Allow splitting incoming stacks from tubes") .. "]"
local cycling_buttons = { pipeworks.button_off, pipeworks.button_on }
local fs_helpers = pipeworks.fs_helpers
local pipeworks_on_receive_fields = pipeworks.fs_helpers.on_receive_fields
local function new_tube()
return {
insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:add_item("src", stack)
end,
can_insert = technic_cnc.use_technic and technic.default_can_insert or function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:room_for_item("src", stack)
end,
connect_sides = {left=1, right=1, back=1, bottom=1},
input_inventory = {"dst"},
}
end
local function tube_entry_overlay(tiles)
assert(type(tiles) == "table" and #tiles == 6, "tube_entry_overlay requires table with 6 elements")
return {
tiles[1], tiles[2] .. tube_entry, tiles[3] .. tube_entry,
tiles[4] .. tube_entry, tiles[5] .. tube_entry, tiles[6],
}
end
local function cycling_button(meta, name, x, y)
local form_buttons = fs_helpers.cycling_button(meta, button_base:format(x, y), name, cycling_buttons)
return form_buttons .. button_label:format(x + 1.2, y + 0.31)
end
-- Pipeworks does not provide API to selectively silence protection messages.
-- This wrapper handles pipeworks cycling buttons without sending unnecessary protection messages.
local function on_receive_fields(pos, meta, fields, sender, update_formspec)
-- https://gitlab.com/VanessaE/pipeworks/-/blob/master/common.lua#L115
for field,_ in pairs(fields) do
if pipeworks.string_startswith(field, "fs_helpers_cycling:") then
if pipeworks.may_configure(pos, sender) then
pipeworks_on_receive_fields(pos, fields)
update_formspec(meta)
end
-- Handled and protection message sent if necessary
return true
end
end
-- Not handled, caller may continue processing
return false
end
return {
new_tube = new_tube,
cycling_button = cycling_button,
on_receive_fields = on_receive_fields,
tube_entry_overlay = tube_entry_overlay,
}