From 4a9ca006d645dc5d387bbf0577501b62f87f010a Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Sat, 1 Feb 2020 22:00:58 +0100 Subject: [PATCH] bugfixes --- basic_machines/consumer.lua | 16 +++- basis/assemble.lua | 28 +++--- basis/boiler_lib.lua | 32 ++++++- basis/networks.lua | 2 + basis/node_states.lua | 17 +--- coal_power_station/turbine.lua | 16 ++-- energy_storage/heatexchanger.lua | 20 ++-- energy_storage/turbine.lua | 20 ++-- furnace/booster.lua | 26 ++++-- furnace/firebox.lua | 25 ++++- furnace/furnace_top.lua | 4 +- init.lua | 28 +++--- items/hydrogen.lua | 43 +++++++++ liquids/fuel_lib.lua | 101 ++++++++++++++++---- liquids/liquid.lua | 9 +- locale/techage.de.tr | 2 +- oil/distiller.lua | 2 +- oil/drillbox.lua | 60 ++++++------ oil/explore.lua | 2 +- oil/pumpjack.lua | 80 +++++++++++----- oil/reboiler.lua | 143 +++++++++++++++------------- oil/tower.lua | 2 +- power/node_api.lua | 2 +- sounds/techage_booster.ogg | Bin 17790 -> 16776 bytes sounds/techage_generator.ogg | Bin 18919 -> 13969 bytes sounds/techage_oildrill.ogg | Bin 14580 -> 8599 bytes sounds/techage_reboiler.ogg | Bin 20407 -> 11682 bytes steam_engine/cylinder.lua | 16 ++-- ta3_power/tiny_generator.lua | 154 +++++++++++++++++-------------- 29 files changed, 543 insertions(+), 307 deletions(-) create mode 100644 items/hydrogen.lua diff --git a/basic_machines/consumer.lua b/basic_machines/consumer.lua index 548b926..7629152 100644 --- a/basic_machines/consumer.lua +++ b/basic_machines/consumer.lua @@ -29,6 +29,8 @@ local CRDN = function(node) return (minetest.registered_nodes[node.name] or {}). local power = techage.power local networks = techage.networks +local Pipe = techage.LiquidPipe +local liquid = techage.liquid local function has_power(pos, nvm, state) local crd = CRD(pos) @@ -115,19 +117,22 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState power_png = 'techage_appl_hole_electric.png' tNetworks = { ele1 = { - sides = tNode.power_sides or {F=1, B=1}, + sides = tNode.power_sides or {F=1, B=1, U=1, D=1}, ntype = "con1", nominal = tNode.power_consumption[stage], on_power = on_power, on_nopower = on_nopower, }, } + if tNode.networks and tNode.networks.pipe2 then + tNetworks.pipe2 = tNode.networks.pipe2 + end else power_network = techage.Axle power_png = 'techage_axle_clutch.png' tNetworks = { axle = { - sides = tNode.power_sides or {F=1, B=1}, + sides = tNode.power_sides or {F=1, B=1, U=1, D=1}, ntype = "con1", nominal = tNode.power_consumption[stage], on_power = on_power, @@ -196,7 +201,12 @@ function techage.register_consumer(base_name, inv_name, tiles, tNode, validState end local tubelib2_on_update2 = function(pos, outdir, tlib2, node) - power.update_network(pos, outdir, tlib2) + print("tubelib2_on_update2", tlib2.tube_type) + if tlib2.tube_type == "pipe2" then + liquid.update_network(pos, outdir, tlib2) + else + power.update_network(pos, outdir, tlib2) + end end tNode.groups.not_in_creative_inventory = 0 diff --git a/basis/assemble.lua b/basis/assemble.lua index 5c2f376..8a39207 100644 --- a/basis/assemble.lua +++ b/basis/assemble.lua @@ -51,8 +51,8 @@ local function build(pos, param2, AssemblyPlan, idx) minetest.add_node(pos1, {name=node_name, param2=(param2 + fd_offs) % 4}) minetest.after(0.5, build, pos, param2, AssemblyPlan, idx+1) else - local mem = techage.get_mem(pos) - mem.assemble_locked = false + local nvm = techage.get_nvm(pos) + nvm.assemble_locked = false end end @@ -65,8 +65,8 @@ local function remove(pos, param2, AssemblyPlan, idx) minetest.remove_node(pos1) minetest.after(0.5, remove, pos, param2, AssemblyPlan, idx-1) else - local mem = techage.get_mem(pos) - mem.assemble_locked = false + local nvm = techage.get_nvm(pos) + nvm.assemble_locked = false end end @@ -91,22 +91,22 @@ end -- Two important flags: --- 1) mem.assemble_locked is true while the object is being assembled/disassembled --- 2) mem.assemble_build is true if the object is assembled +-- 1) nvm.assemble_locked is true while the object is being assembled/disassembled +-- 2) nvm.assemble_build is true if the object is assembled function techage.assemble.build(pos, AssemblyPlan, player_name) -- check protection if minetest.is_protected(pos, player_name) then return end - local mem = techage.get_mem(pos) - if mem.assemble_locked then + local nvm = techage.get_nvm(pos) + if nvm.assemble_locked then return end local node = minetest.get_node(pos) if check_space(pos, node.param2, AssemblyPlan, player_name) then - mem.assemble_locked = true + nvm.assemble_locked = true build(pos, node.param2, AssemblyPlan, 1) - mem.assemble_build = true + nvm.assemble_build = true end end @@ -115,12 +115,12 @@ function techage.assemble.remove(pos, AssemblyPlan, player_name) if minetest.is_protected(pos, player_name) then return end - local mem = techage.get_mem(pos) - if mem.assemble_locked then + local nvm = techage.get_nvm(pos) + if nvm.assemble_locked then return end local node = minetest.get_node(pos) - mem.assemble_locked = true + nvm.assemble_locked = true remove(pos, node.param2, AssemblyPlan, #AssemblyPlan) - mem.assemble_build = false + nvm.assemble_build = false end diff --git a/basis/boiler_lib.lua b/basis/boiler_lib.lua index 316f75c..f93b747 100644 --- a/basis/boiler_lib.lua +++ b/basis/boiler_lib.lua @@ -97,6 +97,20 @@ function techage.boiler.can_dig(pos, player) return nvm.num_water == 0 end +local function space_in_inventory(wielded_item, item_count, puncher) + -- check if holding more than 1 empty container + if item_count > 1 then + local inv = puncher:get_inventory() + local item = ItemStack({name=wielded_item, count = item_count - 1}) + if inv:room_for_item("main", item) then + inv:add_item("main", item) + return true + end + return false + end + return true +end + function techage.boiler.on_punch(pos, node, puncher, pointed_thing) local nvm = techage.get_nvm(pos) local mem = techage.get_mem(pos) @@ -107,15 +121,27 @@ function techage.boiler.on_punch(pos, node, puncher, pointed_thing) nvm.num_water = nvm.num_water or 0 local wielded_item = puncher:get_wielded_item():get_name() + local item_count = puncher:get_wielded_item():get_count() if IsWater[wielded_item] and nvm.num_water < MAX_WATER then mem.blocking_time = techage.SystemTime + BLOCKING_TIME nvm.num_water = nvm.num_water + 1 puncher:set_wielded_item(ItemStack("bucket:bucket_empty")) M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm)) elseif IsBucket[wielded_item] and nvm.num_water > 0 then - mem.blocking_time = techage.SystemTime + BLOCKING_TIME - nvm.num_water = nvm.num_water - 1 - puncher:set_wielded_item(ItemStack("bucket:bucket_water")) + if item_count > 1 then + local inv = puncher:get_inventory() + local item = ItemStack("bucket:bucket_water") + if inv:room_for_item("main", item) then + inv:add_item("main", item) + puncher:set_wielded_item({name=wielded_item, count = item_count - 1}) + mem.blocking_time = techage.SystemTime + BLOCKING_TIME + nvm.num_water = nvm.num_water - 1 + end + else + mem.blocking_time = techage.SystemTime + BLOCKING_TIME + nvm.num_water = nvm.num_water - 1 + puncher:set_wielded_item(ItemStack("bucket:bucket_water")) + end M(pos):set_string("formspec", techage.boiler.formspec(pos, nvm)) end end diff --git a/basis/networks.lua b/basis/networks.lua index caf59ba..b991a3f 100644 --- a/basis/networks.lua +++ b/basis/networks.lua @@ -335,8 +335,10 @@ function techage.networks.get_network(tube_type, netID) end function techage.networks.delete_network(tube_type, netID) + print("delete_network", tube_type, string.format("%012X", netID)) if Networks[tube_type] and Networks[tube_type][netID] then Networks[tube_type][netID] = nil + print("deleted") end end diff --git a/basis/node_states.lua b/basis/node_states.lua index 3c18cae..05f0b0f 100644 --- a/basis/node_states.lua +++ b/basis/node_states.lua @@ -273,7 +273,7 @@ function NodeStates:start(pos, nvm) return false end -function NodeStates:standby(pos, nvm) +function NodeStates:standby(pos, nvm, err_string) local state = nvm.techage_state or STOPPED if state == RUNNING then nvm.techage_state = STANDBY @@ -282,10 +282,10 @@ function NodeStates:standby(pos, nvm) end if self.infotext_name then local number = M(pos):get_string("node_number") - M(pos):set_string("infotext", self.infotext_name.." "..number..": standby") + M(pos):set_string("infotext", self.infotext_name.." "..number..": "..(err_string or "standby")) end if self.formspec_func then - nvm.ta_state_tooltip = "standby" + nvm.ta_state_tooltip = err_string or "standby" M(pos):set_string("formspec", self.formspec_func(self, pos, nvm)) end if self.on_state_change then @@ -331,7 +331,7 @@ function NodeStates:nopower(pos, nvm, err_string) end if self.infotext_name then local number = M(pos):get_string("node_number") - M(pos):set_string("infotext", self.infotext_name.." "..number..": no power") + M(pos):set_string("infotext", self.infotext_name.." "..number..": "..(err_string or "no power")) end if self.formspec_func then nvm.ta_state_tooltip = err_string or "no power" @@ -514,15 +514,6 @@ function NodeStates:on_node_load(pos, not_start_timer) elseif state == BLOCKED then minetest.get_node_timer(pos):start(self.cycle_time * self.standby_ticks) end - - if self.formspec_func then - M(pos):set_string("formspec", self.formspec_func(self, pos, nvm)) - end - - -- power available? - if nvm.techage_state == RUNNING and not self.has_power(pos, nvm, state) then - self:nopower(pos, nvm) - end end minetest.register_node("techage:defect_dummy", { diff --git a/coal_power_station/turbine.lua b/coal_power_station/turbine.lua index 67f0c63..42f76b4 100644 --- a/coal_power_station/turbine.lua +++ b/coal_power_station/turbine.lua @@ -39,13 +39,15 @@ end local function play_sound(pos) local mem = techage.get_mem(pos) - mem.handle = minetest.sound_play("techage_turbine", { - pos = pos, - gain = 1, - max_hear_distance = 15, - loop = true}) - if mem.handle == -1 then - minetest.after(1, play_sound, pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_turbine", { + pos = pos, + gain = 1, + max_hear_distance = 15, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end diff --git a/energy_storage/heatexchanger.lua b/energy_storage/heatexchanger.lua index 7012cec..65cf00e 100644 --- a/energy_storage/heatexchanger.lua +++ b/energy_storage/heatexchanger.lua @@ -69,20 +69,24 @@ local function inlet_cmnd(pos, cmnd, payload) end local function play_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.running then - nvm.handle = minetest.sound_play("techage_booster", { + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_booster", { pos = pos, gain = 0.5, - max_hear_distance = 10}) + max_hear_distance = 10, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end local function stop_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.running and nvm.handle then - minetest.sound_stop(nvm.handle) - nvm.handle = nil + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil end end diff --git a/energy_storage/turbine.lua b/energy_storage/turbine.lua index 7b5fc6c..2974f82 100644 --- a/energy_storage/turbine.lua +++ b/energy_storage/turbine.lua @@ -30,20 +30,24 @@ local function swap_node(pos, name) end local function play_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.running then - nvm.handle = minetest.sound_play("techage_turbine", { + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_turbine", { pos = pos, gain = 0.5, - max_hear_distance = 10}) + max_hear_distance = 10, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end local function stop_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.running and nvm.handle then - minetest.sound_stop(nvm.handle) - nvm.handle = nil + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil end end diff --git a/furnace/booster.lua b/furnace/booster.lua index f8ed79d..921faf2 100644 --- a/furnace/booster.lua +++ b/furnace/booster.lua @@ -39,13 +39,15 @@ end local function play_sound(pos) local mem = techage.get_mem(pos) - mem.handle = minetest.sound_play("techage_booster", { - pos = pos, - gain = 1, - max_hear_distance = 7, - loop = true}) - if mem.handle == -1 then - minetest.after(1, play_sound, pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_booster", { + pos = pos, + gain = 1, + max_hear_distance = 7, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end @@ -179,7 +181,8 @@ techage.register_node({"techage:ta3_booster", "techage:ta3_booster_on"}, { if M(pos):get_int("indir") == in_dir then local nvm = techage.get_nvm(pos) if topic == "power" then - return techage.get_node_lvm(pos).name == "techage:ta3_booster_on" + return techage.get_node_lvm(pos).name == "techage:ta3_booster_on" or + power.power_available(pos, Cable) elseif topic == "start" and not nvm.running then if power.power_available(pos, Cable) then nvm.running = true @@ -197,7 +200,12 @@ techage.register_node({"techage:ta3_booster", "techage:ta3_booster_on"}, { stop_sound(pos) end end - end + end, + on_node_load = function(pos, node) + if node.name == "techage:ta3_booster_on" then + play_sound(pos) + end + end, }) minetest.register_craft({ diff --git a/furnace/firebox.lua b/furnace/firebox.lua index 0f31142..395f67d 100644 --- a/furnace/firebox.lua +++ b/furnace/firebox.lua @@ -26,7 +26,6 @@ local EFFICIENCY = 2 -- burn cycles local CATEGORY = 3 local function has_fuel(pos, nvm) - print("has_fuel", nvm.burn_cycles, topic, payload) return nvm.burn_cycles > 0 or (nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0) end @@ -55,8 +54,11 @@ local function node_timer(pos, elapsed) return false end end - return true end + if techage.is_activeformspec(pos) then + M(pos):set_string("formspec", fuel.formspec(nvm)) + end + return true end local function start_firebox(pos, nvm) @@ -85,11 +87,23 @@ local _liquid = { peek = liquid.srv_peek, put = function(pos, indir, name, amount) if fuel.valid_fuel(name, fuel.BT_OIL) then - return liquid.srv_put(pos, indir, name, amount) + local res = liquid.srv_put(pos, indir, name, amount) + if techage.is_activeformspec(pos) then + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", fuel.formspec(nvm)) + end + return res end return amount end, - take = liquid.srv_take, + take = function(pos, indir, name, amount) + amount, name = liquid.srv_take(pos, indir, name, amount) + if techage.is_activeformspec(pos) then + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", fuel.formspec(nvm)) + end + return amount, name + end } local _networks = { @@ -121,6 +135,7 @@ minetest.register_node("techage:furnace_firebox", { allow_metadata_inventory_take = fuel.allow_metadata_inventory_take, allow_metadata_inventory_put = fuel.allow_metadata_inventory_put, on_metadata_inventory_put = fuel.on_metadata_inventory_put, + on_punch = fuel.on_punch, on_receive_fields = fuel.on_receive_fields, on_rightclick = fuel.on_rightclick, liquid = _liquid, @@ -174,6 +189,7 @@ minetest.register_node("techage:furnace_firebox_on", { allow_metadata_inventory_put = fuel.allow_metadata_inventory_put, allow_metadata_inventory_take = fuel.allow_metadata_inventory_take, on_receive_fields = fuel.on_receive_fields, + on_punch = fuel.on_punch, on_rightclick = fuel.on_rightclick, liquid = _liquid, networks = _networks, @@ -215,7 +231,6 @@ techage.register_node({"techage:furnace_firebox", "techage:furnace_firebox_on"}, on_transfer = function(pos, in_dir, topic, payload) local nvm = techage.get_nvm(pos) if topic == "fuel" then - print(dump(nvm)) return has_fuel(pos, nvm) and booster_cmnd(pos, "power") elseif topic == "running" then return nvm.running and booster_cmnd(pos, "power") diff --git a/furnace/furnace_top.lua b/furnace/furnace_top.lua index 58ac1e4..893600d 100644 --- a/furnace/furnace_top.lua +++ b/furnace/furnace_top.lua @@ -100,7 +100,7 @@ local function cooking(pos, crd, nvm, elapsed) crd.State:idle(pos, nvm) end else - crd.State:idle(pos, nvm) + crd.State:standby(pos, nvm, S("no fuel or no power")) end end end @@ -113,7 +113,6 @@ local function keep_running(pos, elapsed) if nvm.toggle then -- progress bar/arrow M(pos):set_string("formspec", formspec(crd.State, pos, nvm)) end - return crd.State:is_active(nvm) end local function allow_metadata_inventory_put(pos, listname, index, stack, player) @@ -186,6 +185,7 @@ local function can_start(pos, nvm, state) end local function on_node_state_change(pos, old_state, new_state) + print("on_node_state_change") local pwr1 = techage.needs_power2(old_state) local pwr2 = techage.needs_power2(new_state) if pwr1 ~= pwr2 then diff --git a/init.lua b/init.lua index 9ccf314..44e7b48 100644 --- a/init.lua +++ b/init.lua @@ -85,6 +85,12 @@ else dofile(MP.."/steam_engine/cylinder.lua") dofile(MP.."/steam_engine/flywheel.lua") + -- Liquids I + dofile(MP.."/liquids/liquid_pipe.lua") + dofile(MP.."/liquids/liquid.lua") + dofile(MP.."/liquids/liquid_lib.lua") + dofile(MP.."/liquids/fuel_lib.lua") + -- Basic Machines dofile(MP.."/basic_machines/consumer.lua") -- consumer base model dofile(MP.."/basic_machines/source.lua") @@ -100,14 +106,10 @@ else dofile(MP.."/basic_machines/funnel.lua") dofile(MP.."/basic_machines/liquidsampler.lua") --- -- Liquids - dofile(MP.."/liquids/liquid_pipe.lua") - dofile(MP.."/liquids/liquid.lua") - dofile(MP.."/liquids/liquid_lib.lua") + -- Liquids II dofile(MP.."/liquids/tank.lua") dofile(MP.."/liquids/silo.lua") dofile(MP.."/liquids/pump.lua") - dofile(MP.."/liquids/fuel_lib.lua") -- Coal power station dofile(MP.."/coal_power_station/firebox.lua") @@ -141,17 +143,17 @@ else dofile(MP.."/lamps/industriallamp3.lua") -- -- Oil --- dofile(MP.."/oil/explore.lua") --- dofile(MP.."/oil/tower.lua") --- dofile(MP.."/oil/drillbox.lua") --- dofile(MP.."/oil/pumpjack.lua") --- dofile(MP.."/oil/distiller.lua") --- dofile(MP.."/oil/reboiler.lua") + dofile(MP.."/oil/explore.lua") + dofile(MP.."/oil/tower.lua") + dofile(MP.."/oil/drillbox.lua") + dofile(MP.."/oil/pumpjack.lua") + dofile(MP.."/oil/distiller.lua") + dofile(MP.."/oil/reboiler.lua") -- dofile(MP.."/oil/gasflare.lua") -- TA3 power based - --dofile(MP.."/ta3_power/tiny_generator.lua") - --dofile(MP.."/ta3_power/akkubox.lua") + dofile(MP.."/ta3_power/tiny_generator.lua") + dofile(MP.."/ta3_power/akkubox.lua") -- Logic dofile(MP.."/logic/lib.lua") diff --git a/items/hydrogen.lua b/items/hydrogen.lua new file mode 100644 index 0000000..a4e3826 --- /dev/null +++ b/items/hydrogen.lua @@ -0,0 +1,43 @@ +--[[ + + TechAge + ======= + + Copyright (C) 2019 Joachim Stolberg + + GPL v3 + See LICENSE.txt for more information + + TA4 Hydrogen + +]]-- + +local S = techage.S + +minetest.register_craftitem("techage:hydrogen", { + description = S("TA4 Hydrogen"), + inventory_image = "techage_hydrogen_inv.png", +}) + +minetest.register_craftitem("techage:cylinder_small_hydrogen", { + description = S("Hydrogen Cylinder Small"), + inventory_image = "techage_gas_cylinder_small.png^[colorize:#00528A:120", + stack_max = 1, +}) + +minetest.register_craftitem("techage:cylinder_large_hydrogen", { + description = S("Hydrogen Cylinder Large"), + inventory_image = "techage_gas_cylinder_large.png^[colorize:#00528A:120", + stack_max = 1, +}) + +techage.register_liquid("techage:hydrogen", "", 1, "techage:hydrogen") +techage.register_liquid("techage:cylinder_small_hydrogen", "techage:ta3_cylinder_small", 1, "techage:hydrogen") +techage.register_liquid("techage:cylinder_large_hydrogen", "techage:ta3_cylinder_large", 6, "techage:hydrogen") + +techage.recipes.add("ta4_doser", { + output = "techage:hydrogen 1", + input = { + "techage:gas 1", + } +}) \ No newline at end of file diff --git a/liquids/fuel_lib.lua b/liquids/fuel_lib.lua index 322ab2b..299e0e5 100644 --- a/liquids/fuel_lib.lua +++ b/liquids/fuel_lib.lua @@ -25,6 +25,7 @@ local Burntime = techage.firebox.Burntime techage.fuel = {} local CAPACITY = 50 +local BLOCKING_TIME = 0.3 -- 300ms techage.fuel.CAPACITY = CAPACITY @@ -35,7 +36,7 @@ techage.fuel.BT_FUELOIL = 2 techage.fuel.BT_NAPHTHA = 1 -local function formspec_fuel(x, y, nvm) +function techage.fuel.fuel_container(x, y, nvm) local itemname = "" if nvm.liquid and nvm.liquid.name and nvm.liquid.amount and nvm.liquid.amount > 0 then itemname = nvm.liquid.name.." "..nvm.liquid.amount @@ -44,27 +45,25 @@ local function formspec_fuel(x, y, nvm) if nvm.running then fuel_percent = ((nvm.burn_cycles or 1) * 100) / (nvm.burn_cycles_total or 1) end + local tooltip = S("To add fuel punch\nthis block\nwith a fuel container") return "container["..x..","..y.."]".. - "background[0,0;3,1.05;techage_form_grey.png]".. - "list[context;fuel;0,0;1,1;]".. - techage.item_image(1, 0, itemname).. - "image[2,0;1,1;default_furnace_fire_bg.png^[lowpart:".. + "box[0,0;1.05,2.1;#000000]".. + "tooltip[0,0;1.1,1.1;"..tooltip..";#0C3D32;#FFFFFF]".. + "image[0.1,0.1;1,1;default_furnace_fire_bg.png^[lowpart:".. fuel_percent..":default_furnace_fire_fg.png]".. + techage.item_image(0.1, 1.1, itemname).. "container_end[]" end -techage.fuel.formspec_fuel = formspec_fuel - - function techage.fuel.formspec(nvm) - local update = ((nvm.countdown or 0) > 0 and nvm.countdown) or S("Update") - return "size[8,5]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - formspec_fuel(1, 0, nvm).. - "button[5,0;2,1;update;"..update.."]".. - "list[current_player;main;0,1.3;8,4;]" + local title = S("Fuel Menu") + return "size[4,3]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "box[0,-0.1;3.8,0.5;#c6e8ff]".. + "label[1,-0.1;"..minetest.colorize("#000000", title).."]".. + techage.fuel.fuel_container(1.5, 1, nvm) end local function fill_container(pos, inv, nvm) @@ -163,9 +162,9 @@ function techage.fuel.can_dig(pos, player) return inv:is_empty("fuel") and nvm.liquid.amount == 0 end -function techage.fuel.on_rightclick(pos) +function techage.fuel.on_rightclick(pos, node, clicker) + techage.set_activeformspec(pos, clicker) local nvm = techage.get_nvm(pos) - nvm.countdown = 10 M(pos):set_string("formspec", techage.fuel.formspec(nvm)) end @@ -196,3 +195,69 @@ end function techage.fuel.valid_fuel(name, category) return ValidOilFuels[name] and ValidOilFuels[name] <= category end + +-- check if the given empty container can be replaced by a full +-- container and added to the players inventory +local function fill(nvm, empty_container, item_count, puncher) + nvm.liquid = nvm.liquid or {} + nvm.liquid.amount = nvm.liquid.amount or 0 + local full_container = liquid.get_full_container(empty_container, nvm.liquid.name) + if empty_container and full_container then + local item = ItemStack(full_container) -- to be added + local ldef = liquid.get_liquid_def(full_container) + if ldef and nvm.liquid.amount - ldef.size >= 0 then + if item_count > 1 then -- can't be simply replaced? + -- check for extra free space + local inv = puncher:get_inventory() + if inv:room_for_item("main", item) then + -- add full container and return + -- the empty once - 1 + inv:add_item("main", item) + item = {name = empty_container, count = item_count - 1} + else + return -- no free space + end + end + nvm.liquid.amount = nvm.liquid.amount - ldef.size + if nvm.liquid.amount == 0 then + nvm.liquid.name = nil + end + return item -- to be added to the players inv. + end + end +end + +local function empty(nvm, full_container) + nvm.liquid = nvm.liquid or {} + nvm.liquid.amount = nvm.liquid.amount or 0 + local ldef = liquid.get_liquid_def(full_container) + if ldef and ValidOilFuels[ldef.inv_item] then + if not nvm.liquid.name or ldef.inv_item == nvm.liquid.name then + if nvm.liquid.amount + ldef.size <= CAPACITY then + nvm.liquid.amount = nvm.liquid.amount + ldef.size + nvm.liquid.name = ldef.inv_item + return ItemStack(ldef.container) + end + end + end +end + +function techage.fuel.on_punch(pos, node, puncher, pointed_thing) + local nvm = techage.get_nvm(pos) + local mem = techage.get_mem(pos) + mem.blocking_time = mem.blocking_time or 0 + if mem.blocking_time > techage.SystemTime then + return + end + + local wielded_item = puncher:get_wielded_item():get_name() + local item_count = puncher:get_wielded_item():get_count() + local new_item = fill(nvm, wielded_item, item_count, puncher) + or empty(nvm, wielded_item) + if new_item then + puncher:set_wielded_item(ItemStack(new_item)) + M(pos):set_string("formspec", techage.fuel.formspec(pos, nvm)) + mem.blocking_time = techage.SystemTime + BLOCKING_TIME + return + end +end diff --git a/liquids/liquid.lua b/liquids/liquid.lua index 358c2e4..e39187f 100644 --- a/liquids/liquid.lua +++ b/liquids/liquid.lua @@ -74,7 +74,7 @@ local function delete_netID(pos, outdir) end end end) - networks.delete_network(netID, Pipe) + networks.delete_network("pipe2", netID) end local function get_netID(pos, outdir) @@ -88,16 +88,19 @@ end local function get_network_table(pos, outdir, ntype) local netID = get_netID(pos, outdir) +print(1) if netID then +print(2) local netw = networks.get_network("pipe2", netID) if not netw then +print(3) netw = networks.collect_network_nodes(pos, outdir, Pipe) networks.set_network("pipe2", netID, netw) end - local s = minetest.pos_to_string(minetest.get_position_from_hash(netID)) - --print("netw", string.format("%012X", netID), s, dump(netw)) + print("netw", string.format("%012X", netID), dump(netw)) return netw[ntype] or {} end +print(4) return {} end diff --git a/locale/techage.de.tr b/locale/techage.de.tr index 0f067e9..1f905e9 100644 --- a/locale/techage.de.tr +++ b/locale/techage.de.tr @@ -77,7 +77,7 @@ Oil Drill Box=Ölbohrkiste Oil Pumpjack=Ölpumpe Oil Source=Erdöl Oil Tank=Öltank -Oil amount:=Ölmenge: +Oil amount=Ölmenge Other consumers=Weitere Verbraucher Outp=Ergeb. Plan=Plan diff --git a/oil/distiller.lua b/oil/distiller.lua index 3a092c2..64d803f 100644 --- a/oil/distiller.lua +++ b/oil/distiller.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information diff --git a/oil/drillbox.lua b/oil/drillbox.lua index d2f0392..5966e5b 100644 --- a/oil/drillbox.lua +++ b/oil/drillbox.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information @@ -19,7 +19,7 @@ local S = techage.S -- Consumer Related Data local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end -local STANDBY_TICKS = 4 +local STANDBY_TICKS = 1 local COUNTDOWN_TICKS = 6 local CYCLE_TIME = 16 @@ -31,21 +31,24 @@ local formspec0 = "size[5,4]".. "button_exit[1,3.2;3,1;build;"..S("Build derrick").."]" local function play_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.techage_state == techage.RUNNING then - nvm.handle = minetest.sound_play("techage_oildrill", { + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_oildrill", { pos = pos, gain = 1, - max_hear_distance = 15}) - minetest.after(4, play_sound, pos) + max_hear_distance = 15, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end local function stop_sound(pos) - local nvm = techage.get_nvm(pos) - if nvm.handle then - minetest.sound_stop(nvm.handle) - nvm.handle = nil + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil end end @@ -104,8 +107,9 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player return stack:get_count() end -local function on_rightclick(pos) +local function on_rightclick(pos, node, clicker) local nvm = techage.get_nvm(pos) + techage.set_activeformspec(pos, clicker) M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) end @@ -118,6 +122,7 @@ local function on_node_state_change(pos, old_state, new_state) end local function drilling(pos, crd, nvm, inv) + print("drilling") M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) nvm.drill_pos = nvm.drill_pos or {x=pos.x, y=pos.y-1, z=pos.z} local owner = M(pos):get_string("owner") @@ -127,12 +132,12 @@ local function drilling(pos, crd, nvm, inv) local ndef = minetest.registered_nodes[node.name] if not inv:contains_item("src", ItemStack("techage:oil_drillbit")) then - crd.State:idle(pos, nvm) + crd.State:idle(pos, nvm, S("Drill bits missing")) elseif curr_depth >= depth then M(pos):set_string("oil_found", "true") crd.State:stop(pos, nvm) elseif minetest.is_protected(nvm.drill_pos, owner) then - crd.State:fault(pos, nvm) + crd.State:fault(pos, nvm, S("Drill area is protected")) elseif node.name == "techage:oil_drillbit2" then nvm.drill_pos.y = nvm.drill_pos.y-1 crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS) @@ -156,7 +161,7 @@ local function drilling(pos, crd, nvm, inv) nvm.drill_pos.y = nvm.drill_pos.y-1 crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS) else - crd.State:fault(pos, nvm) + crd.State:fault(pos, nvm, S("block can't be dug")) end end @@ -167,7 +172,9 @@ local function keep_running(pos, elapsed) if inv then drilling(pos, crd, nvm, inv) end - return crd.State:is_active(nvm) + if techage.is_activeformspec(pos) then + M(pos):set_string("formspec", formspec(crd.State, pos, nvm)) + end end local function can_dig(pos, player) @@ -196,6 +203,7 @@ local function on_receive_fields(pos, formname, fields, player) else local nvm = techage.get_nvm(pos) if not nvm.assemble_locked and M(pos):get_string("oil_found") ~= "true" then + local nvm = techage.get_nvm(pos) CRD(pos).State:state_button_event(pos, nvm, fields) end end @@ -245,8 +253,12 @@ local tubing = { return "unsupported" end end, - on_node_load = function(pos) + on_node_load = function(pos, node) CRD(pos).State:on_node_load(pos) + local nvm = techage.get_nvm(pos) + if nvm.techage_state == techage.RUNNING then + play_sound(pos) + end end, } @@ -295,17 +307,3 @@ minetest.register_craft({ {"default:steel_ingot", "techage:vacuum_tube", "default:steel_ingot"}, }, }) - -minetest.register_lbm({ - label = "[techage] Oil Tower sound", - name = "techage:oil_tower", - nodenames = {"techage:ta3_drillbox_pas", "techage:ta3_drillbox_act"}, - run_at_every_load = true, - action = function(pos, node) - local nvm = techage.get_nvm(pos) - nvm.assemble_locked = false - if nvm.techage_state == techage.RUNNING then - play_sound(pos) - end - end -}) diff --git a/oil/explore.lua b/oil/explore.lua index adfd855..164c09d 100644 --- a/oil/explore.lua +++ b/oil/explore.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information diff --git a/oil/pumpjack.lua b/oil/pumpjack.lua index 99c0b1a..31a11ad 100644 --- a/oil/pumpjack.lua +++ b/oil/pumpjack.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information @@ -24,7 +24,7 @@ local liquid = techage.liquid local CRD = function(pos) return (minetest.registered_nodes[techage.get_node_lvm(pos).name] or {}).consumer end local CRDN = function(node) return (minetest.registered_nodes[node.name] or {}).consumer end -local STANDBY_TICKS = 10 +local STANDBY_TICKS = 1 local COUNTDOWN_TICKS = 10 local CYCLE_TIME = 8 @@ -52,53 +52,85 @@ local function formspec(self, pos, nvm) amount = techage.explore.get_oil_amount(P(storage_pos)) end return "size[5,3]".. - default.gui_bg.. - default.gui_bg_img.. - default.gui_slots.. - "image[0.5,0;1,1;techage_liquid2_inv.png^[colorize:#000000^techage_liquid1_inv.png]".. - "image[2,0;1,1;"..techage.get_power_image(pos, nvm).."]".. - "label[0,1.3;"..S("Oil amount:")..": "..amount.."]".. - "button[3,1.1;2,1;update;"..S("Update").."]".. - "image_button[2,2.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]" + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "box[0,-0.1;4.8,0.5;#c6e8ff]".. + "label[1.5,-0.1;"..minetest.colorize( "#000000", S("Pumpjack")).."]".. + "image[0.5,1.4;1,1;techage_liquid2_inv.png^[colorize:#000000^techage_liquid1_inv.png]".. + "image[4,0.8;1,1;"..techage.get_power_image(pos, nvm).."]".. + "tooltip[4,0.8;1,1;"..S("needs power").."]".. + "label[0,2.5;"..S("Oil amount")..": "..amount.."]".. + "image_button[2.5,2.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]" +end + +local function play_sound(pos) + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_reboiler", { + pos = pos, + gain = 1, + max_hear_distance = 15, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end + end +end + +local function stop_sound(pos) + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil + end +end + +local function on_node_state_change(pos, old_state, new_state) + if new_state == techage.RUNNING then + play_sound(pos) + else + stop_sound(pos) + end end local function on_rightclick(pos, node, clicker) local nvm = techage.get_nvm(pos) + techage.set_activeformspec(pos, clicker) M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) end local function pumping(pos, crd, meta, nvm) if has_oil(pos, meta) then local leftover = liquid.put(pos, 6, "techage:oil_source", 1) + print("pumping", dump(leftover)) if leftover and leftover > 0 then crd.State:blocked(pos, nvm) + stop_sound(pos) return end dec_oil_item(pos, meta) crd.State:keep_running(pos, nvm, COUNTDOWN_TICKS) return end - crd.State:fault(pos, nvm) + crd.State:fault(pos, nvm, S("no oil")) end local function keep_running(pos, elapsed) local nvm = techage.get_nvm(pos) local crd = CRD(pos) pumping(pos, crd, M(pos), nvm) - return crd.State:is_active(nvm) + if techage.is_activeformspec(pos) then + M(pos):set_string("formspec", formspec(crd.State, pos, nvm)) + end end local function on_receive_fields(pos, formname, fields, player) if minetest.is_protected(pos, player:get_player_name()) then return end - if fields.update then - local nvm = techage.get_nvm(pos) - M(pos):set_string("formspec", formspec(CRD(pos).State, pos, nvm)) - else - local nvm = techage.get_nvm(pos) - CRD(pos).State:state_button_event(pos, nvm, fields) - end + local nvm = techage.get_nvm(pos) + CRD(pos).State:state_button_event(pos, nvm, fields) end local tiles = {} @@ -149,8 +181,11 @@ local tubing = { return "unsupported" end end, - on_node_load = function(pos) + on_node_load = function(pos, node) CRD(pos).State:on_node_load(pos) + if node.name == "techage:ta3_pumpjack_act" then + play_sound(pos) + end end, } @@ -160,6 +195,7 @@ local _, node_name_ta3, _ = standby_ticks = STANDBY_TICKS, formspec = formspec, tubing = tubing, + on_state_change = on_node_state_change, after_place_node = function(pos, placer) local node = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) if node.name == "techage:oil_drillbit2" then @@ -176,9 +212,7 @@ local _, node_name_ta3, _ = ntype = "pump", }, }, - tubelib2_on_update2 = function(pos, outdir, tlib2, node) - liquid.update_network(pos, outdir) - end, + power_sides = {F=1, B=1, L=1, R=1, D=1}, on_rightclick = on_rightclick, on_receive_fields = on_receive_fields, node_timer = keep_running, diff --git a/oil/reboiler.lua b/oil/reboiler.lua index d20dab4..686dc4e 100644 --- a/oil/reboiler.lua +++ b/oil/reboiler.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information @@ -27,6 +27,28 @@ local CYCLE_TIME = 6 local CAPA = 12 local PWR_NEEDED = 14 +local function play_sound(pos) + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_reboiler", { + pos = pos, + gain = 1, + max_hear_distance = 15, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end + end +end + +local function stop_sound(pos) + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil + end +end + local function swap_node(pos, on) local nvm = techage.get_nvm(pos) if on then @@ -34,10 +56,7 @@ local function swap_node(pos, on) node.name = "techage:ta3_reboiler_on" minetest.swap_node(pos, node) minetest.get_node_timer(pos):start(CYCLE_TIME) - minetest.sound_play("techage_reboiler", { - pos = pos, - gain = 1, - max_hear_distance = 10}) + play_sound(pos) elseif not on and nvm.running then local node = techage.get_node_lvm(pos) node.name = "techage:ta3_reboiler" @@ -45,16 +64,15 @@ local function swap_node(pos, on) minetest.get_node_timer(pos):stop() nvm.running = false power.consumer_stop(pos, Cable) + stop_sound(pos) end end -local function on_power(pos, nvm) - if nvm.running then - swap_node(pos, true) - end +local function on_power(pos) + swap_node(pos, true) end -local function on_nopower(pos, nvm) +local function on_nopower(pos) swap_node(pos, false) end @@ -99,34 +117,32 @@ local function node_timer(pos, elapsed) swap_node(pos, false) return false end - minetest.sound_play("techage_reboiler", { - pos = pos, - gain = 1, - max_hear_distance = 10}) return true end swap_node(pos, false) return false end --- liquid -local function tubelib2_on_update2(pos, outdir, tlib2, node) - liquid.update_network(pos, outdir) +local function after_place_node(pos) + Pipe:after_place_node(pos) + Cable:after_place_node(pos) end --- power -local function after_tube_update(node, pos, out_dir, peer_pos, peer_in_dir) - power.after_tube_update2(node, pos, out_dir, peer_pos, peer_in_dir) -end - - -local function after_dig_node(pos, oldnode, oldmetadata, digger) +local function after_dig_node(pos, oldnode) Pipe:after_dig_node(pos) - power.after_dig_node(pos, oldnode) + Cable:after_dig_node(pos) techage.del_mem(pos) end -local _liquid = { +local function tubelib2_on_update2(pos, outdir, tlib2, node) + if tlib2 == Pipe then + liquid.update_network(pos, outdir) + else + power.update_network(pos, outdir, tlib2) + end +end + +local liquid_def = { capa = CAPA, peek = liquid.srv_peek, put = function(pos, indir, name, amount) @@ -148,11 +164,18 @@ local _liquid = { take = liquid.srv_take, } -local _networks = { +local net_def = { pipe2 = { sides = {L = true, R = true}, -- Pipe connection sides ntype = "tank", }, + ele1 = { + sides = techage.networks.AllSides, -- Cable connection sides + ntype = "con1", + on_power = on_power, + on_nopower = on_nopower, + nominal = PWR_NEEDED, + }, } minetest.register_node("techage:ta3_reboiler", { @@ -177,12 +200,13 @@ minetest.register_node("techage:ta3_reboiler", { power.after_place_node(pos) end, - tubelib2_on_update2 = tubelib2_on_update2, -- liquid - after_tube_update = after_tube_update, -- power + tubelib2_on_update2 = tubelib2_on_update2, on_timer = node_timer, + after_place_node = after_place_node, after_dig_node = after_dig_node, - liquid = _liquid, - networks = _networks, + after_dig_node = after_dig_node, + liquid = liquid_def, + networks = net_def, paramtype2 = "facedir", on_rotate = screwdriver.disallow, @@ -199,34 +223,32 @@ minetest.register_node("techage:ta3_reboiler_on", { "techage_filling_ta3.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", "techage_filling_ta3.png^techage_appl_hole_pipe.png^techage_frame_ta3.png", - { - image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png^[transformFX", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 32, - aspect_h = 32, - length = 2.0, + { + image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png^[transformFX", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 2.0, + }, }, - }, - { - image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 32, - aspect_h = 32, - length = 2.0, + { + image = "techage_filling4_ta3.png^techage_appl_reboiler4.png^techage_frame4_ta3.png", + backface_culling = false, + animation = { + type = "vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 2.0, + }, }, }, - }, - tubelib2_on_update2 = tubelib2_on_update2, -- liquid - after_tube_update = after_tube_update, -- power + tubelib2_on_update2 = tubelib2_on_update2, on_timer = node_timer, - after_dig_node = after_dig_node, - liquid = _liquid, - networks = _networks, + liquid = liquid_def, + networks = net_def, paramtype2 = "facedir", on_rotate = screwdriver.disallow, @@ -236,19 +258,8 @@ minetest.register_node("techage:ta3_reboiler_on", { sounds = default.node_sound_metal_defaults(), }) --- --- Liquids --- Pipe:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"}) - --- --- Power --- -techage.power.enrich_node({"techage:ta3_reboiler", "techage:ta3_reboiler_on"}, { - power_network = Cable, - on_power = on_power, - on_nopower = on_nopower, -}) +Cable:add_secondary_node_names({"techage:ta3_reboiler", "techage:ta3_reboiler_on"}) minetest.register_craft({ output = "techage:ta3_reboiler", diff --git a/oil/tower.lua b/oil/tower.lua index 4a6a100..42d1c44 100644 --- a/oil/tower.lua +++ b/oil/tower.lua @@ -3,7 +3,7 @@ TechAge ======= - Copyright (C) 2019 Joachim Stolberg + Copyright (C) 2019-2020 Joachim Stolberg GPL v3 See LICENSE.txt for more information diff --git a/power/node_api.lua b/power/node_api.lua index e5d4da4..85a8eb5 100644 --- a/power/node_api.lua +++ b/power/node_api.lua @@ -72,7 +72,7 @@ local function delete_netID(pos, outdir, Cable) end end end) - networks.delete_network(netID, Cable) + networks.delete_network(Cable.tube_type, netID) end -- Keep the network up and running diff --git a/sounds/techage_booster.ogg b/sounds/techage_booster.ogg index ad406f01d85f3a6a282912483813fe1fae6fc2e1..63faeadf5052717c03fac6b3d8d32b700cd9d61c 100644 GIT binary patch delta 12200 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 CV~gDY diff --git a/sounds/techage_generator.ogg b/sounds/techage_generator.ogg index 52c6014d13114e47cd9ba5053873f3e434bb88a9..17a2e62de35158c09ed945905c2ac01a8d85284b 100644 GIT binary patch delta 10471 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 delta 15460 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 PP(>&H1Mcbv2=)H}Wg2Wm diff --git a/sounds/techage_oildrill.ogg b/sounds/techage_oildrill.ogg index 162712cd55a242ab8fc6d01423881599f25df582..2300bc96b272249d4a2887747c6e9f73371b55c6 100644 GIT binary patch delta 5951 zcmXX~by!s0*Bwea1OxDv#x?uxj^7r3A^RB37ofSWC3%JNl#j6gy z5ifcIK!IvRd0?;?o*vt4(IDc@A3(Nrg7DuIlKP6kcV<-QIJBpV&ytU`NPjpAZy~th zH41D$#`*8azOB2mSlwfsXf~pbOujS()w2Jm96+# z3M83x;E?X~`To+koUmw_&!1k7y*q(Nm2GXy4W#sH=l;gAdq5FQ7A6s3Y&?0FZdhYF z|0B07%uy-MwG+jHN0T->$D_?yVY9d9{(*OWU2jS|z{h|?!cRwawgv45b`~=HGO4^T zx$Xi0^l?OI1_1y%Kqa$V_qt3fv!fG<)&zUOtB)Pi7r*F6n=Fi(Gw+b$xA0R3d)&47 z`-s-Z@hwbJLHwTr5HSJ(WCbw~U}xv!d$;%QOZHvrgO}ne3E%zbN5=P3j<-F^uZdO; zP`O4Qlz@-N7$&q%gmcyn7arS?|LwCF-~k|k8I|dz&2u|Ue~-eeyi;$Jm5b!l*2Tl`L62`@an`+*ZcmqrtlNz!4)d9vh7z-ti4L_9U~(2bi+%ZBf;l@FCBE~Umr zC5shdjL8LCkg&OlvnG|@dBOUrcsd0Zl7o^bLa9QtE6(kHB^k=sK+@k#hV7ISqJ27Z zWJ(U*N=)^g{dyP)Z(CpILk*^kE5jA}8Eoex{X@C@DA*?LSq&6K0An2B8luk--R9ds zTeYg|AxY<)d4ar@Rd>_D90aQaEorN4wzMW8L_D8nCH^E`W~S;(TqSbuJV8YTO7K*ZVj?9o> z$$BAA{8XB3tM?BbE((K!keX)_HK);Tb?v;Tr`}dC4#wN>33zs|kG~X;NCo9OWQp-3 zi2h;?ZH~^COljIZ|G0Y$D}KIrbbXZ)1n6Ufuu|#QKo?v^(qz-MmmKS5j70)QpG8`d zo}~Fsl)IjZ7g2YaJuisI{hIsj&U z3>lXXP0sH_Oe6x^%{S7icW`GKbs}`<+S#ok%gPw;M<=VZ% zb0ONtc_(t?f!;?df`GoVbbmA;Ml&T^L9naPAaHnj`Dr%Um;X9e3wEyq!BTb=0poTw zT(*A}ueE?3ccR$zTiwtAn^^}kA9OkYeDx(R#t%wbMi$QK^@i?&MU?aCBtnQJe7Nu( z+(GQ7-rRdAEnc5f)oH9#K6zeiL_)ybbzQUwby?}}+j?T=#;JFPVKn8T9kx`~ox>}s zTt<{(p`6b%!C-eyaASKwY4vZFO78Zs8Rt3==DHTu_~L>gzBP_t=Q7pQiM2!akxRVWPhu2kHkb$PgqRl~R@$ELR63kLs;z zXgtvpvYRHOU%kBCNKin^+D9X!w-o&^rc9QPCzf@l=J`VTP(Rsc()%pL>eU=4gd2Z9 zzhiUi4sz$R+K(z?ZSq6^O;QhhSGCSIWTe%!ByNQ}2E5oEudWWEqR@@E(1v#uNu4i4 zor}~>-i6lDc^d7F3h~73veZ%JFSMJU<~?C`T!Yvpy*Mivda)FP3qS#-c_Ipk2OsoY zrL82g?Rpz7aH3Lp1<56FiU2!m$Y!UCKxcwOvy6@-e(~z zPhIIYFCI~afCYTBlGwjz)^EB4Q0(A5J2u1pw^8c>xJiu-o8`W~VtEo54Ek1I^ch2 zR4oCEzHpIYV^fHIX**Ob>+^}hXEPD$rM0-#1$@Rxt%0#L&lpktz}dO3Y2rfxy5`h0 zHna12`)ksFtKryBcn;|fbqeZ|<+aH-@Flye+U_rxNz^|sBbCtU`jd3MX45i=7MUyX z@xuDRpqlj8qgI8u`BF_GOf0~Og!&~J_ieW-=AJDKG`>H*8yHz#FGI2rUIiBB22W0w z_7Ccha=fXJ>B;TCQcrX?iw6yBKP$6J-SM>a{bvBqLud!PaKX1|T#;_;2MdmQJuxR| zk8X90CS2z~qW!t>KJ@vZw8rm_zeX?P9AT1GBOexsdKJTH8g@4_w{XYG^)<0yRzSx^ zeExdqCM%OY|C<-rv@YqvC~mXY)1TtPTauZdHvL`+TVn7@{WG3X!OBh90W%HHAB!1? zO$;aC|Bg67ma6e+Lm|JIe6L`Rde0&^M8D}tXdKKcf)kL(&riZW{v1Lw{?2g8M3m@K zj`{6tWT7@#%O*)zmaF#5KN!$FY>3*gg1ykWjF6T=de0p)Ps4MBZNx6~~u_jz^s z21Pk-F>TSL&DPe{*T^jAVbL|F4NZn0@ZhUA_?Ue#2Y~bTeEu6;7(TZXT%r+k(RE)< zCEc!@zM-@_BK4AuW&V;YU>Fj4bRaTq`KV33aU-h zk?Os$gxgvg&RDiroUJ+XsHo70+`R*~a5tpzIO?dq1e;FNa~a?KSuV}B&-aFCtP-RI znY<48#{(Dq5&fFB2L~xp>rFJoC?u{Pop*1TD4J)App4V&L=;4h)Q!%yY>fA*7s6&a z#|$3{ED3&6H@`Z_=6DQ%_f^yK0H}54_osF~t%|Zg4H-)3f#y-BLg=m0AHThK78#{WfjT!KAdpwu-s}no zRLz}EZJlwrGXz#1;PLQIwVXV+~>o_M4lRt za3?x>+Es2iGI!*|+pdeoD2kfXSPI{9+C*;i$Ka5>(Dbx~3jg}p(A63H+bv6{GY+zY zzM?~H`J0mj04D!Hlr;b_kIt#b)5(30_KzE~h*+qm#Dq1~b@+h(uI6WnnNXK2rYo`O z+*Uy$oc9_FKf7?A%##vg@V;dz}ey@Tj9 zX9DyAGsPn~vKrgQ+XY(#@5>ve$AV~J%nmm_Lj+Gt?|I9XzwqtRXU#EaRx3eG!_emA z$0kF!@JIBcE5mIQq?iI(n+u`rM2_Ajhri8e5S*+r2v{$UjzQOY+;F}1dog+D=W*m_ zu!i!TlFEMCEuqb-&3iCZpvNdU%@5Qz*)r?!O-*tC z^Zq%sk=;@`J{rFM;YW18oJhG-7JmoL(Ai(Fc_g5gsr35MK@0mA`ar!`S!~r@LWb*R+Y6|!5Cr_O- zS`-3)32@F8`K5Vr+cFX2*WXJrMq|NMTBX#|-jt9@t{>n`;({ciYU4|A0b`)(yB%0< z-`0e^`s=-RGgYQY#}3zt$~5nKM$!|nw0^~(M~9w5jM_wIN`;&`4gyZX{wbSw2&W5D zB@8PvX^L51vEE3+!_FNJvyA?HsF$8If7LDbn^u)_f-uAaW|<6he%iId-~fkP-&B1_ zozzvMtsM9W&51&NE{p1n^JT=a6GIFbP4?~sVy98htq9R_su6htWExB=2hFLGzIkv! z-a6PNfPGOH21~GDYw2Hs;MGvU(jN#F%Oro1l_f_EjLP5fg6hC&jR5{{%-lI6!pXIG zr?INU)en}?%?oZE0|cCf`YLtUI7Wm#7T1F;jGEy6TjNoG&1F zw58wBXf}9UyQez6sOr-FwnA0)IQKiNn2i}D>3G^pAXVpKp)!~ffN2xJDc~uQ(@j?S z0ENNDCN^!c_f{?O8hBT^CNimBkBkFeNbxnK%?iG7-=GYocP+ZuwhUpbYTUe=|5~en zNe9Y=jFC~p4(5}>-@cJ=xgB|fep;+wC|f+mJAkiLZg}kA8JgZFKhk7N3sH9Z?B zcxXol#5)G0oc1%6sQ~{cY2Ydt{}VC*fPabw4(5F!?I=R0psb{v+=e|a{dzCx;RFe*63Q--Oxv^*%5d=S3 zBRSy?6gYxP*W5i0uasIqINcvI6R-z00@sUI9?LT!cB(z=#=`{2K@?AAH!|72my~kb-L> zH=p;gI&_Rt0?MO!A~-tT-c5%T*-A~So%wF1^MQVR3XPJ+ieP*N|4--3o3Er>3)ugK zcQrazS+bBUEwz8GP*0ys+$tgw%cyu1N&rArR(Ie4v zb-sRdw#D%x!c&zS28VP_g%FDmT%4!wlO_H&O}N|XNX{^=RR35e6N;xHFT$SMii70J zH1>yNXfmaSwY^$3UU8^eW#>&SR6fz|{>plf8ye=oxo7{u+8QOWSnsg z#_?<4z^lPooG}nIpNORxDt5A!vWQji8%6{0L#}0NK*yf)g=;JKT z!t@C){wHo$H*iPorZk{PUb7`49%x)+Jro?DTK<+zgIrcH#)~EZ1~%ytY-x=>`7W16 z(@IqY;vvOAfY>~S2zX z@eFO-B&_+JNc8wITKC&lKK{SL>I~o}&hj5WIg&F{40 zhYL(vEOo2@P~Ggm=;(4$A49&8{{9)b4_)?Zwv&gZv1|MSiM?BFPqw&1zQyVTQmYC^ zBq!!A%Z$cdiQ4dna%Meiqm5j0nifTC&;4|zA)_)9(=tU+Sz6#jB$Z&&&4|O}r+>WX z^J3YQ^Z-aMFb|hdX#)D9#007Hs~3F(f68I>JxDA)c-(_x%}Ou15=iIl$nk8&FehCCm`;;(4z&>2^2(@INAsMMD4p delta 11979 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 Z!UXuYT5VF~5%&ZBbi}qz06@$P`+u@+%o6|r diff --git a/sounds/techage_reboiler.ogg b/sounds/techage_reboiler.ogg index 2fbf2d7b21cf7906841d1189ef9ec9792e31e44f..ad89dc84e113583a4ae8c4c1ee4e0381d61500f5 100644 GIT binary patch delta 8129 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 diff --git a/steam_engine/cylinder.lua b/steam_engine/cylinder.lua index e31c0b4..7aafc07 100644 --- a/steam_engine/cylinder.lua +++ b/steam_engine/cylinder.lua @@ -34,13 +34,15 @@ end local function play_sound(pos) local mem = techage.get_mem(pos) - mem.handle = minetest.sound_play("techage_steamengine", { - pos = pos, - gain = 0.5, - max_hear_distance = 10, - loop = true}) - if mem.handle == -1 then - minetest.after(1, play_sound, pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_steamengine", { + pos = pos, + gain = 0.5, + max_hear_distance = 10, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end end end diff --git a/ta3_power/tiny_generator.lua b/ta3_power/tiny_generator.lua index f7a947f..84b1240 100644 --- a/ta3_power/tiny_generator.lua +++ b/ta3_power/tiny_generator.lua @@ -29,45 +29,61 @@ local PWR_CAPA = 12 local EFFICIENCY = 2.5 local function formspec(self, pos, nvm) - local fuel_percent = 0 - if nvm.running then - fuel_percent = ((nvm.burn_cycles or 1) * 100) / (nvm.burn_cycles_total or 1) - end - return "size[8,6]".. - --"box[0,-0.1;3.8,0.5;#c6e8ff]".. - --"label[1,-0.1;"..minetest.colorize( "#000000", S("Tiny Generator")).."]".. - --power.formspec_label_bar(0, 0.8, S("power"), PWR_CAPA, nvm.provided).. + return "size[5,4]".. default.gui_bg.. default.gui_bg_img.. default.gui_slots.. - fuel.formspec_fuel(1, 0, nvm).. - "button[1.6,1;1.8,1;update;"..S("Update").."]".. - "image_button[5.5,0.5;1,1;".. self:get_state_button_image(nvm) ..";state_button;]".. - "image[6.5,0;1,2;"..power.formspec_power_bar(PWR_CAPA, nvm.provided).."]".. - "list[current_player;main;0,2.3;8,4;]".. - default.get_hotbar_bg(0, 3) + "box[0,-0.1;4.8,0.5;#c6e8ff]".. + "label[1.5,-0.1;"..minetest.colorize( "#000000", S("Tiny Generator")).."]".. + fuel.fuel_container(0, 0.9, nvm).. + "image[1.4,1.6;1,1;techage_form_arrow_bg.png^[transformR270]".. + "image_button[1.4,3.2;1,1;".. self:get_state_button_image(nvm) ..";state_button;]".. + "tooltip[1.5,3;1,1;"..self:get_state_tooltip(nvm).."]".. + power.formspec_label_bar(2.5, 0.8, S("power"), PWR_CAPA, nvm.provided) +end + +local function play_sound(pos) + local mem = techage.get_mem(pos) + if not mem.handle or mem.handle == -1 then + mem.handle = minetest.sound_play("techage_generator", { + pos = pos, + gain = 1, + max_hear_distance = 10, + loop = true}) + if mem.handle == -1 then + minetest.after(1, play_sound, pos) + end + end +end + +local function stop_sound(pos) + local mem = techage.get_mem(pos) + if mem.handle then + minetest.sound_stop(mem.handle) + mem.handle = nil + end end local function can_start(pos, nvm, state) if nvm.burn_cycles > 0 or (nvm.liquid and nvm.liquid.amount and nvm.liquid.amount > 0) then return true end - return false + return S("no fuel") end local function start_node(pos, nvm, state) - nvm.running = true - power.generator_start(pos, nvm, PWR_CAPA) - minetest.sound_play("techage_generator", { - pos = pos, - gain = 1, - max_hear_distance = 10}) + nvm.running = true -- needed by fuel_lib + local outdir = M(pos):get_int("outdir") + power.generator_start(pos, Cable, CYCLE_TIME, outdir) + play_sound(pos) end local function stop_node(pos, nvm, state) nvm.running = false nvm.provided = 0 - power.generator_stop(pos, nvm) + local outdir = M(pos):get_int("outdir") + power.generator_stop(pos, Cable, outdir) + stop_sound(pos) end local State = techage.NodeStates:new({ @@ -96,7 +112,8 @@ local function burning(pos, nvm) return true else nvm.liquid.name = nil - State:fault(pos, nvm) + State:fault(pos, nvm, S("no fuel")) + stop_sound(pos) return false end else @@ -106,17 +123,16 @@ end local function node_timer(pos, elapsed) local nvm = techage.get_nvm(pos) + local outdir = M(pos):get_int("outdir") if nvm.running and burning(pos, nvm) then - nvm.provided = power.generator_alive(pos, nvm) - minetest.sound_play("techage_generator", { - pos = pos, - gain = 1, - max_hear_distance = 10}) - return true + nvm.provided = power.generator_alive(pos, Cable, CYCLE_TIME, outdir) else nvm.provided = 0 end - return false + if techage.is_activeformspec(pos) then + M(pos):set_string("formspec", formspec(State, pos, nvm)) + end + return true end local function on_receive_fields(pos, formname, fields, player) @@ -125,42 +141,50 @@ local function on_receive_fields(pos, formname, fields, player) end local nvm = techage.get_nvm(pos) State:state_button_event(pos, nvm, fields) - M(pos):set_string("formspec", formspec(State, pos, nvm)) end - -local function formspec_clbk(pos, nvm) - return formspec(State, pos, nvm) -end - -local function on_metadata_inventory_put(pos, listname, index, stack, player) - minetest.after(0.5, fuel.move_item, pos, stack, formspec_clbk) -end - -local function on_rightclick(pos) +local function on_rightclick(pos, node, clicker) + techage.set_activeformspec(pos, clicker) local nvm = techage.get_nvm(pos) M(pos):set_string("formspec", formspec(State, pos, nvm)) end -local _liquid = { +local liquid_def = { fuel_cat = fuel.BT_NAPHTHA, capa = fuel.CAPACITY, peek = liquid.srv_peek, put = function(pos, indir, name, amount) - if fuel.valid_fuel(name, fuel.BT_NAPHTHA) then - return liquid.srv_put(pos, indir, name, amount) + if fuel.valid_fuel(name, fuel.BT_OIL) then + local res = liquid.srv_put(pos, indir, name, amount) + if techage.is_activeformspec(pos) then + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", formspec(State, pos, nvm)) + end + return res end return amount end, - take = liquid.srv_take, + take = function(pos, indir, name, amount) + amount, name = liquid.srv_take(pos, indir, name, amount) + if techage.is_activeformspec(pos) then + local nvm = techage.get_nvm(pos) + M(pos):set_string("formspec", formspec(State, pos, nvm)) + end + return amount, name + end } -local _networks = { - pipe = { +local net_def = { + pipe2 = { sides = techage.networks.AllSides, -- Pipe connection sides ntype = "tank", }, + ele1 = { + sides = {R = 1}, + ntype = "gen1", + nominal = PWR_CAPA, + }, } minetest.register_node("techage:tiny_generator", { @@ -179,28 +203,23 @@ minetest.register_node("techage:tiny_generator", { on_rotate = screwdriver.disallow, is_ground_content = false, - on_construct = function(pos) + after_place_node = function(pos) local nvm = techage.get_nvm(pos) local number = techage.add_node(pos, "techage:tiny_generator") nvm.running = false nvm.burn_cycles = 0 State:node_init(pos, nvm, number) - local meta = M(pos) - meta:set_string("formspec", formspec(State, pos, nvm)) - local inv = meta:get_inventory() - inv:set_size('fuel', 1) + M(pos):set_string("formspec", formspec(State, pos, nvm)) + M(pos):set_int("outdir", networks.side_to_outdir(pos, "R")) end, - - allow_metadata_inventory_put = fuel.allow_metadata_inventory_put, - allow_metadata_inventory_take = fuel.allow_metadata_inventory_take, - on_metadata_inventory_put = on_metadata_inventory_put, on_receive_fields = on_receive_fields, on_rightclick = on_rightclick, + on_punch = fuel.on_punch, on_timer = node_timer, can_dig = fuel.can_dig, - liquid = _liquid, - networks = _networks, + liquid = liquid_def, + networks = net_def, }) minetest.register_node("techage:tiny_generator_on", { @@ -241,23 +260,17 @@ minetest.register_node("techage:tiny_generator_on", { on_rotate = screwdriver.disallow, is_ground_content = false, - allow_metadata_inventory_put = fuel.allow_metadata_inventory_put, - allow_metadata_inventory_take = fuel.allow_metadata_inventory_take, - on_metadata_inventory_put = on_metadata_inventory_put, on_receive_fields = on_receive_fields, on_rightclick = on_rightclick, + on_punch = fuel.on_punch, on_timer = node_timer, can_dig = fuel.can_dig, - liquid = _liquid, - networks = _networks, + liquid = liquid_def, + networks = net_def, }) Pipe:add_secondary_node_names({"techage:tiny_generator", "techage:tiny_generator_on"}) - -techage.power.register_node({"techage:tiny_generator", "techage:tiny_generator_on"}, { - conn_sides = {"R"}, - power_network = Power, -}) +Cable:add_secondary_node_names({"techage:tiny_generator", "techage:tiny_generator_on"}) techage.register_node({"techage:tiny_generator", "techage:tiny_generator_on"}, { on_recv_message = function(pos, src, topic, payload) @@ -268,8 +281,11 @@ techage.register_node({"techage:tiny_generator", "techage:tiny_generator_on"}, { return State:on_receive_message(pos, topic, payload) end end, - on_node_load = function(pos) + on_node_load = function(pos, node) State:on_node_load(pos) + if node.name == "techage:tiny_generator_on" then + play_sound(pos) + end end, })