From f710c3472c540e0b734fb5e0d3f5f8410b29574f Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Fri, 1 May 2020 22:50:52 +0300 Subject: [PATCH] PCB Etching plant --- elepower_dynamics/crafting.lua | 18 ++ elepower_dynamics/craftitems.lua | 6 + .../textures/elepower_uv_bulb.png | Bin 0 -> 467 bytes elepower_machines/crafting.lua | 10 + elepower_machines/machines/init.lua | 1 + elepower_machines/machines/pcb_plant.lua | 172 ++++++++++++++++++ .../textures/elepower_pcb_plant.png | Bin 0 -> 529 bytes .../textures/elepower_pcb_plant_active.png | Bin 0 -> 547 bytes .../textures/elepower_uv_bulb_lit.png | Bin 0 -> 465 bytes 9 files changed, 207 insertions(+) create mode 100644 elepower_dynamics/textures/elepower_uv_bulb.png create mode 100644 elepower_machines/machines/pcb_plant.lua create mode 100644 elepower_machines/textures/elepower_pcb_plant.png create mode 100644 elepower_machines/textures/elepower_pcb_plant_active.png create mode 100644 elepower_machines/textures/elepower_uv_bulb_lit.png diff --git a/elepower_dynamics/crafting.lua b/elepower_dynamics/crafting.lua index 3c51a8f..b3477aa 100644 --- a/elepower_dynamics/crafting.lua +++ b/elepower_dynamics/crafting.lua @@ -210,6 +210,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "elepower_dynamics:pcb_blank", + recipe = { + {"", "elepower_dynamics:copper_plate", ""}, + {"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"}, + {"", "elepower_dynamics:gold_plate", ""}, + } +}) + minetest.register_craft({ type = "shapeless", output = "elepower_dynamics:acidic_compound", @@ -222,6 +231,15 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "elepower_dynamics:uv_bulb", + recipe = { + {"group:color_blue", "group:color_violet", "group:color_blue"}, + {"", "default:meselamp", ""}, + {"", "default:glass", ""}, + } +}) + -- Fluid Transfer Node minetest.clear_craft({output = "fluid_transfer:fluid_transfer_pump"}) minetest.register_craft({ diff --git a/elepower_dynamics/craftitems.lua b/elepower_dynamics/craftitems.lua index ba06ef6..8bee714 100644 --- a/elepower_dynamics/craftitems.lua +++ b/elepower_dynamics/craftitems.lua @@ -249,6 +249,12 @@ minetest.register_craftitem("elepower_dynamics:capacitor", { groups = {capacitor = 1, component = 1} }) +minetest.register_craftitem("elepower_dynamics:uv_bulb", { + description = "Ultraviolet Light Bulb", + inventory_image = "elepower_uv_bulb.png", + groups = {component = 1, bulb = 1} +}) + -- Assembled Components minetest.register_craftitem("elepower_dynamics:battery", { diff --git a/elepower_dynamics/textures/elepower_uv_bulb.png b/elepower_dynamics/textures/elepower_uv_bulb.png new file mode 100644 index 0000000000000000000000000000000000000000..b131cdac52a15f673a071793d2e68a7457d10815 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^QsT zk{K9sn4Uicif|TqL>4nJ=qZCRW5rVYGN2%PiKnkC`x911AzkB*tl`IiLb9155hc#~ zxw)x%B|t6%gL6@8Vo7R>LV0FMhJw4NZ$OG(Dm&0REl(H65R22jlMVft9eG^uf3H~Y z+}N^%@z%WPpyGBD4;jWnRw<ZZ5s(DW&80 zE-&mozKA~hw;wbb+$ESv&`MpT$GwZoD1LV<@)8b z|2tp4KEoNV6ECB`Warr}X53K!w|MQ>9}609eb(tJjr|;w@Osy?{7c&=WgD(Iu;qF0 znbTT%#RtxuGcjzw{>A*wt50cPE@#{1KA-gdk?fz+ocINAdR{fH{rejfoSv?JF6*2U FngH{xxyb+k literal 0 HcmV?d00001 diff --git a/elepower_machines/crafting.lua b/elepower_machines/crafting.lua index dc7d8fc..446cfbc 100644 --- a/elepower_machines/crafting.lua +++ b/elepower_machines/crafting.lua @@ -728,3 +728,13 @@ minetest.register_craft({ {"elepower_dynamics:induction_coil", "elepower_dynamics:zinc_plate", "elepower_dynamics:induction_coil"}, } }) + +-- PCB Plant +minetest.register_craft({ + output = "elepower_machines:pcb_plant", + recipe = { + {"", "elepower_dynamics:integrated_circuit", ""}, + {"elepower_dynamics:chip", "elepower_machines:machine_block", "elepower_dynamics:chip"}, + {"elepower_dynamics:servo_valve", "elepower_dynamics:uv_bulb", "elepower_dynamics:bronze_gear"}, + } +}) diff --git a/elepower_machines/machines/init.lua b/elepower_machines/machines/init.lua index f11c2eb..75c8086 100644 --- a/elepower_machines/machines/init.lua +++ b/elepower_machines/machines/init.lua @@ -30,6 +30,7 @@ dofile(mp .. "electrolyzer.lua") dofile(mp .. "evaporator.lua") -- Other +dofile(mp .. "pcb_plant.lua") dofile(mp .. "accumulator.lua") dofile(mp .. "lava_cooler.lua") dofile(mp .. "bucketer.lua") diff --git a/elepower_machines/machines/pcb_plant.lua b/elepower_machines/machines/pcb_plant.lua new file mode 100644 index 0000000..2702fb9 --- /dev/null +++ b/elepower_machines/machines/pcb_plant.lua @@ -0,0 +1,172 @@ + +local function get_formspec(power, input, state, active, percent) + local t = "image[3.5,1.75;1,1;elepower_uv_bulb.png]" + + if active then + t = "image[3.5,1.75;1,1;elepower_uv_bulb_lit.png]" + end + + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + ele.formspec.power_meter(power).. + ele.formspec.state_switcher(7, 0, state).. + ele.formspec.fluid_bar(1, 0, input).. + "image[3.5,1;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (percent)..":gui_furnace_arrow_fg.png^[transformR270]".. + t.. + "list[context;src;2.5,1;1,1;]".. + "list[context;dst;4.5,1;1,1;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;dst]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +local function on_timer(pos, elapsed) + local refresh = false + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + local input = fluid_lib.get_buffer_data(pos, "acid") + local src = inv:get_stack("src", 1) + local dst = inv:get_stack("dst", 1) + local state = meta:get_int("state") + local time = meta:get_int("time") + + local is_enabled = ele.helpers.state_enabled(meta, pos, state) + + local capacity = ele.helpers.get_node_property(meta, pos, "capacity") + local usage = ele.helpers.get_node_property(meta, pos, "usage") + local storage = ele.helpers.get_node_property(meta, pos, "storage") + local pow_buffer = {capacity = capacity, storage = storage, usage = 0} + + local status = "Idle" + + while true do + if not is_enabled then + status = "Off" + break + end + + if pow_buffer.storage < usage then + status = "Out of Power!" + break + end + + if src:is_empty() or src:get_name() ~= "elepower_dynamics:pcb_blank" then + time = 0 + break + end + + if input.fluid == "" or input.amount < 10 then + status = "Out of Acid!" + time = 0 + break + end + + status = "Active" + pow_buffer.usage = usage + pow_buffer.storage = pow_buffer.storage - usage + + input.amount = input.amount - 10 + refresh = true + + if input.amount == 0 then + input.fluid = "" + end + + if time < 4 then + time = time + 1 + break + end + + if not inv:room_for_item("dst", ItemStack("elepower_dynamics:pcb")) then + status = "Output full!" + break + end + + src:take_item(1) + inv:add_item("dst", "elepower_dynamics:pcb") + inv:set_list("src", {src}) + time = 0 + + break + end + + local active = status == "Active" + if active then + ele.helpers.swap_node(pos, "elepower_machines:pcb_plant_active") + else + ele.helpers.swap_node(pos, "elepower_machines:pcb_plant") + end + + meta:set_int("acid_fluid_storage", input.amount) + meta:set_string("acid_fluid", input.fluid) + + meta:set_int("storage", pow_buffer.storage) + meta:set_int("time", time) + + meta:set_string("infotext", ("PCB Plant %s\n%s"):format(status, ele.capacity_text(pow_buffer.capacity, pow_buffer.storage))) + meta:set_string("formspec", get_formspec(pow_buffer, input, state, active, math.floor((time / 4) * 100))) + + return refresh +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + + if listname == "dst" or (listname == "src" and stack:get_name() ~= "elepower_dynamics:pcb_blank") then + return 0 + end + + return stack:get_count() +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + return allow_metadata_inventory_put(pos, to_list, to_index, stack, player) +end + +ele.register_machine("elepower_machines:pcb_plant", { + description = "Printed Circuit Board Plant", + groups = {oddly_breakable_by_hand = 1, cracky = 1, fluid_container = 1, ele_user = 1}, + fluid_buffers = { + acid = { + capacity = 8000, + accepts = {"elepower_dynamics:etching_acid_source"}, + drainable = false, + }, + }, + on_timer = on_timer, + on_construct = function (pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("dst", 1) + meta:set_string("formspec", get_formspec()) + end, + tiles = { + "elepower_machine_top.png", "elepower_machine_base.png", "elepower_machine_side.png", + "elepower_machine_side.png", "elepower_machine_side.png", "elepower_machine_side.png^elepower_pcb_plant.png", + }, + ele_active_node = true, + ele_active_nodedef = { + tiles = { + "elepower_machine_top.png", "elepower_machine_base.png", "elepower_machine_side.png", + "elepower_machine_side.png", "elepower_machine_side.png", "elepower_machine_side.png^elepower_pcb_plant_active.png", + }, + }, + ele_usage = 32, + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, +}) diff --git a/elepower_machines/textures/elepower_pcb_plant.png b/elepower_machines/textures/elepower_pcb_plant.png new file mode 100644 index 0000000000000000000000000000000000000000..effb19ad49bb0b2aceac4a597a6a8f3fa2486242 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^QsT zk{K9sn4Uicif|TqL>4nJa0`PlBg3pY5H=O_9v{2LfVQV&l)*^Lb9155hc#~ zxw)x%B|t6%gL6@8Vo7R>LV0FMhJw4NZ$OG(Dm&1+3{Mxw5R22jlYRY|90gkUzcSgO z;KgRB#>W}`y^6t^iPQZ9*SvFUCq2+q(2M=j(#otN<->8|Y0|Rej*OMFXRWII`fB;^ zrT5<}D^=q5i$)8vyZ(o;@fourZ|?xdK^ zv#RU6-0#^_R5%YG{Os50w>`XrMM6+hWNvZwWX87U^f|>xIUKezzqdVS8FzeffaiA( zj|W?B=Z1)8ue}=;w*2;GX5|;JD^wU>f3>o1J)72S*k;kk_+`JK)!li=3UwZuys4gI z^mkUFU3Nysdx4_9x|o_%n>HR{Fv$vZ+|iYM?$uZO&h)QV;gQoBuJ~mwNDx%G|04P; zqn2RE^8(3(S@V9bw#-yjI{PLnGqL^G1dfd2wRrwZ&sOZbo~EUzQKMDaO>L(5icUA7k2+gB@qT RPGJE>hNr8a%Q~loCID-R%l7~P literal 0 HcmV?d00001 diff --git a/elepower_machines/textures/elepower_pcb_plant_active.png b/elepower_machines/textures/elepower_pcb_plant_active.png new file mode 100644 index 0000000000000000000000000000000000000000..440f3d4bf4ac969a84dea73d397ae3b82e0ad933 GIT binary patch literal 547 zcmV+;0^I$HP)Px#24YJ`L;xNDV*mhb0_Wub000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jm3- z6AmH$*E`q%0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~0004c zNklda0;#sit*u#c`Ha)17 z7MdLo$;MPu@LgUq`{qq%W+S~`4-vt8kBIzvR#jAW<;)mUYOMF3X0r)^h!7CO)%Sp4 zI3AC&!MR#3NfPQ13K?TiRlN7u-=ZW*c(}i-HMqL&mL>s4L`p~J+}dP-hxRQ&cH@zJg2+BlfEB*$Rb+gTZkHa zFompf%qEc8BUD$%AR=rmU&*$PfhQW<4HmNn76FQhe$FkJ9hgsZ_VZs{obP}satsQD zYPCr<4BS3mq9}55bIQT)LAay*3nHM(WR?~!sOG`Seg78}Ec)|<07$(qj~A88uMqMr lOlIkis>-E-B1p;A*f$8Y$jS}xP;USL002ovPDHLkV1nF`;DZ1F literal 0 HcmV?d00001 diff --git a/elepower_machines/textures/elepower_uv_bulb_lit.png b/elepower_machines/textures/elepower_uv_bulb_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..e409fe8553ef3ef4a7101672b16da7335a2d7ba0 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^QsT zk{K9sn4Uicif|TqL>4nJ=qZCRW5rVYGN2%PiKnkC`x911VNnsLAQO-=vY8S| zxv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=}JJ31}PZ!4!i_=#x+2)Bj3LO0yf4@!p_F{ZY+znHt#eYWuYhHQ=`8A z`|5S|PyW)}!Y@@jb(h~bYA2W2#}^)v*je(ePJi3kWM8(++%miqG(RQS9cTaYIPfGyv?oY z>zZY@naOaCpl!^(pS#7nUH_cDeOCL=WU23Q`x&plX_M7(iI4#Wrl+f)%Q~loCIEgU BunzzL literal 0 HcmV?d00001