From f72ce33ca0d8c032c1f3b038ca412965bc545345 Mon Sep 17 00:00:00 2001 From: Sirrobzeroone <44497598+sirrobzeroone@users.noreply.github.com> Date: Sat, 19 Jun 2021 07:49:57 +1000 Subject: [PATCH] Documentation and Icons initial Adds some Icons and tooltips to machines Adds elepower tome - user guide --- elepower_machines/craft.lua | 6 +- elepower_machines/machines/alloy_furnace.lua | 6 + elepower_machines/machines/bases/crafter.lua | 92 +++- .../machines/bases/generator.lua | 4 +- .../machines/coal_alloy_furnace.lua | 1 + elepower_machines/machines/electrolyzer.lua | 9 +- elepower_machines/machines/pulverizer.lua | 4 + elepower_machines/machines/wind_turbine.lua | 2 +- elepower_nuclear/craftitems.lua | 6 +- elepower_papi/formspec.lua | 8 +- elepower_papi/network.lua | 2 +- .../elepower_gui_icon_crafter_genmat_1.png | Bin 0 -> 726 bytes .../elepower_gui_icon_crafter_genmat_2.png | Bin 0 -> 6041 bytes .../elepower_gui_icon_crafter_genmat_3.png | Bin 0 -> 5989 bytes .../textures/elepower_gui_icon_elepower.png | Bin 0 -> 5867 bytes .../elepower_gui_icon_elepower_32.png | Bin 0 -> 7173 bytes .../elepower_gui_icon_elepower_bg.png | Bin 0 -> 5756 bytes .../elepower_gui_icon_elepower_bg_32.png | Bin 0 -> 6585 bytes ...lepower_gui_icon_fluid_electrolyzer_in.png | Bin 0 -> 6394 bytes ...power_gui_icon_fluid_electrolyzer_out1.png | Bin 0 -> 851 bytes ...ower_gui_icon_fluid_electrolyzer_out12.xcf | Bin 0 -> 3504 bytes ...power_gui_icon_fluid_electrolyzer_out2.png | Bin 0 -> 716 bytes .../elepower_gui_icon_fluid_water.png | Bin 0 -> 5690 bytes .../elepower_gui_icon_power_stored.png | Bin 0 -> 5877 bytes elepower_solar/generator.lua | 4 +- elepower_tome/init.lua | 478 ++++++++++++++++++ elepower_tome/mod.conf | 3 + elepower_tome/textures/elepower_tome.png | Bin 0 -> 441 bytes .../textures/elepower_tome_bqimg1.png | Bin 0 -> 798 bytes .../textures/elepower_tome_equals.png | Bin 0 -> 602 bytes elepower_tome/textures/elepower_tome_plus.png | Bin 0 -> 565 bytes 31 files changed, 607 insertions(+), 18 deletions(-) create mode 100644 elepower_papi/textures/elepower_gui_icon_crafter_genmat_1.png create mode 100644 elepower_papi/textures/elepower_gui_icon_crafter_genmat_2.png create mode 100644 elepower_papi/textures/elepower_gui_icon_crafter_genmat_3.png create mode 100644 elepower_papi/textures/elepower_gui_icon_elepower.png create mode 100644 elepower_papi/textures/elepower_gui_icon_elepower_32.png create mode 100644 elepower_papi/textures/elepower_gui_icon_elepower_bg.png create mode 100644 elepower_papi/textures/elepower_gui_icon_elepower_bg_32.png create mode 100644 elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_in.png create mode 100644 elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_out1.png create mode 100644 elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_out12.xcf create mode 100644 elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_out2.png create mode 100644 elepower_papi/textures/elepower_gui_icon_fluid_water.png create mode 100644 elepower_papi/textures/elepower_gui_icon_power_stored.png create mode 100644 elepower_tome/init.lua create mode 100644 elepower_tome/mod.conf create mode 100644 elepower_tome/textures/elepower_tome.png create mode 100644 elepower_tome/textures/elepower_tome_bqimg1.png create mode 100644 elepower_tome/textures/elepower_tome_equals.png create mode 100644 elepower_tome/textures/elepower_tome_plus.png diff --git a/elepower_machines/craft.lua b/elepower_machines/craft.lua index e508a2f..dc8c63f 100644 --- a/elepower_machines/craft.lua +++ b/elepower_machines/craft.lua @@ -12,6 +12,7 @@ function elepm.register_craft_type(name, def) elepm.craft.types[name] = { inputs = def.inputs or 2, description = def.description or name, + overview = def.overview or name, time = def.time or 0, gui_name = def.gui_name, } @@ -215,5 +216,8 @@ end -- Cooking craft type built-in. elepm.register_craft_type("cooking", { description = "Cooking", - inputs = 1, + overview = "Cooking is more than just the prepartion of food ".. + "it provides access to the prepartion of ores to metals ".. + "and the creation of glass and glass objects.", + inputs = 1, }) diff --git a/elepower_machines/machines/alloy_furnace.lua b/elepower_machines/machines/alloy_furnace.lua index 1eeebc6..9cf3695 100644 --- a/elepower_machines/machines/alloy_furnace.lua +++ b/elepower_machines/machines/alloy_furnace.lua @@ -1,6 +1,10 @@ elepm.register_craft_type("alloy", { description = "Alloying", + overview = "Alloys are created materials which are stronger than ".. + "there base material components. These can be obtained ".. + "by combining differing materials in the Alloying Furnace.".. + "\nElepower provides a number of alloying recipes.", inputs = 2, icon = "elepower_machine_side.png^elepower_alloy_furnace.png", }) @@ -19,5 +23,7 @@ elepm.register_crafter("elepower_machines:alloy_furnace", { "elepower_machine_side.png", "elepower_machine_side.png", "elepower_machine_side.png^elepower_alloy_furnace_active.png", }, }, + ele_icon_material_1 ="default_copper_ingot.png", + ele_icon_material_2 ="default_tin_ingot.png", groups = {oddly_breakable_by_hand = 1} }) diff --git a/elepower_machines/machines/bases/crafter.lua b/elepower_machines/machines/bases/crafter.lua index e555df0..97f9a9f 100644 --- a/elepower_machines/machines/bases/crafter.lua +++ b/elepower_machines/machines/bases/crafter.lua @@ -2,10 +2,91 @@ -- It accepts a recipe type registered beforehand. -- Specialized formspec for crafters -function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, state) - local craftstats = elepm.craft.types[craft_type] +function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, machine_name, state) + local craftstats = elepm.craft.types[craft_type] + local craft_reg_path = elepm.craft[craft_type] local input_size = craftstats.inputs + local material_inputs = {} + local mat_inputs = "|" + local formspec_inout_icon_tooltip + local icon_def_slot_1 = minetest.registered_nodes[machine_name].ele_icon_material_1 or "elepower_gui_icon_crafter_genmat_1.png" + local icon_def_slot_2 = minetest.registered_nodes[machine_name].ele_icon_material_2 or "elepower_gui_icon_crafter_genmat_2.png" + local icon_def_slot_3 = minetest.registered_nodes[machine_name].ele_icon_material_3 or "elepower_gui_icon_crafter_genmat_3.png" + -- Start add icons and tooltips for input slots + -- setting material name values to keys helps remove duplicates + -- for cooking we have to retrieve from MT engine + if craft_type == "cooking" then + local sort_output = {} + for name,def in pairs(minetest.registered_items) do + local recipe = minetest.get_all_craft_recipes(name) + + if recipe ~= nil then + for k,v in pairs(recipe) do + if v.method == "cooking" and v.output ~= "" then + local reg_name = v.items[1] + + if string.find(reg_name, "group") ~= nil then + description = string.gsub(reg_name, "group:","All ") + else + description = minetest.registered_items[reg_name].description + end + material_inputs[description] = 1 + end + end + end + end + else + for k,v in pairs(craft_reg_path) do + for k2,v2 in pairs(v.recipe)do + -- have to check all registered items + if minetest.registered_items[k2] then + local description = minetest.registered_items[k2].description + + -- remove any text on 2nd/3rd line + if string.find(description,"\n") then + description = string.split(description,"\n") + description = description[1] + end + material_inputs[description] = 1 + end + end + end + end + + -- reverse table so we can sort + local material_in_sort = {} + for k,v in pairs(material_inputs)do + table.insert(material_in_sort,k) + end + table.sort(material_in_sort) + + for k,mat_desc in pairs(material_in_sort) do + mat_inputs = mat_inputs.."\n"..mat_desc + end + mat_inputs = string.gsub(mat_inputs, "|\n","") + + --adjust tooltip and layout depending on if we have 1/2/3 input slots + if input_size == 1 then + formspec_inout_icon_tooltip = "image[1.7,2.45;0.5,0.5;"..icon_def_slot_1.."]".. + "tooltip[1.5,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]"--"tooltip[1.5,2.0;1,1;"..minetest.colorize("#0399c6",mat_inputs).."]" + + elseif input_size == 2 then + formspec_inout_icon_tooltip = "image[1.2,2.45;0.5,0.5;"..icon_def_slot_1.."]".. + "tooltip[1.0,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]".. + "image[2.2,2.45;0.5,0.5;"..icon_def_slot_2.."]".. + "tooltip[2.0,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]" + + else + formspec_inout_icon_tooltip = "image[1.2,2.45;0.5,0.5;"..icon_def_slot_1.."]".. + "tooltip[1.0,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]".. + "image[2.2,2.45;0.5,0.5;"..icon_def_slot_2.."]".. + "tooltip[2.0,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]".. + "image[3.2,2.45;0.5,0.5;"..icon_def_slot_3.."]".. + "tooltip[3.0,2.0;1,1;"..mat_inputs..";#30434c;#0399c6]" + end + -- End add icons tooltips for in slots + local gui_name = "gui_furnace_arrow" if craftstats.gui_name then gui_name = craftstats.gui_name @@ -30,6 +111,7 @@ function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, stat local y = 1.5 local x = 1.5 + if in_height == 2 then y = 1 elseif in_height >= 3 then @@ -48,6 +130,7 @@ function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, stat ele.formspec.state_switcher(7, 0, state).. "list[context;src;"..x..","..y..";"..in_width..","..in_height..";]".. bar.. + formspec_inout_icon_tooltip.. "list[context;dst;5,1;2,2;]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. @@ -59,6 +142,7 @@ function ele.formspec.get_crafter_formspec(craft_type, power, percent, pos, stat default.get_hotbar_bg(0, 4.25) end + -- Don't duplicate function for every single crafter node function crafter_timer (pos, elapsed) local refresh = false @@ -180,7 +264,7 @@ function crafter_timer (pos, elapsed) pct = math.floor((time / ele.helpers.round(res_time * 10)) * 100) end - meta:set_string("formspec", get_formspec(machine_def.craft_type, pow_buffer, pct, pos, state)) + meta:set_string("formspec", get_formspec(machine_def.craft_type, pow_buffer, pct, pos ,minetest.get_node(pos).name,state)) meta:set_string("infotext", ("%s %s"):format(machine_def.description, status) .. "\n" .. ele.capacity_text(capacity, storage)) @@ -223,7 +307,7 @@ function elepm.register_crafter(nodename, nodedef) local storage = ele.helpers.get_node_property(meta, pos, "storage") local capacity = ele.helpers.get_node_property(meta, pos, "capacity") local pow_buffer = {capacity = capacity, storage = storage, usage = 0} - meta:set_string("formspec", get_formspec(craft_type, pow_buffer, nil, pos)) + meta:set_string("formspec", get_formspec(craft_type, pow_buffer, nil, pos,nodename)) end -- Upgradable diff --git a/elepower_machines/machines/bases/generator.lua b/elepower_machines/machines/bases/generator.lua index 918d899..3c82720 100644 --- a/elepower_machines/machines/bases/generator.lua +++ b/elepower_machines/machines/bases/generator.lua @@ -7,8 +7,8 @@ local function get_formspec_default(power, percent, state) ele.formspec.power_meter(power).. ele.formspec.state_switcher(7, 0, state).. "list[context;src;3,1.5;1,1;]".. - "image[4,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. - percent..":default_furnace_fire_fg.png]".. + "image[4,1.5;1,1;elepower_gui_icon_elepower_bg.png^[lowpart:".. + percent..":elepower_gui_icon_elepower.png]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. "listring[current_player;main]".. diff --git a/elepower_machines/machines/coal_alloy_furnace.lua b/elepower_machines/machines/coal_alloy_furnace.lua index 1190692..4b6a407 100644 --- a/elepower_machines/machines/coal_alloy_furnace.lua +++ b/elepower_machines/machines/coal_alloy_furnace.lua @@ -192,6 +192,7 @@ end ele.register_base_device("elepower_machines:coal_alloy_furnace", { description = "Coal-fired Alloy Furnace", + craft_type = "alloy", paramtype2 = "facedir", ele_active_node = true, ele_active_nodedef = { diff --git a/elepower_machines/machines/electrolyzer.lua b/elepower_machines/machines/electrolyzer.lua index 383ef63..14c8214 100644 --- a/elepower_machines/machines/electrolyzer.lua +++ b/elepower_machines/machines/electrolyzer.lua @@ -40,10 +40,16 @@ local function get_formspec(time, power, input, out1, out2, state) default.gui_slots.. ele.formspec.power_meter(power).. ele.formspec.fluid_bar(1, 0, input).. + "image[1.2,2.45;0.5,0.5;elepower_gui_icon_fluid_electrolyzer_in.png]".. + "tooltip[1.0,2.0;1,1;"..minetest.colorize("#0399c6"," Water\nHeavy Water\n BioFuel").."]".. ele.formspec.state_switcher(3.5, 0, state).. bar.. ele.formspec.fluid_bar(6, 0, out1).. + "image[6.2,2.45;0.5,0.5;elepower_gui_icon_fluid_electrolyzer_out1.png]".. + "tooltip[6.0,2.0;1,1;"..minetest.colorize("#0399c6"," Hydrogen\nDeuterium\n Nitrogen").."]".. ele.formspec.fluid_bar(7, 0, out2).. + "image[7.2,2.45;0.5,0.5;elepower_gui_icon_fluid_electrolyzer_out2.png]".. + "tooltip[7.0,2.0;1,1;"..minetest.colorize("#0399c6"," Oxygen").."]".. "list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,5.5;8,3;8]".. "listring[current_player;main]".. @@ -153,7 +159,7 @@ local function electrolyzer_timer(pos) meta:set_string("infotext", ("Electrolyzer %s\n%s"):format(status, ele.capacity_text(pow_buffer.capacity, pow_buffer.storage))) meta:set_string("formspec", get_formspec(time_percent, pow_buffer, input, out1, out2, state)) - + minetest.debug(dump(pow_buffer)) return refresh end @@ -188,5 +194,6 @@ ele.register_machine("elepower_machines:electrolyzer", { on_construct = function (pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", get_formspec()) + end }) diff --git a/elepower_machines/machines/pulverizer.lua b/elepower_machines/machines/pulverizer.lua index 69eec1b..b512289 100644 --- a/elepower_machines/machines/pulverizer.lua +++ b/elepower_machines/machines/pulverizer.lua @@ -1,6 +1,10 @@ elepm.register_craft_type("grind", { description = "Grinding", + overview = "Grinding of solid materials occurs through mechanical".. + "forces that break up the structure of the material.".. + "After grinding the state of the material is changed;".. + "the grain size and the grain shape will be smaller and finer.", icon = "elepower_machine_side.png^elepower_grinder.png", inputs = 1, }) diff --git a/elepower_machines/machines/wind_turbine.lua b/elepower_machines/machines/wind_turbine.lua index 004f285..aef79b1 100644 --- a/elepower_machines/machines/wind_turbine.lua +++ b/elepower_machines/machines/wind_turbine.lua @@ -118,7 +118,7 @@ function ele.register_wind_generator(nodename, nodedef) end ele.register_wind_generator("elepower_machines:wind_turbine", { - description = "Wind Turbine\nRequires Wind Turbine Blades", + description = "Wind Turbine\n(Requires Wind Turbine Blades)", 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_wind_turbine_face.png", diff --git a/elepower_nuclear/craftitems.lua b/elepower_nuclear/craftitems.lua index 302c019..6bd8a5f 100644 --- a/elepower_nuclear/craftitems.lua +++ b/elepower_nuclear/craftitems.lua @@ -13,17 +13,17 @@ minetest.register_craftitem("elepower_nuclear:uranium_lump", { -- Dusts minetest.register_craftitem("elepower_nuclear:uranium_dust", { - description = "Enriched Uranium Dust\nReady to be used as fuel", + description = "Enriched Uranium Dust\n(Ready to be used as fuel)", inventory_image = "elenuclear_uranium_dust.png" }) minetest.register_craftitem("elepower_nuclear:depleted_uranium_dust", { - description = "Depleted Uranium Dust\nRequires enrichment", + description = "Depleted Uranium Dust\n(Requires enrichment)", inventory_image = "elenuclear_depleted_uranium_dust.png" }) minetest.register_craftitem("elepower_nuclear:nuclear_waste", { - description = "Nuclear Waste\nMostly unusable for nuclear fission", + description = "Nuclear Waste\n(Mostly unusable for nuclear fission)", inventory_image = "elenuclear_uranium_waste.png" }) diff --git a/elepower_papi/formspec.lua b/elepower_papi/formspec.lua index cb2adf4..0d4e6f9 100644 --- a/elepower_papi/formspec.lua +++ b/elepower_papi/formspec.lua @@ -52,8 +52,9 @@ function ele.formspec.power_meter(capacitor) usage = 0 end - return ele.formspec.create_bar(0, 0, pw_percent, "#00a1ff") .. - "tooltip[0,0;1,2.5;".. + return ele.formspec.create_bar(0, 0, pw_percent, "#00a1ff") .. + "image[0.2,2.45;0.5,0.5;elepower_gui_icon_power_stored.png]".. + "tooltip[0,0;1,2.9;".. minetest.colorize("#c60303", "Energy Storage\n").. minetest.colorize("#0399c6", ele.capacity_text(capacitor.capacity, capacitor.storage)).. minetest.colorize("#565656", "\nPower Used / Generated: " .. usage .. " " .. ele.unit) .. "]" @@ -64,7 +65,7 @@ function ele.formspec.fluid_bar(x, y, fluid_buffer) local texture = "default_water.png" local metric = 0 local tooltip = ("tooltip[%f,%f;1,2.5;%s]"):format(x, y, "Empty Buffer") - + if fluid_buffer and fluid_buffer.fluid and fluid_buffer.fluid ~= "" and minetest.registered_nodes[fluid_buffer.fluid] ~= nil then texture = minetest.registered_nodes[fluid_buffer.fluid].tiles[1] @@ -81,5 +82,6 @@ function ele.formspec.fluid_bar(x, y, fluid_buffer) return "image["..x..","..y..";1,2.8;elepower_gui_barbg.png".. "\\^[lowpart\\:"..metric.."\\:"..texture.."\\\\^[resize\\\\:64x128]".. "image["..x..","..y..";1,2.8;elepower_gui_gauge.png]".. + "image[0.2,2.45;0.5,0.5;elepower_gui_icon_power_stored.png]".. tooltip end diff --git a/elepower_papi/network.lua b/elepower_papi/network.lua index 854c69a..455f559 100644 --- a/elepower_papi/network.lua +++ b/elepower_papi/network.lua @@ -389,7 +389,7 @@ minetest.register_abm({ end end -- if pw_supply ~= 0 then minetest.debug("end_run") end -- debug line - -- minetest.debug(dump(ele.graphcache)) -- network dump + -- minetest.debug(dump(ele.graphcache)) -- network dump end, }) diff --git a/elepower_papi/textures/elepower_gui_icon_crafter_genmat_1.png b/elepower_papi/textures/elepower_gui_icon_crafter_genmat_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2475e96e9d0c5200892edaacdf8dbd7201dfbc40 GIT binary patch literal 726 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 B^6dZs literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_elepower.png b/elepower_papi/textures/elepower_gui_icon_elepower.png new file mode 100644 index 0000000000000000000000000000000000000000..2ada10a05cbd95f29355052aacbe60271053f2dc GIT binary patch literal 5867 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 literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_elepower_32.png b/elepower_papi/textures/elepower_gui_icon_elepower_32.png new file mode 100644 index 0000000000000000000000000000000000000000..17419b37d6dad57b960f950f8db026a560038f13 GIT binary patch literal 7173 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 AF8}}l literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_elepower_bg.png b/elepower_papi/textures/elepower_gui_icon_elepower_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d713bc89a7eb230b1afff4a6755307e938cfb089 GIT binary patch literal 5756 zcmeHLc~leU77tKB7WX0+QDeZTqC+P8@)8h22vH)tf*VX`CNL0^FcVCGgQcK-wPJBW z1*!$D)}<}A1r!A;xMOjt3yKO_#NCSBtgTzW1k~{Av(Izd|I9f_=DXkT{_g$mHgjfC z-K~J`ygWb`|*V_S{{DE$5HgbanW)!u|4cI!E{Tm#Vta zwP&Xq#%$fVX8A!6^3d$#tle|*EzSSg*fHv1$Ihy{%Z__}Q}EpC>LnMy@9LIB1u;8> zU+rorxs%wn?YAAyit{1tH(BCzs#u`dbIa|VcX4Jy0DkiP*zljuZO)J^v#_jN8m9BGLzD($|#adgZD$E-ye`m5RHXHKtNI_N|-l$v<> z#NI}iF{`gsEm&Xc^ZTyiLiK>QS?|>Uc5__ul+xkxV#n0j%_r-tSNi!neU$Jmdq$oY zf9RE#xcU**q3e$NC6o=Xjl1L#|J(84Z|bv3E0-gkp~IWsNG{;kMdhxqH=cSBmc`I3 zKC4))7!rJdE=Vo3A9OQk)c&!JIa&2iGwhmb7qo3_?A&yE|C_`&pD$BlV{P0(c+Z#13qn;}Q_E^f;Mh*_Kq^3<_HE zA$QGCh?m|_(Jtd=dfUO#0M4GP51WZwYkoED=@XY zrsUw-hh2-^+OzLG+_e4H+Ve|D(@~eVqdFrdX0Pj#%HNKPH2wZboS~AG**MUmtz7(ywh{?Wa@jeN@8559?9VF4$8YNfKMrwy_(*c|ewE{s4|ZMb z@;N@Ic7b^hjb^uykjWyIGTGC%1I@N3cbPP7?_}@&i7_<{Xuz<+8HbLG6YjcY6#ETp z3MM92-%KKJcyfub=-J+mXYvb1FOGBeOrA4xwqwv;hkZwmD8H3Yd6*cTGWb?gMqo#K z&V>et1=*!rG-rersjHS1%J+xQi~G4@y|bM=qtInhX||-MB=q19nF9wVb~7ZO{&J+R6Dm)72f0su&&O^sd+Ydh z?rwu;@}k3iiNJGBfw%7u?ONU(XYX^+-Y;^DX#U;6`|Y2XmX{e!G2WPjB7?=0!TeT-xp2+L1!(I93rO(v7SiQ}&)lbI}$ zNW_HMOg0+=2#Ctk84)w2qkJqBJscr8g_4B9Na%HR3n!x1XBwpp2H2sXPhG8KDvmv&KX{!%*RjOy&I;uB{Af8M!VqmiTVP<-I9}UVV zpZDC}3pJ=%a64i~i)j!I3aN1ngScu8hSXe`3!y?BLAYvE z&B1URDy5DxB03bePyup(0`O?~sECL1)etU3IS^MM5<)^XR|LTr%2Q)(3}vYWHWU#g z0XhNE+InT7!T=Qt3q%|)#)s4hABMO*TmvC$0dNk{h%`K&T7+XgRF*u5gCdnu2HPLD zl3OK_TEwW)lj)$n2py(3QO~zxiF7>1h*-kL;Fg={`7w9%iAlN2a(3o8ru zXS1#97%C10oCqj4A{|M_nFd|5b;FVvF*ptgEn?{oz-*O+(}-mxju`c1tX{8`GAzE) zEtJ-#qDy+)MI5e2t%_DKj#)acx95V9WTtf~VZIFfC#IMby-D}~@jQn|iF-3!EM;Xa1i^((?v;_`Z}2$4eD*xh+XR+5@eh7_ zo9iF60H|LZd8PQi4%h2&y;1~T3H-XcUWeRM=A@pg2m$|e+H{$d%Up2fVhBs1zzf_nmakp#_z%rM=xkJ~3uRJFIi@HU*GzjBgOCDZdg6B?LOk1u*mdlj#q0CQdCgNy1%0F=AQf_ v@!h1dOHyfm`y1on_J&^rJ}$rRg?%@|BWzk@ea;RZ@Pek4PYbCGPRjoSs0&p8 literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_elepower_bg_32.png b/elepower_papi/textures/elepower_gui_icon_elepower_bg_32.png new file mode 100644 index 0000000000000000000000000000000000000000..dd35b1776f86abee1aaa38c9c9679231f3b0c18a GIT binary patch literal 6585 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 QB2*IJd6v^Yhefgf0o5d_m;e9( literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_in.png b/elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_in.png new file mode 100644 index 0000000000000000000000000000000000000000..9c539c5d30654160d40feccd40a218b35f4c3b05 GIT binary patch literal 6394 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 O{v24!?^#|iv%dijM!EC= literal 0 HcmV?d00001 diff --git a/elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_out2.png b/elepower_papi/textures/elepower_gui_icon_fluid_electrolyzer_out2.png new file mode 100644 index 0000000000000000000000000000000000000000..d01f91b220700f112fd29d57eff5b842f86728a5 GIT binary patch literal 716 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 JN2tlMs6L2z_gg_dT1Ol##C@YF!R}d^9 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
", + style_h0e = "
", + style_h1s = "", + style_h2s = "", + style_h3s = "", -- approximate default "label" size + style_h4s = "" + + } + +function eletome.contents_page() + -- Contents page structured as 2 pages ie an open book + -- a single column on left page and 2 columns on right page + + -- Assign Common styles to local vars + local sty_h0s = eletome.common_styles.style_h0s + local sty_h0e = eletome.common_styles.style_h0e + local sty_h1s = eletome.common_styles.style_h1s + local sty_h1e = eletome.common_styles.style_h1e + local sty_h2s = eletome.common_styles.style_h2s + local sty_h2e = eletome.common_styles.style_h2e + local sty_h3s = eletome.common_styles.style_h3s + local sty_h3e = eletome.common_styles.style_h3e + local sty_h4s = eletome.common_styles.style_h4s + local sty_h4e = eletome.common_styles.style_h4e + + -- Contents page left page Content + + local content_lp_txt = "Elepower adds power to a game, Power is referred to in units and these units are referred to as EpU (Elepower Unit).\nNew crafts are added to the game as well as machines to enable these new crafts and make use of EpU/s.\n\nA big thank you to IcyDiamond the orginal creator of this mod." + + local heading_lp = "hypertext[0.50,1.0;8.5,10;content_lp_h_tome;"..sty_h0s.."Elepower\nTome"..sty_h0e.."]" + local content_lp = "hypertext[0.75,2.5;8.0,8;content_lp_c_text;"..sty_h3s..content_lp_txt..sty_h3s.."]" + + + -- Contents page right page Content + local heading_rp = "hypertext[9.0,1.0;8.5,9.0;content_rp_h_cont;"..sty_h1s.."Contents"..sty_h1e.."]" + local heading_rp_craft = "hypertext[9.0,1.5;8.5,7.5;content_rp_sh_crafts;"..sty_h2s.."Crafts"..sty_h2e.."]" + + local raw_all_crafts = table.copy(elepm.craft.types) + local all_crafts = {} + -- Gets the Human readable craft name + -- and sorts them alphabetically + for k,def in pairs(raw_all_crafts) do + table.insert(all_crafts,def.description) + end + table.sort(all_crafts) + + -- Generate the craft_content section + -- 2 columns of h2 headings down the page + local left_col = "" + local rght_col = "" + for k,craft_name in pairs(all_crafts) do + if (k % 2 == 0) then -- even key - backwards fix this left should be odd.... + left_col = left_col..""..craft_name.."".."\n" + else -- odd key + rght_col = rght_col..""..craft_name.."".."\n" + end + end + + local craft_rp_txt = "hypertext[09.0,2.0;4.5,7.0;content_rp_cl_craft_txt;"..sty_h3s..left_col..sty_h3e.."]".. + "hypertext[13.5,2.0;4.5,7.0;content_rp_cr_craft_txt;"..sty_h3s..rght_col..sty_h3e.."]" + local heading_rp_mach = "hypertext[09.0,4.5;8.5,6.5;content_rp_sh_mach;"..sty_h2s.."Machines"..sty_h2e.."]" + + local subhead_mach_gen = "hypertext[09.0,4.8;8.5,6.5;content_rp_sh_gen;"..sty_h3s.."Generators"..sty_h3e.."]" + + -- remove all "active" version of providers and 2nd half any descriptions with "\n" + local i = 1 + local lft_col = "" + local rht_col = "" + local mach_sort = {} + local mach_key = {} + for name, def in pairs(minetest.registered_nodes) do + if def.groups["ele_provider"] then + if not string.find(name, "active") then + local description = def.description + + if string.find(description,"\n") then + description = string.match(description,"(.+)\n") + end + table.insert(mach_sort,description) + mach_key[description] = name + end + end + end + + table.sort(mach_sort) + + for k,des in pairs(mach_sort) do + if (k % 2 == 0) then -- even key + rht_col = rht_col..""..des.."".."\n" + else -- odd key + lft_col = lft_col..""..des.."".."\n" + end + end + + local mach_rp_gen_txt = "hypertext[09.0,5.2;4.5,7.0;content_rp_cl_mach_txt;"..sty_h4s..lft_col..sty_h4e.."]".. + "hypertext[13.5,5.2;4.5,7.0;content_rp_cr_mach_txt;"..sty_h4s..rht_col..sty_h4e.."]" + + + -- Assemble contents page + local eletome_cont = heading_lp..content_lp.. + heading_rp..heading_rp_craft..craft_rp_txt + --heading_rp_mach..subhead_mach_gen..mach_rp_gen_txt + + return eletome_cont +end + +function eletome.craft_page(craft_description,page_num) + -- remove "action:" from string + local craft_description = string.match(craft_description, ":(.*)") + + -- Convert craft_description back to craft + local raw_all_crafts = table.copy(elepm.craft.types) + local craft_click = {} + local craft_type + for craft_name,def in pairs(raw_all_crafts) do + if def.description == craft_description then + craft_click[craft_name] = def + craft_type = craft_name + end + end + + if craft_click == "nil" then + minetest.debug("error") + end + -- Craft page structured as 2 pages ie an open book + -- a single column on left page and single column + -- on the right page. + + -- Assign Common styles to local vars + local sty_h0s = eletome.common_styles.style_h0s + local sty_h0e = eletome.common_styles.style_h0e + local sty_h1s = eletome.common_styles.style_h1s + local sty_h1e = eletome.common_styles.style_h1e + local sty_h2s = eletome.common_styles.style_h2s + local sty_h2e = eletome.common_styles.style_h2e + local sty_h3s = eletome.common_styles.style_h3s + local sty_h3e = eletome.common_styles.style_h3e + local sty_h4s = eletome.common_styles.style_h4s + local sty_h4e = eletome.common_styles.style_h4e + + -------------------------- + -- Craft page left page -- + -------------------------- + local heading_lp = "hypertext[0.5,1.0;8.5,9.0;craft_lp_h;"..sty_h0s..craft_description..sty_h0e.."]" + local head_sub_lp_ov = "hypertext[0.5,1.5;8.5,7.5;craft_lp_sh_ov;"..sty_h1s.."Overview"..sty_h1e.."]" + local ov_lp_txt = "hypertext[0.75,2.0;8.0,7.0;craft_lp_ov_text;"..sty_h3s..craft_click[craft_type].overview..sty_h3s.."]" + + -- calculate approximatly how many lines "overview" takes + local length = string.len(craft_click[craft_type].overview) + local cpl = eletome.char_per_line + local num_lines = math.ceil(length/cpl) + local y_offset = num_lines*eletome.y_space_line + + -- Find machines that do craft + local mach_names = {} + + for name,def in pairs(minetest.registered_nodes)do + if def.craft_type == craft_type then + if def.ele_active_node and string.find(name,"active") then -- only insert active version of machine + table.insert(mach_names,{name,def.description}) + + elseif not def.ele_active_node then + table.insert(mach_names,{name,def.description}) + end + end + end + + local machines_lp = "style_type[item_image_button;bgimg=elepower_tome_bqimg1.png]" + local y_m_row = 0 --multiple rows of machines + for k,def in pairs(mach_names)do + if #mach_names == 1 then + machines_lp = machines_lp.."item_image_button[4,"..(2.7+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]".. + "hypertext[0.5,"..(4+y_offset+y_m_row)..";8.4,1;craft_mach_lab;"..sty_h3s..def[2]..sty_h3s.."]" + + else + if (k % 2 == 0) then -- even key + machines_lp = machines_lp.."item_image_button[6,"..(2.7+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]".. + "hypertext[4.5,"..(4+y_offset+y_m_row)..";4.5,1;craft_mach_lab;"..sty_h3s..def[2]..sty_h3s.."]" + y_m_row = y_m_row + 2.5 + else -- odd key + machines_lp = machines_lp.."item_image_button[2,"..(2.7+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]".. + "hypertext[0.5,"..(4+y_offset+y_m_row)..";4.5,1;craft_mach_lab;"..sty_h3s..def[2]..sty_h3s.."]" + end + end + end + --------------------------- + -- Craft page right page -- + --------------------------- + local head_sub_rp_rec = "hypertext[9.5,1.0;8.0,9.0;craft_lp_h;"..sty_h1s.."Recipes"..sty_h1e.."]" + + local craft_reg_path = elepm.craft[craft_type] + local recipe_list = {} + local recipe_list_rdy = {} + + + if craft_type == "cooking" then + -- restructure craft recipe inputs/outputs, so easier to output to formspec + -- recipe_list = { + -- {input={item1,num},{item2,num},output={item,num}}, + -- {input={item1,num},{item2,num},output={item1,num},{item2,num}} + -- } + + for name,def in pairs(minetest.registered_items) do + local recipe = minetest.get_all_craft_recipes(name) + + if recipe ~= nil then + for k,def in pairs(recipe) do + if def.method == "cooking" and def.output ~= "" then + if string.find(def.items[1],"group") then + def.items[1] = string.gsub(def.items[1],"group","default") + end + -- This structure matches below, double table nesting a bit redundant + + table.insert(recipe_list,{input = {{def.items[1],1}},output = {{def.output,1}}}) + end + end + end + end + + else + -- restructure craft recipe inputs/outputs, so easier to output to formspec + -- recipe_list = { + -- {input={item1,num},{item2,num},output={item,num}}, + -- {input={item1,num},{item2,num},output={item1,num},{item2,num}} + -- } + + for k,v in pairs(craft_reg_path) do + local input = {} + local output = {} + + if type(v.output) == "table" then -- very rarly table eg grinding-fuel_rod_depleted + for k,v in pairs(v.output)do + local t_out = string.split(v," ") + table.insert(output,{t_out[1],tonumber(t_out[2]) or 1}) + end + + else + local t_out = string.gsub(tostring(v.output),"ItemStack%(\"","") + local t_out = string.gsub(t_out,"\"%)","") + local t_out = string.split(t_out," ") + table.insert(output,{t_out[1],tonumber(t_out[2]) or 1}) + end + + for k2,v2 in pairs(v.recipe)do + table.insert(input,{k2,v2}) + end + + table.insert(recipe_list,{input = input,output = output}) + end + --minetest.debug(dump(recipe_list)) + end + + -- build recipe list + local y_off = 0 + local x_off = 0 + local col_cnt = 1 + local recipe_cnt = 1 + + for k,def in pairs(recipe_list) do + local s_recipe ="style_type[label;font_size=-2;font=bold;textcolor=#FFF]" + local in_len = #def.input + local out_len = #def.output + local columns = 2 + local col_gap = 0.75 + local in_cnt = 1 + + if (in_len+out_len) == 2 then + columns = 3 + end + + if (in_len+out_len) == 3 then + col_gap = 1.5 + end + + + for k,def in pairs(def.input) do + + s_recipe = s_recipe.."item_image_button["..(9.5 + x_off)..","..(1.5+y_off)..";0.6,0.6;"..def[1]..";"..def[1]..";]" + s_recipe = s_recipe.."label["..(10 + x_off)..","..(1.99 + y_off)..";"..def[2].."]" + x_off = x_off+0.7 + + if in_cnt >= in_len then + s_recipe = s_recipe.."image["..(9.5 + x_off)..","..(1.5+y_off)..";0.6,0.6;elepower_tome_equals.png]" + x_off = x_off+0.7 + end + in_cnt = in_cnt+1 + end + + for k,def in pairs(def.output)do + s_recipe = s_recipe.."item_image_button["..(9.5 + x_off)..","..(1.5+y_off)..";0.6,0.6;"..def[1]..";"..def[1]..";]" + s_recipe = s_recipe.."label["..(10 + x_off)..","..(1.99 + y_off)..";"..def[2].."]" + x_off = x_off+0.7 + end + + if col_cnt >= columns then + x_off = 0 + y_off = y_off + 0.7 + col_cnt = 1 + else + x_off = x_off+col_gap + col_cnt = col_cnt + 1 + end + table.insert(recipe_list_rdy,s_recipe) + recipe_list_rdy.columns = recipe_list_rdy.columns or columns + recipe_cnt = recipe_cnt + 1 + + --reset y_off(set) as these will be on page 2/3 etc + if recipe_cnt > recipe_list_rdy.columns*12 then + y_off = 0 + end + + end + + -- Split recipes across 2 or more pages if needed. + local max_recipe_pp = 24 -- 2 columns + local num_recipe = #recipe_list_rdy + local pg_num = tonumber(page_num) or 1 + local i = 1 + local recipe_rp = "" + local fwd_page_name = "craft_page_fwd" + local bwd_page_name = "craft_page_bwd" + + + if recipe_list_rdy.columns == 3 then + max_recipe_pp = 36 + end + + + if pg_num > 1 then + -- Check if we need another fwd button + if pg_num*max_recipe_pp < num_recipe then + recipe_rp = recipe_rp.."button[15,0;2.5,0.5;"..fwd_page_name..";Page "..(pg_num + 1).." >>]" + end + -- Always need back button + recipe_rp = recipe_rp.."button[12.5,0;2.5,0.5;"..bwd_page_name..";<< "..(pg_num - 1).." Page]" + + elseif num_recipe > max_recipe_pp then + recipe_rp = recipe_rp.."button[15,0;2.5,0.5;"..fwd_page_name..";Page "..(pg_num + 1).." >>]" + end + + -- Pass craft_description to player recieve fields when fwd/bwd pressed - not visible on formspec + recipe_rp = recipe_rp.."field[10,12;1,0.5;craft_description;;"..craft_description.."]" + + local pg_offset = (pg_num-1)*max_recipe_pp + i = i+pg_offset + + while i <= (max_recipe_pp + pg_offset) and i <= num_recipe do + recipe_rp = recipe_rp..recipe_list_rdy[i] + i=i+1 + end + + ------------------------- + -- Assemble craft page -- + ------------------------- + local eletome_craft = heading_lp..head_sub_lp_ov..ov_lp_txt..machines_lp.. + head_sub_rp_rec..recipe_rp + + return eletome_craft + +end + + + + + + + + diff --git a/elepower_tome/mod.conf b/elepower_tome/mod.conf new file mode 100644 index 0000000..279f234 --- /dev/null +++ b/elepower_tome/mod.conf @@ -0,0 +1,3 @@ +name = elepower_tome +description = Elepower Power Network User Guide +depends = elepower_machines diff --git a/elepower_tome/textures/elepower_tome.png b/elepower_tome/textures/elepower_tome.png new file mode 100644 index 0000000000000000000000000000000000000000..6c98240d8784be4627286354f8ed1b06e1b1590f GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QL70(Y)*K0-AX}2Ry9>jA5L~c#`DCC7dx@v7EBjM6ekK*m z58@Tefu?GDx;Tbd_$Q|vU_Wy9pL3+ZhfgAHRd?7JOlOPCZz)oE;IrPcP4NbALzdm< zZIW6HjA{qBM({eaDx8h||KE6qd1Gb@kMQ9SQZfrNx4r%OVZc+2Kx{2Y~EX>4Tx04R}tkv&MmKpe$iQ?(*34i*t{$j~}j@C$L2Di*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR_^SM7qK*^a5@QB27OgAjz4dR(i zOXs{#9ArgFAwDM_Gw6cEk6f2se&bwlSm2pKBb}Tl4ibxnHkR9%6%CbmnmDAW8s!Ta zmle)ioYiubHSft^=+9{@DX!BTK@3ZXBLNXIswklh3lUm1QcNUiKia`R?D!MplF3y9 zBgXzPKf-`-7iiRM`}^3o8z+GG8Mx9~{z@H~{Up8C z(n3c-|2A-O-O}Ve;Bp5TdeS9BawIQJA)g1{&*+=7z`!lgx90ZN+{ftykfyGdZ-9eC zV6;Hl>mAs9tw1w?B+#K>3hFnDA0m#@M%rg* zvrby}KP&OM2|WQ=<5z@bs$efFJsKrrFLc}b3@}ZL<+3sE0?o8Xxs5F33!ndQE7&GA z)-_X)Bbq?%kt$c}%xxYnk7~ c@2Y-?FDvG;+;N^Nz5oCK07*qoM6N<$f|v|lVgLXD literal 0 HcmV?d00001 diff --git a/elepower_tome/textures/elepower_tome_equals.png b/elepower_tome/textures/elepower_tome_equals.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6227f033e4de1d236baec3424ffde76933f662 GIT binary patch literal 602 zcmV-g0;TEX>4Tx04R}tkv&MmKpe$iQ?(*34i*t{$j~}j@C$L2Di*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR_^SM7qK*^a5@QB27OgAjz4dR(i zOXs{#9ArgFAwDM_Gw6cEk6f2se&bwlSm2pKBb}Tl4ibxnHkR9%6%CbmnmDAW8s!Ta zmle)ioYiubHSft^=+9{@DX!BTK@3ZXBLNXIswklh3lUm1QcNUiKia`R?D!MplF3y9 zBgXzPKf-`-7iiRM`}^3o8z+GG8Mx9~{z@H~{Up8C z(n3c-|2A-O-O}Ve;Bp5TdeS9BawIQJA)g1{&*+=7z`!lgx90ZN+{ftykfyGdZ-9eC zV6;Hl>mAXh}ptR5;6HU>Nkk%1G?Lm66zgT=GoB7*doM&4AAkqFk|N zLE(Rz7{UURB-Ws!yl4i7NlX79JNJr_fq{X65oSP9UNlKA>YKEb;n=xXj7*fq5+f;I ofVmQ8JN;r};4~AHlm{LF017`k^8E#Uwg3PC07*qoM6N<$f|kSqi2wiq literal 0 HcmV?d00001 diff --git a/elepower_tome/textures/elepower_tome_plus.png b/elepower_tome/textures/elepower_tome_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa5b0b622661d135ae02239155f3c23ac346420 GIT binary patch literal 565 zcmV-50?Pe~P)EX>4Tx04R}tkv&MmKpe$iQ?(*34i*t{$j~}j@C$L2Di*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR_^SM7qK*^a5@QB27OgAjz4dR(i zOXs{#9ArgFAwDM_Gw6cEk6f2se&bwlSm2pKBb}Tl4ibxnHkR9%6%CbmnmDAW8s!Ta zmle)ioYiubHSft^=+9{@DX!BTK@3ZXBLNXIswklh3lUm1QcNUiKia`R?D!MplF3y9 zBgXzPKf-`-7iiRM`}^3o8z+GG8Mx9~{z@H~{Up8C z(n3c-|2A-O-O}Ve;Bp5TdeS9BawIQJA)g1{&*+=7z`!lgx90ZN+{ftykfyGdZ-9eC zV6;Hl>mA