From 3c09c5210207b8b2d8f086d1946c7ba3cc09f155 Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin Date: Sun, 2 Sep 2012 13:11:01 +0200 Subject: [PATCH] New machine: geothermal generator --- electric.lua | 2 + geothermal.lua | 135 +++++++++++++++++++++ init.lua | 1 + textures/technic_geothermal_side.png | Bin 0 -> 809 bytes textures/technic_geothermal_top.png | Bin 0 -> 828 bytes textures/technic_geothermal_top_active.png | Bin 0 -> 819 bytes 6 files changed, 138 insertions(+) create mode 100644 geothermal.lua create mode 100644 textures/technic_geothermal_side.png create mode 100644 textures/technic_geothermal_top.png create mode 100644 textures/technic_geothermal_top_active.png diff --git a/electric.lua b/electric.lua index 4a7ed24..172e73e 100644 --- a/electric.lua +++ b/electric.lua @@ -511,6 +511,8 @@ if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_node if minetest.env:get_node(pos1).name == "technic:solar_panel" then new_node_added=add_new_cable_node(PR_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:generator" then new_node_added=add_new_cable_node(PR_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:generator_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:geothermal" then new_node_added=add_new_cable_node(PR_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:geothermal_active" then new_node_added=add_new_cable_node(PR_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:electric_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:tool_workshop" then new_node_added=add_new_cable_node(RE_nodes,pos1) end diff --git a/geothermal.lua b/geothermal.lua new file mode 100644 index 0000000..8f3a7d7 --- /dev/null +++ b/geothermal.lua @@ -0,0 +1,135 @@ +minetest.register_alias("geothermal", "technic:geothermal") + +minetest.register_craft({ + output = 'technic:geothermal', + recipe = { + {'default:stone', 'default:stone', 'default:stone'}, + {'moreores:copper_ingot', 'technic:diamond', 'moreores:copper_ingot'}, + {'default:stone', 'moreores:copper_ingot', 'default:stone'}, + } +}) + +minetest.register_craftitem("technic:geothermal", { + description = "Geothermal Generator", + stack_max = 99, +}) + +geothermal_formspec = + "invsize[8,4;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "label[0,0;Geothermal Generator]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]" + + +minetest.register_node("technic:geothermal", { + description = "Geothermal Generator", + tiles = {"technic_geothermal_top.png", "technic_machine_bottom.png", "technic_geothermal_side.png", + "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + technic_power_machine=1, + internal_EU_buffer=0; + internal_EU_buffer_size=5000; + burn_time=0; + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Geothermal Generator") + meta:set_float("technic_power_machine", 1) + meta:set_float("internal_EU_buffer", 0) + meta:set_float("internal_EU_buffer_size", 2000) + meta:set_string("formspec", geothermal_formspec) + end, + +}) + +minetest.register_node("technic:geothermal_active", { + description = "Geothermal Generator", + tiles = {"technic_geothermal_top_active.png", "technic_machine_bottom.png", "technic_geothermal_side.png", + "technic_geothermal_side.png", "technic_geothermal_side.png", "technic_geothermal_side.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + drop="technic:geothermal", + technic_power_machine=1, + internal_EU_buffer=0; + internal_EU_buffer_size=0; +}) + +minetest.register_abm({ + nodenames = {"technic:geothermal","technic:geothermal_active"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + + local meta = minetest.env:get_meta(pos) + local charge= meta:get_float("internal_EU_buffer") + local max_charge= meta:get_float("internal_EU_buffer_size") + local water_nodes = 0 + local lava_nodes = 0 + local production_level=0 + local load_step=0 + + pos.x=pos.x+1 + local check=check_node_around (pos) + if check==1 then water_nodes=water_nodes+1 end + if check==2 then lava_nodes=lava_nodes+1 end + pos.x=pos.x-2 + check=check_node_around (pos) + if check==1 then water_nodes=water_nodes+1 end + if check==2 then lava_nodes=lava_nodes+1 end + pos.x=pos.x+1 + pos.z=pos.z+1 + check=check_node_around (pos) + if check==1 then water_nodes=water_nodes+1 end + if check==2 then lava_nodes=lava_nodes+1 end + pos.z=pos.z-2 + check=check_node_around (pos) + if check==1 then water_nodes=water_nodes+1 end + if check==2 then lava_nodes=lava_nodes+1 end + pos.z=pos.z+1 + + if water_nodes==1 and lava_nodes==1 then production_level=50 load_step=30 end + if water_nodes==2 and lava_nodes==1 then production_level=75 load_step=45 end + if water_nodes==1 and lava_nodes==2 then production_level=75 load_step=45 end + if water_nodes==2 and lava_nodes==2 then production_level=100 load_step=60 end + if water_nodes==3 and lava_nodes==1 then production_level=25 load_step=15 end + if water_nodes==1 and lava_nodes==3 then production_level=25 load_step=15 end + + if production_level>0 then + if charge+load_step>max_charge then + load_step=max_charge-charge + end + if load_step>0 then + charge=charge+load_step + meta:set_float("internal_EU_buffer",charge) + end + end + + local load = math.floor((charge/max_charge)*100) + meta:set_string("formspec", + "invsize[8,4;]".. + "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. + (load)..":technic_power_meter_fg.png]".. + "label[0,0;Geothermal Generator]".. + "label[1,3;Power level]".. + "label[4,0;Production at "..tostring(production_level).."%]" + ) + + if production_level>0 and minetest.env:get_node(pos).name=="technic:geothermal" then + hacky_swap_node (pos,"technic:geothermal_active") + return + end + if production_level==0 then hacky_swap_node (pos,"technic:geothermal") end +end +}) + +function check_node_around (pos) +local node=minetest.env:get_node(pos) +if node.name=="default:water_source" or node.name=="default:water_flowing" then return 1 end +if node.name=="default:lava_source" or node.name=="default:lava_flowing" then return 2 end +return 0 +end \ No newline at end of file diff --git a/init.lua b/init.lua index c7f9a6f..a286350 100644 --- a/init.lua +++ b/init.lua @@ -33,6 +33,7 @@ dofile(minetest.get_modpath("technic").."/mining_laser_mk1.lua") --dofile(minetest.get_modpath("technic").."/injector.lua") dofile(minetest.get_modpath("technic").."/generator.lua") dofile(minetest.get_modpath("technic").."/solar_panel.lua") +dofile(minetest.get_modpath("technic").."/geothermal.lua") function has_locked_chest_privilege(meta, player) diff --git a/textures/technic_geothermal_side.png b/textures/technic_geothermal_side.png new file mode 100644 index 0000000000000000000000000000000000000000..90fb4305ed6fa1ed7dd363d72d89d544234abfb3 GIT binary patch literal 809 zcmV+^1J?YBP)4%a1{*feJadebnrU_$bgajoe#yZ-j#rJ)7 z$2)vqQx+vkYmM?GWtlTOgBeGhbL2%%mSsd?NM025UB~I^InFtpHQYbE$6ALuH*Xf3w!26nLIT7zH#{&Fl=)S;OHe zr)_&yQHoNEd07AuLLh_yz&Xb-80Oir3N&G;aPxvpvo&cFlO!w5*wc4C&RYJ<^E_A< zR!K@xHwdAarUALQnZEC_GelvCA9(y9r4@LRu4{Sq@+ANgP({_Cw8B{jLNE*l5PU3W z`MBe2O%(d{-N1*3J)V^4AVg`;Lkht-O}x3i#mysMe)R>`Er>-jj6G2l5(WWgveadT z6cVj9&yF(GZhOr85ASfx!t>)3l0?#V2IVQzbd3bG_E?Z;CHUpn-&n;lS+-{C2h{I3 zH=G=AQ8V1#{*7^#zVF$r6Pm6gjzY?+V47y)B%v%ToVA33=J1#!Ltk^qOJ-{rrvWpL zFk9-nMl2wuBn(2N6i6YsxVRwOWSGe?JA)F^BMyE1D5h#Eq!1W0akSas`##E37;9;o nmT9uoP0PviV;=VhtXud8?}KOOJ+E^|00000NkvXXu0mjf%HDNr literal 0 HcmV?d00001 diff --git a/textures/technic_geothermal_top.png b/textures/technic_geothermal_top.png new file mode 100644 index 0000000000000000000000000000000000000000..601ff15fd8164b8168548e98772bbe80d9c05857 GIT binary patch literal 828 zcmV-C1H=4@P)J(Q8+g?f8*6&ZE(QrbV}A-5MdWN9++lfe`-_lB4>nC_v~9=X@Jy0KOlLEU85svduLt7L=W=Zr`W`7I*&-td z0_v(lDkTxFLs=GBM%ub2j$&RfuY{9;#eBvwKT%ySy!qlS){dBQi6-H$49S z8xIc;6vc_%en;I_guWz>Vye0!TVzapkGi^0lm*gtk)B7IrpWzvgHnF$NO3yhV)*j@4y}7m<(YT4cPJ&0XoC$TEAx2<(z04+ zNU1pH1mScq?^ZAthen;K($RtfrZGiGTthEe!_!s;i11KfQixb=3 zj?Y$0nz}$5Z7_OZz+s+FdC5z{Z@=Muz2f;k!Ue2F3dt$YnSB0+`};eZszwQcEYDXQ z2VCpW4+emD_jkBTk!5p+wjl^S94yzmqplk^kALAQg+H0#`cfdJWYhys`#o_SBbA`* zI-<#h{P@E0`57T3fv;%Vnjn}Ul;UQ+#?2OM#z6xhgv;S@VCZ{v-%yr0zULu4kK^%$ zKOQ&S+^q3@kJWmK>$=E~pFXi(F3`r1MlpIED9e)BbV}FtELRH-FVD1{W;UI&+3vs^ ze5I(W8aE6)^0LHgP1kqyU55}Zu5f9)o4_wXY1$q=TK)!i?r$2JWzDMq0000DW` zK~y-)b<9hS<3s>};oq(*+wmiDoJXSpO^a^Lx`mL~1N#w|K#02_xZP+L0|+|lB;9fB zPU3gDiUnKv4)8fY{rsa%(;02saX37aBoWiu3}Z&d!O-i0IP|$(8-~6|N=dfJ2!epR zs*p-agzHe21(uPvu8E_V*UKy6Bw#V0am-ItmkV#cc#E|oW*m9iZZO6o)71@+fBeqF z!vjTeVz=K>w-uo;iKCdRZpaoH6W^n*E)->fbX}z9k)|nfzulmeO_|-R&Jp2_)Jegu|t-xK-EZfo`JNimKjni zj(LId0-^+7%ktlNxm=RYQmoc2vJ8tuUDp^r;JPm3XxQ%dyc~}h3~kqQE?>by6o$yx z;>co|v0N=FiW6Ub{SA3up!JBg5PFh81-OobHk#^EF-sDv>Vjh|5^MPDal(plzrUlYYLpPj@_fZ{z_kwjU;ub` ze}}6SSvF^A8-l>Y!E&uT>bha`_&1(X_>&2)F9lLcMm_Mf-xJ3%QVF`QBbrRek1rgb zpAkY5_=={j34#eiDQ?zl+-$LC95etzxEu}#hQ3Gl4P}|*dmh5`I38d4^Krw?%^J`5 zSgn`1u8aKm=@aYa0&NUw6r;z1vMiZRr*vJuK7K x(LfwWC?y$2&9$mHpU-Tco=B3IrtQ(A