From: Zefram Date: Mon, 18 Aug 2014 16:09:37 +0000 (+0100) Subject: Tube capability for tool workshop X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=7d610b7c80487cd7a6e66f55c9c3b1190e5dfc7f;p=zefram%2Fminetest%2Ftechnic.git 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. --- 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, })