From 32d204111c04512d6369246799dbb2ba53856f9d Mon Sep 17 00:00:00 2001 From: Izzy Date: Fri, 17 Apr 2020 11:46:57 -0600 Subject: [PATCH] fluids, spills, and intake bug fixes gasoline-powered pump better pump textures --- craftitems.lua | 6 + crafts.lua | 15 ++ init.lua | 2 +- pipes.lua | 5 +- pump.lua | 202 ++++++++++++++++++++++++++- spills.lua | 9 +- textures/bitumen_arrow.png | Bin 0 -> 415 bytes textures/bitumen_arrow_yellow.png | Bin 0 -> 419 bytes textures/bitumen_gasoline_engine.png | Bin 0 -> 485 bytes 9 files changed, 228 insertions(+), 11 deletions(-) create mode 100644 textures/bitumen_arrow.png create mode 100644 textures/bitumen_arrow_yellow.png create mode 100644 textures/bitumen_gasoline_engine.png diff --git a/craftitems.lua b/craftitems.lua index 99ca4e2..74bd1d8 100644 --- a/craftitems.lua +++ b/craftitems.lua @@ -15,5 +15,11 @@ minetest.register_craftitem("bitumen:galv_steel_sheet", { }) +minetest.register_craftitem("bitumen:gas_engine", { + description = "Gasoline Engine", + inventory_image = "bitumen_gasoline_engine.png", +}) + + diff --git a/crafts.lua b/crafts.lua index af2b6d5..3de8fd2 100644 --- a/crafts.lua +++ b/crafts.lua @@ -32,6 +32,21 @@ minetest.register_craft({ }, }) +minetest.register_craft({ + output = "bitumen:pump_gas 1", + type = "shapeless", + recipe = {"bitumen:pump", "bitumen:gas_engine"}, +}) + +minetest.register_craft({ + output = "bitumen:gas_engine 1", + recipe = { + {"", "", ""}, + {"default:steel_ingot", "", "default:steel_ingot"}, + {"", "default:steelblock", ""}, + }, +}) + -- drilling diff --git a/init.lua b/init.lua index cd984a8..e1c3058 100644 --- a/init.lua +++ b/init.lua @@ -182,7 +182,7 @@ minetest.register_abm({ if ym.name == "air" then local nb = {} - print("air below") +-- print("air below") for _,p in ipairs(npos) do local n = minetest.get_node(p) diff --git a/pipes.lua b/pipes.lua index 6a20467..15d9a81 100644 --- a/pipes.lua +++ b/pipes.lua @@ -528,8 +528,9 @@ minetest.register_abm({ local take = math.max(0, math.min(ulevel, cap - pnet.buffer)) pnet.buffer = pnet.buffer + take --print("intake took "..take.. " water") - if ulevel - rate > 0 then - minetest.set_node_level(pos, ulevel - take) + local nl = math.floor(ulevel - take + 0.5) + if nl > 0 then + minetest.set_node_level(pos, nl) else minetest.set_node(pos, {name = "air"}) end diff --git a/pump.lua b/pump.lua index 7aee309..4ef450a 100644 --- a/pump.lua +++ b/pump.lua @@ -38,7 +38,11 @@ end minetest.register_node("bitumen:pump", { description = "Pump", drawtype = "normal", - tiles = {"default_steel_block.png"}, + tiles = { + "default_steel_block.png^bitumen_arrow.png^[transformR90", "default_steel_block.png^bitumen_arrow.png^[transformR270", + "default_steel_block.png^bitumen_arrow.png", "default_steel_block.png^bitumen_arrow.png^[transformR180", + "default_copper_block.png", "default_tin_block.png", + }, is_ground_content = false, paramtype2 = "facedir", groups = {cracky = 1, petroleum_fixture=1, oddly_breakable_by_hand = 3}, @@ -85,7 +89,11 @@ minetest.register_node("bitumen:pump", { minetest.register_node("bitumen:pump_on", { description = "Pump (Active)", drawtype = "normal", - tiles = {"default_tin_block.png"}, + tiles = { + "default_steel_block.png^bitumen_arrow_yellow.png^[transformR90", "default_steel_block.png^bitumen_arrow_yellow.png^[transformR270", + "default_steel_block.png^bitumen_arrow_yellow.png", "default_steel_block.png^bitumen_arrow_yellow.png^[transformR180", + "default_copper_block.png", "default_tin_block.png", + }, is_ground_content = false, paramtype2 = "facedir", groups = {cracky = 1, petroleum_fixture=1, oddly_breakable_by_hand = 3, --[[not_in_creaetive_inventory=1]]}, @@ -120,11 +128,6 @@ minetest.register_node("bitumen:pump_on", { - - - - - minetest.register_abm({ nodenames = {"bitumen:pump_on"}, interval = 1, @@ -177,3 +180,188 @@ minetest.register_abm({ + + + +-- gas-powered pump + +minetest.register_node("bitumen:pump_gas", { + description = "Gas-powered Pump", + drawtype = "normal", + tiles = { + "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow.png^[transformR90", "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow.png^[transformR270", + "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow.png", "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow.png^[transformR180", + "default_copper_block.png^default_obsidian_glass.png", "default_tin_block.png^default_obsidian_glass.png", + }, + is_ground_content = false, + paramtype2 = "facedir", + groups = {cracky = 1, petroleum_fixture=1, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + on_place = minetest.rotate_node, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", pump_formspec) + + --bitumen.pipes.on_construct(pos) + end, + + --[[ not working, apparently due to an "undocumented feature" in the engine ;) + on_receive_fields = function(pos, form, fields, player) + local meta = minetest:get_meta(pos) + local mf = meta:get_string("formspec") + print(dump(mf).."\n") + + if fields.start then + print("start") + swap_node(pos, "bitumen:pump_on") + + -- refetch the meta after the node swap just to be sure + local meta = minetest:get_meta(pos) + meta:set_string("formspec", "") + meta:set_string("formspec", pump_formspec_on) + local mf = meta:get_string("formspec") + print(dump(mf)) + + minetest.show_formspec(player:get_player_name(), "", pump_formspec_on) + end + end, + ]] + + on_punch = function(pos) + swap_node(pos, "bitumen:pump_gas_on") + end, +}) + + + + +minetest.register_node("bitumen:pump_gas_on", { + description = "Gas-powered Pump (Active)", + drawtype = "normal", + tiles = { + "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow_yellow.png^[transformR90", "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow_yellow.png^[transformR270", + "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow_yellow.png", "default_steel_block.png^default_obsidian_glass.png^bitumen_arrow_yellow.png^[transformR180", + "default_copper_block.png^default_obsidian_glass.png", "default_tin_block.png^default_obsidian_glass.png", + }, + is_ground_content = false, + paramtype2 = "facedir", + groups = {cracky = 1, petroleum_fixture=1, oddly_breakable_by_hand = 3, --[[not_in_creaetive_inventory=1]]}, + sounds = default.node_sound_glass_defaults(), + on_place = minetest.rotate_node, + drop = "bitumen:pump_gas", + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", pump_formspec_on) + + --bitumen.pipes.on_construct(pos) + end, + + --[[ not working, apparently due to an "undocumented feature" in the engine ;) + on_receive_fields = function(pos, form, fields, player) + if fields.stop then + print("stop") + swap_node(pos, {name="bitumen:pump"}) + + local meta = minetest:get_meta(pos) + meta:set_string("formspec", pump_formspec) + minetest.show_formspec(player:get_player_name(), "", pump_formspec) + end + end, + ]] + + on_punch = function(pos) + swap_node(pos, "bitumen:pump_gas") + end, +}) + + + +minetest.register_abm({ + nodenames = {"bitumen:pump_gas_on"}, + interval = 1, + chance = 1, + action = function(pos) + local node = minetest.get_node(pos) + + local meta = minetest.get_meta(pos) + local fuel = meta:get_int("fuel") +-- print("pump fuel "..fuel) + if fuel <= 0 then + local below = {x=pos.x, y=pos.y-1, z=pos.z} + local bnode = minetest.get_node(below) + if bnode.name == "bitumen:oil_drum" then + local bmeta = minetest.get_meta(below) + local fluid = bmeta:get_string("fluid") + if fluid == "bitumen:gasoline" then + local fill = bmeta:get_int("fill") + print("pump fill "..fill) + if fill >= 1 then + fill = fill - 1 + bmeta:set_int("fill", fill) + + local max_fill = bmeta:get_int("maxfill") + bmeta:set_string("infotext", fluid .." (".. math.floor(((fill*100)/max_fill)+0.5) .."%)") + + fuel = 60 + end + end + end + end + + if fuel <= 0 then +-- minetest.set_node(pos, {name="bitumen:pump_gas"}) + print("pump out of gas " .. fuel) + swap_node(pos, "bitumen:pump_gas") + return + else + + fuel = fuel - 1 + meta:set_int("fuel", fuel) + end + + + local back_dir = minetest.facedir_to_dir(node.param2) + local backpos = vector.add(pos, back_dir) + local backnet = bitumen.pipes.get_net(backpos) + if backnet == nil then + print("bpump no backnet at "..minetest.pos_to_string(backpos)) + return + end + + local front_dir = vector.multiply(back_dir, -1) + local frontpos = vector.add(pos, front_dir) + local frontnet = bitumen.pipes.get_net(frontpos) + if frontnet == nil then + print("bpump no frontnet at "..minetest.pos_to_string(frontpos)) + return + end + + if backnet.fluid ~= frontnet.fluid and backnet.fluid ~= "air" then + print("bpump: bad_fluid") + return -- incompatible fluids + end + + local lift = 50 + --print("fpos ".. minetest.pos_to_string(frontpos) .. " | bpos "..minetest.pos_to_string(backpos)) + --print("fp ".. frontnet.in_pressure .. " | bp "..backnet.in_pressure) + -- HACK: hardcoded buffer amount + local to_take = 64 - backnet.buffer + if to_take <= 0 then + -- print("pump: output pipe full") + return + end + + local taken, fluid = bitumen.pipes.take_fluid(frontpos, to_take) + local pushed = bitumen.pipes.push_fluid(backpos, fluid, taken, lift) +-- print("bitumen pumped " ..taken .. " > "..pushed) + + if pushed < taken then + print("bitumen pump leaked ".. (taken - pushed) .. " at " ..pos.x..","..pos.y..","..pos.z) + end + + --print("") + end +}) + diff --git a/spills.lua b/spills.lua index 01a6568..a9fcc41 100644 --- a/spills.lua +++ b/spills.lua @@ -429,7 +429,14 @@ minetest.register_abm({ -- print(dump2(x).. " -> " ..dump2(bnode.name)) else local lvl = minetest.get_node_level(pos) - minetest.set_node_level(pos, math.max(0, lvl - 10)) + local nl = math.max(0, lvl - 10) + + if nl == 0 then + minetest.set_node(pos, {name="air"}) + else + minetest.set_node_level(pos, nl) + end + minetest.set_node(bp, {name=x}) return diff --git a/textures/bitumen_arrow.png b/textures/bitumen_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e329f0cdf851aa41e39847ef6c9c36e3149455d8 GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVivYh0i=<=1OOOGXArU3c`MJ5Nc_lzD1A|jhW?s5N zerbt9Nk*!IyQgn}BHPyb^$ZM*jGiuzAr`04Uf%2F>?pwcAb-7LR?7;N6%(9tb8>To zZbaPvVNhn*;4dN|9WCvds;;52Xo1_sj&j|+y0g9ed)eD$%gWBpluSG6nDfKzQ2NQl z*ZnLHHWcSQo2>SDGP8Q?nYjmo_c<6X`gWn$$Jl!QPuD}+ZiLFKyc9fgx9>8~7U5gm zQ_@!We7siwZQ>I1<{kaN9di4QDxEG}ck9Y3n|WN)?uBpOSmk_dpJv<~ufP*}@sRJK zUs6v+)n41kU$7A?dsh_Ap}cm9hw!;oAzpXl3Vv$6`Fe_PlqjrSv_4GLo808y=?2x%G3TM7<<*t~WBanV4j!m02?0R+Kyd^3;cia`79W36lpY15~sh<4E zXsPPHs@s0&HchxA5PGQCrLy&hGzB=E=atDTD3@2ia2^IkSza1g&c<2A3Bt6cuh*B*S;s@Jj?UGVs=INdV1 zCv5ucYP$g5DZ$S#KFQ&HY#ZoUy5?ErTUn{e_LsK&{J$_iYgb5|#NXOzP*{1o`njxg HN@xNAF8HMO literal 0 HcmV?d00001 diff --git a/textures/bitumen_gasoline_engine.png b/textures/bitumen_gasoline_engine.png new file mode 100644 index 0000000000000000000000000000000000000000..88d453f543b5c22e75239a92d9bee0c689101b96 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVi-4d2?^*t(2Y^EInIRD+&iT2ysd*(pE(3#8QD$Dc zLVjt9LP9bnzb-Hz(aNoi?+7) z?2e^tUDth)X30_NxbGxT6z^cI*xM1dtSe*J>nRNi(H(+GDLU`;o}E$SvO0V2UuC{r ze)<8yTMw=)PCgLyPnnTH{N%2eYG02vv*!J^ILjDY&X~XCmUopg^Jlel%NyMv1Qx7YCd;+|Dk$fb+{{m3S_$15*^(SAChjU5W^hZ+RomD7$BL zdF-9gvm~zX!%r7Rt<}p9osuhA|L|eYhS=Wo-HklbGe0V@MrU)rFBiGr{+;zuS?JoW zA7}f;y4y&kZMl}@lXUMg@1A+g2|bFch5wqSBv&#UIDD4SThA7q%riAfAz4~;s#w`8 zDc8VdK`TR)IG8TFg>C%LtJB~X=(751(YX^h{CxDTT)j6r?QpqGfW?%kwae_!p51>$ YebTY~^>N<1??IvM>FVdQ&MBb@0AowOQ2+n{ literal 0 HcmV?d00001