195 lines
7.2 KiB
Lua

local CraftingBuildingsSett = {
classname = "FNCraftingBuildingsSett",
}
local cat_text = "cat"
local buildings = "buildings"
local categories = "categories"
function CraftingBuildingsSett.get_val(setting, type, val)
local global_set = Settings.get_global_sett()
if not global_set[setting.name] then
global_set[setting.name] = {}
global_set[setting.name][categories] = {}
global_set[setting.name][buildings] = {}
end
if global_set[setting.name][type] then
if global_set[setting.name][type][val] == nil then global_set[setting.name][type][val] = setting.def_val end
return global_set[setting.name][type][val]
else
Debug:error("Error in function CraftingBuildingsSett.get_val: unknown type", type, "")
end
end
function CraftingBuildingsSett.set_val(setting, val)
local gl_sett = Settings.get_global_sett()[setting.name]
if gl_sett[val.type] then
if val.button == 2 then
gl_sett[val.type][val.name] = true
elseif val.button == 4 then
gl_sett[val.type][val.name] = false
end
end
end
function CraftingBuildingsSett.add_label_func(parent, sett) end
function CraftingBuildingsSett.split_cat(category)
local ret_str = string.format("%.12s", category)
if string.len(category) > 12 then
return ret_str .. ""
end
return ret_str
end
function CraftingBuildingsSett.add_content_func(parent, sett)
local craft_tb = get_crafting_categories_list()
local gui_template = {}
for cat, items in pairs(craft_tb) do
local flow_childer = {}
table.insert(flow_childer,
{
type = "sprite-button",
name = sett.name .. "\t" .. cat_text .. "\t" .. cat .. "\tbut",
style = CraftingBuildingsSett.get_category_style(cat),
tooltip = {"", cat, "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}},
caption = CraftingBuildingsSett.split_cat(cat)
})
for _, item in pairs(items) do
if item.type == "building" then
table.insert(flow_childer,
{
type = "choose-elem-button",
name = sett.name .. "\t" .. cat .. "\t" .. item.val.name,
elem_type = "item",
elem_value = item.val.name,
locked = true,
style = CraftingBuildingsSett.get_building_style(cat, item.val.name),
tooltip = {"", Gui.get_local_name(item.val), "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}},
})
elseif item.type == "player" then
table.insert(flow_childer,
{
type = "sprite-button",
name = sett.name .. "\t" .. cat .. "\t" .. item.val.name,
style = CraftingBuildingsSett.get_building_style(cat, item.val.name),
tooltip = {"", {"fnei.handcraft"}, "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}},
sprite = "fnei_hand_icon",
})
elseif item.type == "resource-miner" then
table.insert(flow_childer,
{
type = "choose-elem-button",
name = sett.name .. "\t" .. cat .. "\t" .. item.val.name,
elem_type = "item",
elem_value = item.val.name,
locked = true,
style = CraftingBuildingsSett.get_building_style(cat, item.val.name),
tooltip = {"", Gui.get_local_name(item.val), "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}},
})
end
end
table.insert(gui_template, { type = "flow", name = sett.name .. "-flow-" .. cat, direction = "horizontal", children = flow_childer })
end
gui_template = {
{ type = "table", name = sett.name .."-table", style = "fnei_settings_content-table", column_count = 1, children = {
{ type = "label", name = "header-label-2", style = "fnei_settings_craft-category-label", caption = {"fnei.craftin-cat-msg"} },
{ type = "scroll-pane", name = sett.name .. "-scroll-pane", style = "fnei_settings_craft-cat-scroll", children = {
{ type = "table", name = sett.name .. "-flow-table", style = "fnei_settings_content-table", column_count = 1, children = gui_template }
}}
}}
}
Gui.add_gui_template(parent, gui_template)
end
function CraftingBuildingsSett.parse_name(name)
local ret_tb = {}
for k in string.gmatch(name, "[^\t]+") do
table.insert(ret_tb, k)
end
return ret_tb
end
function CraftingBuildingsSett.change_category_style(sett_name, elem_name)
local parent = Gui.get_gui(Gui.get_pos(), sett_name .. "-flow-table")
local parse_str
for _,flow_gui in pairs(parent.children) do
for _,gui_elem in pairs(flow_gui.children) do
parse_str = CraftingBuildingsSett.parse_name(gui_elem.name)
if parse_str[4] == cat_text and parse_str[5] == elem_name then
gui_elem.style = CraftingBuildingsSett.get_category_style(elem_name)
elseif parse_str[4] == elem_name then
gui_elem.style = CraftingBuildingsSett.get_building_style(elem_name, parse_str[5])
end
end
end
end
function CraftingBuildingsSett.change_building_style(sett_name, elem_name)
local parent = Gui.get_gui(Gui.get_pos(), sett_name .. "-flow-table")
local parse_str
for _,flow_gui in pairs(parent.children) do
for _,gui_elem in pairs(flow_gui.children) do
parse_str = CraftingBuildingsSett.parse_name(gui_elem.name)
if parse_str[4] ~= cat_text and parse_str[5] == elem_name then
gui_elem.style = CraftingBuildingsSett.get_building_style(parse_str[4], elem_name)
end
end
end
end
function CraftingBuildingsSett.event(event, sett_name, gui_names)
if gui_names[4] == cat_text then
Settings.set_val(sett_name, {type = categories, name = gui_names[5], button = event.button })
CraftingBuildingsSett.change_category_style(sett_name, gui_names[5])
else
Settings.set_val(sett_name, {type = buildings, name = gui_names[5], button = event.button })
CraftingBuildingsSett.change_building_style(sett_name, gui_names[5])
end
end
function CraftingBuildingsSett.event_init(sett)
if sett.def_event ~= false then
Events.add_custom_event(Controller.get_cont("settings").get_name(), "sprite-button", sett.name, CraftingBuildingsSett.event)
Events.add_custom_event(Controller.get_cont("settings").get_name(), "choose-elem-button", sett.name, CraftingBuildingsSett.event)
Events.add_custom_event(Controller.get_cont("settings").get_name(), "label", sett.name, CraftingBuildingsSett.event)
end
if sett.event then
Events.add_custom_event(Controller.get_cont("settings").get_name(), "sprite-button", sett.name, sett.event)
Events.add_custom_event(Controller.get_cont("settings").get_name(), "choose-elem-button", sett.name, sett.event)
Events.add_custom_event(Controller.get_cont("settings").get_name(), "label", sett.name, sett.event)
end
end
function CraftingBuildingsSett.get_building_style(cat_name, item_name)
if not Settings.get_val("show-recipes", "buildings", item_name) then
return "fnei_settings_disabled-building"
elseif Settings.get_val("show-recipes", "categories", cat_name) then
return "fnei_settings_enabled-building"
else
return "fnei_settings_hidden-building"
end
end
function CraftingBuildingsSett.get_category_style(cat_name)
if Settings.get_val("show-recipes", "categories", cat_name) then
return "fnei_settings_enable-category"
else
return "fnei_settings_disable-category"
end
end
return CraftingBuildingsSett