diff --git a/exp_legacy/module/locale/en/gui.cfg b/exp_legacy/module/locale/en/gui.cfg index e471bcc0..074a05a4 100644 --- a/exp_legacy/module/locale/en/gui.cfg +++ b/exp_legacy/module/locale/en/gui.cfg @@ -310,7 +310,8 @@ cursor-none=You need to hold the blueprint in cursor main-tooltip=Production GUI label-prod=Production label-con=Consumption -label-bal=Balance (sec) +label-bal=Balance +tooltip-per-second=Items per second [surveillance] main-tooltip=Surveillance GUI diff --git a/exp_legacy/module/locale/zh-CN/gui.cfg b/exp_legacy/module/locale/zh-CN/gui.cfg index 09aa6dda..47c99c4f 100644 --- a/exp_legacy/module/locale/zh-CN/gui.cfg +++ b/exp_legacy/module/locale/zh-CN/gui.cfg @@ -310,7 +310,8 @@ cursor-none=您需要將藍圖保持在遊標處 main-tooltip=製造介面 label-prod=製造 label-con=消耗 -label-bal=淨值 (秒) +label-bal=淨值 +tooltip-per-second=物品每秒 [surveillance] main-tooltip=監控介面 diff --git a/exp_legacy/module/locale/zh-TW/gui.cfg b/exp_legacy/module/locale/zh-TW/gui.cfg index 06eec4bd..9429cfb2 100644 --- a/exp_legacy/module/locale/zh-TW/gui.cfg +++ b/exp_legacy/module/locale/zh-TW/gui.cfg @@ -310,7 +310,8 @@ cursor-none=您需要將藍圖保持在遊標處 main-tooltip=製造介面 label-prod=製造 label-con=消耗 -label-bal=淨值 (秒) +label-bal=淨值 +tooltip-per-second=物品每秒 [surveillance] main-tooltip=監控介面 diff --git a/exp_legacy/module/modules/gui/production.lua b/exp_legacy/module/modules/gui/production.lua index 8da29140..30d761dc 100644 --- a/exp_legacy/module/modules/gui/production.lua +++ b/exp_legacy/module/modules/gui/production.lua @@ -16,21 +16,33 @@ local precision = { } local font_color = { - -- positive - [1] = { r = 0.3, g = 1, b = 0.3 }, - -- negative - [2] = { r = 1, g = 0.3, b = 0.3 }, + ["positive"] = { r = 0.3, g = 1, b = 0.3 }, + ["negative"] = { r = 1, g = 0.3, b = 0.3 }, } -local function format_n(n) - local _i, _j, m, i, f = tostring(n):find("([-]?)(%d+)([.]?%d*)") - i = i:reverse():gsub("(%d%d%d)", "%1,") - - if f ~= "" then - return m .. i:reverse():gsub("^,", "") .. f - else - return m .. i:reverse():gsub("^,", "") .. ".0" +local function format_n(amount) + if math.abs(amount) < 0.009 then + return "0.00" end + local suffix = "" + local suffix_list = { + [" G"] = 1e9, + [" M"] = 1e6, + [" k"] = 1e3 + } + local scale = 1 + for letter, limit in pairs(suffix_list) do + if math.abs(amount) >= limit then + scale = limit + suffix = letter + break + end + end + local formatted = string.format("%.2f%s", amount / scale, suffix) + -- Split into integer and fractional parts + local integer_part, fractional_part = formatted:match("^(%-?%d+)%.(%d+)(.*)$") + -- Add commas to integer part + return string.format("%s.%s%s", (integer_part or formatted):reverse():gsub("(%d%d%d)", "%1,"):reverse():gsub("^,", ""):gsub("-,", "-"), fractional_part or "00", suffix) end --- Display group @@ -58,35 +70,15 @@ local production_data_group = Gui.element("production_data_group") item.style.width = 32 end - local data_1 = parent.add{ - type = "label", - name = "production_" .. i .. "_1", - caption = "0.0", - style = "heading_2_label", - } - data_1.style.width = 90 - data_1.style.horizontal_align = "right" - data_1.style.font_color = font_color[1] - - local data_2 = parent.add{ - type = "label", - name = "production_" .. i .. "_2", - caption = "0.0", - style = "heading_2_label", - } - data_2.style.width = 90 - data_2.style.horizontal_align = "right" - data_2.style.font_color = font_color[2] - - local data_3 = parent.add{ - type = "label", - name = "production_" .. i .. "_3", - caption = "0.0", - style = "heading_2_label", - } - data_3.style.width = 90 - data_3.style.horizontal_align = "right" - data_3.style.font_color = font_color[1] + for j = 1, 3 do + local data = parent.add{ + type = "label", + name = "production_" .. i .. "_" .. j, + caption = "0.00", + style = "heading_2_label", + } + data.style.font_color = font_color["positive"] + end return item end) @@ -96,27 +88,27 @@ local production_data_group = Gui.element("production_data_group") local production_data_set = Gui.element("production_data_set") :draw(function(_, parent, name) local production_set = parent.add{ type = "flow", direction = "vertical", name = name } - local disp = Gui.elements.scroll_table(production_set, 350, 4, "disp") - + local disp = Gui.elements.scroll_table(production_set, 320, 4, "disp") + for i = 2, 4 do + disp.style.column_alignments[i] = "right" + end production_data_group(disp, 0) - disp["production_0_1"].caption = { "production.label-prod" } + disp["production_0_1"].tooltip = { "production.tooltip-per-second" } disp["production_0_2"].caption = { "production.label-con" } + disp["production_0_2"].tooltip = { "production.tooltip-per-second" } disp["production_0_3"].caption = { "production.label-bal" } - + disp["production_0_3"].tooltip = { "production.tooltip-per-second" } for i = 1, 8 do production_data_group(disp, i) end - return production_set end) production_container = Gui.element("production_container") :draw(function(def, parent) - local container = Gui.elements.container(parent, 350) - + local container = Gui.elements.container(parent, 320) production_data_set(container, "production_st") - return container.parent end) @@ -138,30 +130,22 @@ Event.on_nth_tick(60, function() local stat = player.force.get_item_production_statistics(player.surface) -- Allow remote view local precision_value = precision[container.frame["production_st"].disp.table["production_0_e"].selected_index] local table = container.frame["production_st"].disp.table - for i = 1, 8 do local production_prefix = "production_" .. i local item = table[production_prefix .. "_e"].elem_value --[[ @as string ]] - if item then local add = math.floor(stat.get_flow_count{ name = item, category = "input", precision_index = precision_value, count = false } / 6) / 10 local minus = math.floor(stat.get_flow_count{ name = item, category = "output", precision_index = precision_value, count = false } / 6) / 10 local sum = add - minus - table[production_prefix .. "_1"].caption = format_n(add) table[production_prefix .. "_2"].caption = format_n(minus) table[production_prefix .. "_3"].caption = format_n(sum) - - if sum < 0 then - table[production_prefix .. "_3"].style.font_color = font_color[2] - else - table[production_prefix .. "_3"].style.font_color = font_color[1] - end + table[production_prefix .. "_3"].style.font_color = (sum < 0 and font_color["negative"]) or font_color["positive"] else - table[production_prefix .. "_1"].caption = "0.0" - table[production_prefix .. "_2"].caption = "0.0" - table[production_prefix .. "_3"].caption = "0.0" - table[production_prefix .. "_3"].style.font_color = font_color[1] + table[production_prefix .. "_1"].caption = "0.00" + table[production_prefix .. "_2"].caption = "0.00" + table[production_prefix .. "_3"].caption = "0.00" + table[production_prefix .. "_3"].style.font_color = font_color["positive"] end end end