From 7d610b7c80487cd7a6e66f55c9c3b1190e5dfc7f Mon Sep 17 00:00:00 2001 From: Zefram Date: Mon, 18 Aug 2014 17:09:37 +0100 Subject: [PATCH] Tube capability for tool workshop Tool workshop can now accept tools to repair via tube. It has upgrade slots. Battery upgrade reduces its power consumption. Tube upgrade makes it eject fully-repaired (or unrepairable) items via tube. --- technic/machines/MV/tool_workshop.lua | 34 ++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/technic/machines/MV/tool_workshop.lua b/technic/machines/MV/tool_workshop.lua index 1026718..a1f9a21 100644 --- a/technic/machines/MV/tool_workshop.lua +++ b/technic/machines/MV/tool_workshop.lua @@ -14,10 +14,15 @@ minetest.register_craft({ } }) +local workshop_demand = {5000, 3500, 2000} + local workshop_formspec = "invsize[8,9;]".. "list[current_name;src;3,1;1,1;]".. "label[0,0;"..S("%s Tool Workshop"):format("MV").."]".. + "list[current_name;upgrade1;1,3;1,1;]".. + "list[current_name;upgrade2;2,3;1,1;]".. + "label[1,4;"..S("Upgrade Slots").."]".. "list[current_player;main;0,5;8,4;]" local run = function(pos, node) @@ -26,15 +31,16 @@ local run = function(pos, node) local eu_input = meta:get_int("MV_EU_input") local machine_name = S("%s Tool Workshop"):format("MV") local machine_node = "technic:tool_workshop" - local demand = 5000 -- Setup meta data if it does not exist. if not eu_input then - meta:set_int("MV_EU_demand", demand) + meta:set_int("MV_EU_demand", workshop_demand[1]) meta:set_int("MV_EU_input", 0) return end + local EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + local repairable = false local srcstack = inv:get_stack("src", 1) if not srcstack:is_empty() then @@ -46,27 +52,32 @@ local run = function(pos, node) repairable = true end end + technic.handle_machine_pipeworks(pos, tube_upgrade, function (pos, x_velocity, z_velocity) + if not repairable then + technic.send_items(pos, x_velocity, z_velocity, "src") + end + end) if not repairable then meta:set_string("infotext", S("%s Idle"):format(machine_name)) meta:set_int("MV_EU_demand", 0) return end - if eu_input < demand then + if eu_input < workshop_demand[EU_upgrade+1] then meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) - elseif eu_input >= demand then + elseif eu_input >= workshop_demand[EU_upgrade+1] then meta:set_string("infotext", S("%s Active"):format(machine_name)) srcstack:add_wear(-1000) inv:set_stack("src", 1, srcstack) end - meta:set_int("MV_EU_demand", demand) + meta:set_int("MV_EU_demand", workshop_demand[EU_upgrade+1]) end minetest.register_node("technic:tool_workshop", { description = S("%s Tool Workshop"):format("MV"), tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"}, - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_machine=1}, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_machine=1, tubedevice=1, tubedevice_receiver=1}, sounds = default.node_sound_wood_defaults(), on_construct = function(pos) local meta = minetest.get_meta(pos) @@ -74,10 +85,21 @@ minetest.register_node("technic:tool_workshop", { meta:set_string("formspec", workshop_formspec) local inv = meta:get_inventory() inv:set_size("src", 1) + inv:set_size("upgrade1", 1) + inv:set_size("upgrade2", 1) end, can_dig = technic.machine_can_dig, allow_metadata_inventory_put = technic.machine_inventory_put, allow_metadata_inventory_take = technic.machine_inventory_take, + tube = { + can_insert = function (pos, node, stack, direction) + return minetest.get_meta(pos):get_inventory():room_for_item("src", stack) + end, + insert_object = function (pos, node, stack, direction) + return minetest.get_meta(pos):get_inventory():add_item("src", stack) + end, + connect_sides = {left = 1, right = 1, back = 1, top = 1, bottom = 1}, + }, technic_run = run, })