From 2201104df1c38e1854c5eb7c4d75447968681a0a Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Sat, 28 Jul 2018 17:29:56 +0300 Subject: [PATCH] Heat exchanger for nuclear power --- .../machines/bases/fluidgenerator.lua | 9 +- .../machines/bases/generator.lua | 9 +- elepower_machines/machines/bases/storage.lua | 9 +- elepower_machines/machines/steam_turbine.lua | 16 ++- elepower_nuclear/machines/heat_exchanger.lua | 100 ++++++++++++++++++ elepower_nuclear/machines/init.lua | 1 + .../textures/elenuclear_heat_exchanger.png | Bin 524 -> 1917 bytes 7 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 elepower_nuclear/machines/heat_exchanger.lua diff --git a/elepower_machines/machines/bases/fluidgenerator.lua b/elepower_machines/machines/bases/fluidgenerator.lua index 2401841..942399b 100644 --- a/elepower_machines/machines/bases/fluidgenerator.lua +++ b/elepower_machines/machines/bases/fluidgenerator.lua @@ -1,5 +1,5 @@ -local function get_formspec(power, percent, buffer) +local function get_formspec_default(power, percent, buffer) return "size[8,8.5]".. default.gui_bg.. default.gui_bg_img.. @@ -32,6 +32,13 @@ function ele.register_fluid_generator(nodename, nodedef) break end + -- Allow for custom formspec + local get_formspec = get_formspec_default + if nodedef.get_formspec then + get_formspec = nodedef.get_formspec + nodedef.get_formspec = nil + end + local defaults = { groups = { fluid_container = 1, diff --git a/elepower_machines/machines/bases/generator.lua b/elepower_machines/machines/bases/generator.lua index 9ba3e6e..2dbc8fd 100644 --- a/elepower_machines/machines/bases/generator.lua +++ b/elepower_machines/machines/bases/generator.lua @@ -1,5 +1,5 @@ -local function get_formspec(power, percent) +local function get_formspec_default(power, percent) return "size[8,8.5]".. default.gui_bg.. default.gui_bg_img.. @@ -26,6 +26,13 @@ function elepm.register_fuel_generator(nodename, nodedef) nodedef.groups["tubedevice"] = 1 nodedef.groups["tubedevice_receiver"] = 1 + -- Allow for custom formspec + local get_formspec = get_formspec_default + if nodedef.get_formspec then + get_formspec = nodedef.get_formspec + nodedef.get_formspec = nil + end + nodedef.on_timer = function (pos, elapsed) local meta = minetest.get_meta(pos) diff --git a/elepower_machines/machines/bases/storage.lua b/elepower_machines/machines/bases/storage.lua index acbe178..bd04646 100644 --- a/elepower_machines/machines/bases/storage.lua +++ b/elepower_machines/machines/bases/storage.lua @@ -1,5 +1,5 @@ -local function get_formspec(power) +local function get_formspec_default(power) return "size[8,8.5]".. default.gui_bg.. default.gui_bg_img.. @@ -42,6 +42,13 @@ function elepm.register_storage(nodename, nodedef) nodedef.can_dig = can_dig + -- Allow for custom formspec + local get_formspec = get_formspec_default + if nodedef.get_formspec then + get_formspec = nodedef.get_formspec + nodedef.get_formspec = nil + end + nodedef.on_timer = function (pos, elapsed) local meta = minetest.get_meta(pos) local refresh = false diff --git a/elepower_machines/machines/steam_turbine.lua b/elepower_machines/machines/steam_turbine.lua index f74da2d..69738ec 100644 --- a/elepower_machines/machines/steam_turbine.lua +++ b/elepower_machines/machines/steam_turbine.lua @@ -1,7 +1,19 @@ +local function get_formspec(power, percent, buffer) + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + ele.formspec.power_meter(power).. + ele.formspec.fluid_bar(7, 0, buffer).. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + default.get_hotbar_bg(0, 4.25) +end + ele.register_fluid_generator("elepower_machines:steam_turbine", { description = "Steam Turbine", - ele_usage = 64, + ele_usage = 128, tiles = { "elepower_machine_top.png^elepower_power_port.png", "elepower_machine_base.png", "elepower_machine_side.png", "elepower_machine_side.png", "elepower_turbine_side.png", "elepower_turbine_side.png", @@ -22,4 +34,6 @@ ele.register_fluid_generator("elepower_machines:steam_turbine", { }, tube = false, ele_no_automatic_ports = true, + fuel_burn_time = 2, + get_formspec = get_formspec, }) diff --git a/elepower_nuclear/machines/heat_exchanger.lua b/elepower_nuclear/machines/heat_exchanger.lua new file mode 100644 index 0000000..320adc0 --- /dev/null +++ b/elepower_nuclear/machines/heat_exchanger.lua @@ -0,0 +1,100 @@ + +local function get_formspec(heat, cold, water, steam) + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + ele.formspec.fluid_bar(0, 0, heat).. + ele.formspec.fluid_bar(1, 0, cold).. + "image[3.5,1;1,1;gui_furnace_arrow_bg.png^[transformR270]".. + ele.formspec.fluid_bar(6, 0, water).. + ele.formspec.fluid_bar(7, 0, steam).. + "list[context;dst;5,1;1,1;]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[context;dst]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +local function heat_exchanger_timer(pos) + local meta = minetest.get_meta(pos) + local change = false + + local heat = fluid_lib.get_buffer_data(pos, "heat") + local cold = fluid_lib.get_buffer_data(pos, "cold") + local water = fluid_lib.get_buffer_data(pos, "water") + local steam = fluid_lib.get_buffer_data(pos, "steam") + + -- See if we have enough hot coolant + if heat.amount >= 1000 then + local water_convert = math.min(water.amount, 1000) + if steam.amount + water_convert > steam.capacity then + water_convert = steam.capacity - steam.amount + end + + if water_convert > 0 then + if cold.amount + 1000 < cold.capacity then + -- Conversion + heat.amount = heat.amount - 1000 + cold.amount = cold.amount + 1000 + + water.amount = water.amount - water_convert + steam.amount = steam.amount + water_convert + + change = true + end + end + end + + if change then + meta:set_string("cold_fluid", "elepower_nuclear:coolant_source") + meta:set_string("steam_fluid", "elepower_dynamics:steam") + + meta:set_int("heat_fluid_storage", heat.amount) + meta:set_int("cold_fluid_storage", cold.amount) + + meta:set_int("water_fluid_storage", water.amount) + meta:set_int("steam_fluid_storage", steam.amount) + end + + meta:set_string("formspec", get_formspec(heat, cold, water, steam)) + + return false +end + +ele.register_machine("elepower_nuclear:heat_exchanger", { + description = "Shielded Heat Exchanger\nFor use in nuclear power plants", + tiles = { + "elenuclear_machine_top.png", "elepower_lead_block.png", "elenuclear_machine_side.png", + "elenuclear_machine_side.png", "elenuclear_machine_side.png", "elenuclear_heat_exchanger.png", + }, + groups = {cracky = 3, fluid_container = 1}, + fluid_buffers = { + heat = { + capacity = 8000, + accepts = {"elepower_nuclear:hot_coolant_source"}, + drainable = false, + }, + cold = { + capacity = 8000, + accepts = {"elepower_nuclear:coolant_source"}, + drainable = true, + }, + water = { + capacity = 16000, + accepts = {"default:water_source"}, + drainable = false, + }, + steam = { + capacity = 16000, + accepts = {"elepower_dynamics:steam"}, + drainable = true, + }, + }, + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_formspec()) + end, + on_timer = heat_exchanger_timer, +}) diff --git a/elepower_nuclear/machines/init.lua b/elepower_nuclear/machines/init.lua index 25019a9..f3af94d 100644 --- a/elepower_nuclear/machines/init.lua +++ b/elepower_nuclear/machines/init.lua @@ -3,4 +3,5 @@ local mp = elenuclear.modpath .. "/machines/" dofile(mp.."enrichment_plant.lua") dofile(mp.."fission_reactor.lua") +dofile(mp.."heat_exchanger.lua") diff --git a/elepower_nuclear/textures/elenuclear_heat_exchanger.png b/elepower_nuclear/textures/elenuclear_heat_exchanger.png index 73ab9abbe5e9f71a078389a80122d9724c8c198d..8b848d464aa4b6010d3553f2c3dc70f8d0203c68 100644 GIT binary patch delta 1866 zcmV-Q2etT&1pN+>BYy>hdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmgFW3 z{bv_)%j9dd>}FL_;lGJoXy>1ZYLgxf_IW~DY5?(XAvtQ0-S)XEfUP4{=W9g4D;NQ%LlfYg*1&60&8-h=Gk8E8) z+}Z>>DyKP4%W`zJ?`9;opZP|-Cv*{b7 z#WDK1y6ilb?AN09QjRy+l^LyLl*b+L563gu^G>)Ujzq;iYS?52ccnxO8V5OQlxa{u z+Da7=9d{0BnJWub17QRiiR(ePn>P&(lB9urmWu5lkbm-pg^p>{F>5#W8_ugR-`K|R78vA}H0^Z@#c z(qnVULA1b7(VhpGLR$_HA|OzJAprx{lPGzzf!PEi1Tuo44CpM53uqx#ZUD(n#Dg51 z0?dsufqxEDRzAf@gdjr28yv_8hBC-D!H<$ zQeD;RYpAiNnj1H1ILFPm&|*t1ck0+m-F5B0hkqV>>Um(R4H<6e@FR>kk{S78ZPEJW z{teb>vBn2e(=c4DK^nq#K{K7` zz@Y2II_To=!JHbT&i{os10wkUV9reHeu25KyuD+s<)hHa!O%R0GpJT@`UY|4m}iwt zPJanC9)<605xMzh?Wr(N5?yWEW7{61FJs;eDbCzXZ!P&gedbxZ&ohlnDh{`>T;UnR90EX@p^4;VMS%3K+Ma@Tyo;k>$BK>V^z6(IUZ*P@5vXY(_ zVGaUyBTA=HwL|eYj-jPHd@+jDcq(x^rH8xPe9(VXhov^fOJ}6p8#@n>d+UC?4cxIp zqe$X8hSCqRbR-lAB*{qa><1*NLVcX^2-T*c{6=kl)R(c;DfLEOmbX^$t#m_X9)A#n zKf#BbL+U|Kx zQ=P|JGW$^6TX5zH-A&)Cy`I~31XMJ>@_&)wLwG4rAV*U-tSmpX_IYVz9fU~I^INs~p#NpH z`Lp2%3a+hj#l|#in=uCa?_QUcqMu-v=BMIa=&}UvAx(8w0{({`K>7g?VX?*4J~u$7+LA~kjFBcyPof+YzE zWtHA`-wtUQ!Mybddz0Sn)`OWjzL{4Co$m%8^cMiL4CrSEZQKybE5bI+e?@QyVBQ-% z5cEUOdqAL5UvCJ>+=56S98!!wjM0}Rju-tH!!&Gq^Dp^uvONX3dyN1900v@9M??Tg z0Av7*nH0Da00009a7bBm001r{001r{0eGc9b^rhX2XskIMF-*s91Rx~C^qM&ky|K# zR!KxbR5;6>lfg;@K@5h!WEO>8EW)DHgEtk#n-o2G7Cq=Yc=siIFW)Lw-gq? zepTFrb>4jc2o+KO4S{fYdi`>@^Tzue&JN)55kc<0gugX0T1&@Gj;2uF0 zMKKH^jWjrbfe1{SDTSNS&fESO&H6+Fxc5sHH$z0h4bkxPu^0Wbdj4vYklBRBvCVoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6 z000McNliru;szEDFd9YB4@r~i1t@=XNklG76!jaWRw6&7idGe-74+xb>f2B5;i#F`FL{P^B%bC zuwI3C^Uq{vm>H5-sqERU0n3Xol}yC1n#?#oJMRkd{!P4Jc&2&b@ z4C&MmZ|9!sM!-_(g)->`*=!mF`v-@7|M3%m(a|ia;X%s9yt)F)#k`V;kYbTL9qbxW?((IhD