This commit is contained in:
2025-02-07 22:20:20 +09:00
parent f0adfa3e32
commit 31ec0afa5b

View File

@@ -20,9 +20,9 @@ Storage.register(research, function(tbl)
research = tbl research = tbl
end) end)
for i = 1, #config.mod_set_lookup do for _, mod_name in ipairs(config.mod_set_lookup) do
if script.active_mods[config.mod_set_lookup[i]] then if script.active_mods[mod_name] then
config.mod_set = config.mod_set_lookup[i] config.mod_set = mod_name
break break
end end
end end
@@ -31,10 +31,9 @@ local research_time_format = ExpUtil.format_time_factory{ format = "clock", hour
local empty_time = research_time_format(nil) local empty_time = research_time_format(nil)
local font_color = { local font_color = {
-- positive ["neutral"] = { r = 0, g = 0, b = 0 },
[1] = { r = 0.3, g = 1, b = 0.3 }, ["positive"] = { r = 0.3, g = 1, b = 0.3 },
-- negative ["negative"] = { r = 1, g = 0.3, b = 0.3 },
[2] = { r = 1, g = 0.3, b = 0.3 },
} }
local res = { local res = {
@@ -64,36 +63,26 @@ end
local function research_add_log() local function research_add_log()
local result_data = {} local result_data = {}
for i = 1, #research.time, 1 do for i = 1, #research.time do
result_data[res["disp"][i]["raw_name"]] = research.time[i] result_data[res.disp[i].raw_name] = research.time[i]
end end
write_file(config.file_name, table_to_json(result_data) .. "\n", true, 0) write_file(config.file_name, table_to_json(result_data) .. "\n", true, 0)
end end
local function research_res_n(res_) local function research_res_n()
local res_n = 1 local current = #res.disp + 1
for k, _ in pairs(res_) do for i = 1, #res.disp do
if research.time[k] == 0 then if research.time[i] == 0 then
res_n = k - 1 current = i
break break
end end
end end
if research.time[#res_] and research.time[#res_] > 0 then local max_start = math.max(1, #res.disp - 7)
if res_n == 1 then local start = math.clamp(current - 3, 1, max_start)
res_n = #res_ return math.min(start, max_start)
end
end
if res_n < 3 then
res_n = 3
elseif res_n > (#research.time - 5) then
res_n = #research.time - 5
end
return res_n
end end
local function research_notification(event) local function research_notification(event)
@@ -105,68 +94,60 @@ local function research_notification(event)
end end
if config.bonus_inventory.enabled then if config.bonus_inventory.enabled then
if (event.research.level - 1) <= math.ceil(config.bonus_inventory.limit / config.bonus_inventory.rate) then
event.research.force[config.bonus_inventory.name] = math.max((event.research.level - 1) * config.bonus_inventory.rate, config.bonus_inventory.limit) event.research.force[config.bonus_inventory.name] = math.max((event.research.level - 1) * config.bonus_inventory.rate, config.bonus_inventory.limit)
end end
end
if config.pollution_ageing_by_research then if config.pollution_ageing_by_research then
game.map_settings.pollution.ageing = math.min(10, event.research.level / 5) game.map_settings.pollution.ageing = math.min(10, event.research.level / 5)
end end
else end
if not (event.by_script) then if not (event.by_script) then
game.print{ "research.inf", research_time_format(game.tick), event.research.name, event.research.level - 1 } game.print{ "research.inf", research_time_format(game.tick), event.research.name, event.research.level - 1 }
end end
end
else else
if not (event.by_script) then if not (event.by_script) then
game.print{ "research.msg", research_time_format(game.tick), event.research.name } game.print{ "research.msg", research_time_format(game.tick), event.research.name }
end end
if config.bonus_inventory.enabled then if config.bonus_inventory.enabled and (event.research.name == "mining-productivity-1" or event.research.name == "mining-productivity-2" or event.research.name == "mining-productivity-3") then
if event.research.name == "mining-productivity-1" or event.research.name == "mining-productivity-2" or event.research.name == "mining-productivity-3" then
event.research.force[config.bonus_inventory.name] = event.research.level * config.bonus_inventory.rate event.research.force[config.bonus_inventory.name] = event.research.level * config.bonus_inventory.rate
end end
end end
end
end end
local function research_gui_update() local function research_gui_update()
local res_disp = {} local res_disp = {}
local res_n = research_res_n(res["disp"]) local res_n = research_res_n()
for i = 1, 8, 1 do for i = 1, 8 do
res_disp[i] = { local res_i = res_n + i - 1
["name"] = "", local entry = res.disp[res_i] or {}
["target"] = "", local data = {
["attempt"] = "", name = "",
["difference"] = "", target = "",
["difference_color"] = font_color[1], attempt = "",
difference = "",
color = font_color["positive"]
} }
local res_i = res_n + i - 3 if entry.raw_name then
data.name = { "research.res-name", entry.raw_name, prototypes.technology[entry.raw_name].localised_name }
if res["disp"][res_i] then data.target = entry.target_disp
res_disp[i]["name"] = { "research.res-name", res["disp"][res_i]["raw_name"], prototypes.technology[res["disp"][res_i]["raw_name"]].localised_name }
if research.time[res_i] == 0 then if research.time[res_i] == 0 then
res_disp[i]["target"] = res["disp"][res_i].target_disp data.attempt = empty_time
res_disp[i]["attempt"] = empty_time data.difference = empty_time
res_disp[i]["difference"] = empty_time
res_disp[i]["difference_color"] = font_color[1]
else
res_disp[i]["target"] = res["disp"][res_i].target_disp
res_disp[i]["attempt"] = research_time_format(research.time[res_i])
if research.time[res_i] < res["disp"][res_i].target then
res_disp[i]["difference"] = "-" .. research_time_format(res["disp"][res_i].target - research.time[res_i])
res_disp[i]["difference_color"] = font_color[1]
else else
res_disp[i]["difference"] = research_time_format(research.time[res_i] - res["disp"][res_i].target) data.attempt = research_time_format(research.time[res_i])
res_disp[i]["difference_color"] = font_color[2] local diff = research.time[res_i] - entry.target
end data.difference = (diff < 0 and "-" or "") .. research_time_format(math.abs(diff))
data.color = (diff < 0 and font_color["positive"]) or font_color["negative"]
end end
end end
res_disp[i] = data
end end
return res_disp return res_disp
@@ -198,42 +179,19 @@ local research_clock_set = Gui.element("research_clock_set")
-- @element research_data_group -- @element research_data_group
local research_data_group = Gui.element("research_data_group") local research_data_group = Gui.element("research_data_group")
:draw(function(_def, parent, i) :draw(function(_def, parent, i)
local name = parent.add{ local labels = { "name", "target", "attempt", "difference" }
type = "label",
name = "research_" .. i .. "_name",
caption = "",
style = "heading_2_label",
}
name.style.width = 180
name.style.horizontal_align = "left"
local target = parent.add{ for _, label in ipairs(labels) do
local elem = parent.add{
type = "label", type = "label",
name = "research_" .. i .. "_target", name = "research_" .. i .. "_" .. label,
caption = "", caption = "",
style = "heading_2_label", style = "heading_2_label"
} }
target.style.width = 70 elem.style.minimal_width = (label == "name" and 180) or 70
target.style.horizontal_align = "right" elem.style.horizontal_align = (label == "name" and "left") or "right"
elem.style.font_color = (label == "difference" and font_color["positive"]) or font_color["neutral"]
local attempt = parent.add{ end
type = "label",
name = "research_" .. i .. "_attempt",
caption = "",
style = "heading_2_label",
}
attempt.style.width = 70
attempt.style.horizontal_align = "right"
local difference = parent.add{
type = "label",
name = "research_" .. i .. "_difference",
caption = "",
style = "heading_2_label",
}
difference.style.width = 70
difference.style.horizontal_align = "right"
difference.style.font_color = font_color[1]
end) end)
--- A vertical flow containing the data --- A vertical flow containing the data
@@ -250,7 +208,7 @@ local research_data_set = Gui.element("research_data_set")
disp["research_0_attempt"].caption = { "research.attempt" } disp["research_0_attempt"].caption = { "research.attempt" }
disp["research_0_difference"].caption = { "research.difference" } disp["research_0_difference"].caption = { "research.difference" }
for i = 1, 8, 1 do for i = 1, 8 do
research_data_group(disp, i) research_data_group(disp, i)
local research_name_i = "research_" .. i local research_name_i = "research_" .. i
@@ -289,23 +247,23 @@ Gui.toolbar.create_button{
Event.add(defines.events.on_research_finished, function(event) Event.add(defines.events.on_research_finished, function(event)
research_notification(event) research_notification(event)
local research_name = event.research.name
if res["lookup_name"][event.research.name] == nil then if not res["lookup_name"][research_name] then
return return
end end
local n_i = res["lookup_name"][event.research.name] research.time[res.lookup_name[research_name]] = game.tick
research.time[n_i] = game.tick
local res_disp = research_gui_update() local res_disp = research_gui_update()
for _, player in pairs(game.connected_players) do for _, player in pairs(game.connected_players) do
if Roles.player_allowed(player, "gui/research") then
local container = Gui.get_left_element(research_container, player) local container = Gui.get_left_element(research_container, player)
local disp = container.frame["research_st_2"].disp.table local disp = container.frame["research_st_2"].disp.table
for i = 1, 8, 1 do for i = 1, 8 do
local research_name_i = "research_" .. i local research_name_i = "research_" .. i
disp[research_name_i .. "_name"].caption = res_disp[i]["name"] disp[research_name_i .. "_name"].caption = res_disp[i]["name"]
disp[research_name_i .. "_target"].caption = res_disp[i]["target"] disp[research_name_i .. "_target"].caption = res_disp[i]["target"]
disp[research_name_i .. "_attempt"].caption = res_disp[i]["attempt"] disp[research_name_i .. "_attempt"].caption = res_disp[i]["attempt"]
@@ -313,6 +271,7 @@ Event.add(defines.events.on_research_finished, function(event)
disp[research_name_i .. "_difference"].style.font_color = res_disp[i]["difference_color"] disp[research_name_i .. "_difference"].style.font_color = res_disp[i]["difference_color"]
end end
end end
end
end) end)
--[[ --[[