56d89df934
Breaking Update: ~ elepower lighting added ~ light bulbs ~ flood lights ~ led panels ~ decorative shades ~ added to tome ~ improvements to dynamics inventory images ~ improvements to machine recipe storage ~ tome support for new recipes ~ additional elepower conduit types added with lighting and base ~ changes to compressing from 1 recipe slot to 2 slots (potential breaking change)
246 lines
8.4 KiB
Lua
246 lines
8.4 KiB
Lua
---------------------------------------------------
|
|
-- ___ _ --
|
|
-- | __| |___ _ __ _____ __ _____ _ _ --
|
|
-- | _|| / -_) '_ \/ _ \ V V / -_) '_| --
|
|
-- |___|_\___| .__/\___/\_/\_/\___|_| --
|
|
-- |_| --
|
|
-- _____ --
|
|
-- |_ _|__ _ __ ___ --
|
|
-- | |/ _ \ ' \/ -_) --
|
|
-- |_|\___/_|_|_\___| --
|
|
---------------------------------------------------
|
|
-- Crafts Page --
|
|
---------------------------------------------------
|
|
|
|
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,0.7;8.5,1.1;craft_lp_h;"..sty_h0s..craft_description..sty_h0e.."]"
|
|
local head_sub_lp_ov = "hypertext[0.5,1.4;8.5,1.0;craft_lp_sh_ov;"..sty_h1s.."Overview"..sty_h1e.."]"
|
|
local ov_lp_txt = "hypertext[0.75,2.1;8.0,5.5;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_bgimg_2.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,"..(5.6+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]"..
|
|
"hypertext[0.5,"..(7+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,"..(5.6+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]"..
|
|
"hypertext[4.5,"..(7+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,"..(5.6+y_offset+y_m_row)..";1.25,1.25;"..def[1]..";"..def[2]..";]"..
|
|
"hypertext[0.5,"..(7+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,0.7;8.5,1.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}}
|
|
-- }
|
|
|
|
--minetest.debug(dump(elepm.craft2[craft_type]))
|
|
for k,craft_recipes in pairs(craft_reg_path) do
|
|
local input = {}
|
|
local output = {}
|
|
|
|
if type(craft_recipes.output) == "table" then -- very rarly table eg grinding-fuel_rod_depleted
|
|
for k,v in pairs(craft_recipes.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(craft_recipes.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,def in pairs(craft_recipes.recipe)do -- recipe == inputs only
|
|
for name,num in pairs(def) do
|
|
table.insert(input,{name,num})
|
|
|
|
end
|
|
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
|
|
recipe_cnt = 1
|
|
end
|
|
|
|
end
|
|
|
|
-- Split recipes across 2 or more pages if needed.
|
|
local max_recipe_pp = 24 -- 2 columns
|
|
local pg_num = tonumber(page_num) or 1
|
|
local i = 1
|
|
|
|
if recipe_list_rdy.columns == 3 then
|
|
max_recipe_pp = 36
|
|
end
|
|
|
|
local recipe_rp = eletome.p_nav_bwd_fwd(craft_description,recipe_list_rdy,max_recipe_pp,pg_num,"craft_bwd_fwd")
|
|
|
|
-------------------------
|
|
-- 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 |