Commit 9d6691a6ce97f4a4ff880399073f150adbbd7b49

Authored by Stefan Wichmann
1 parent 3371d413

Updated to Factorio 2.0

.vscode/launch.json
@@ -8,9 +8,8 @@ @@ -8,9 +8,8 @@
8 "type": "factoriomod", 8 "type": "factoriomod",
9 "request": "launch", 9 "request": "launch",
10 "name": "Factorio Mod Debug", 10 "name": "Factorio Mod Debug",
11 - "modsPath": "C:/Program Files/Factorio/mods",  
12 - "configPath": "C:/Program Files/Factorio/config/config.ini",  
13 - "factorioPath": "C:/Program Files/Factorio/bin/x64/factorio.exe" 11 + "modsPath": "C:\\Users\\stefa\\AppData\\Roaming\\Factorio\\mods",
  12 + "disableExtraMods": false
14 // "hookSettings": true, 13 // "hookSettings": true,
15 // "hookData": true 14 // "hookData": true
16 } 15 }
.vscode/settings.json 0 → 100644
  1 +{
  2 + "factorio.versions": [
  3 + {
  4 + "name": "2.0",
  5 + "factorioPath": "C:\\Program Files\\Factorio\\bin\\x64\\factorio.exe",
  6 + "active": true
  7 + },
  8 + {
  9 + "name": "Steam",
  10 + "factorioPath": "d:\\SteamLibrary\\steamapps\\common\\Factorio\\bin\\x64\\factorio.exe"
  11 + }
  12 + ],
  13 + "Lua.workspace.userThirdParty": [
  14 + "c:\\Users\\stefa\\AppData\\Roaming\\Code\\User\\workspaceStorage\\35847ccd64cb986037e0824286320fb8\\justarandomgeek.factoriomod-debug\\sumneko-3rd"
  15 + ],
  16 + "Lua.workspace.checkThirdParty": "ApplyInMemory"
  17 +}
0 \ No newline at end of file 18 \ No newline at end of file
calcui-hotkey.lua
@@ -5,4 +5,4 @@ data:extend({ @@ -5,4 +5,4 @@ data:extend({
5 key_sequence = "CONTROL + SHIFT + C", 5 key_sequence = "CONTROL + SHIFT + C",
6 consuming = "none" 6 consuming = "none"
7 } 7 }
8 -})  
9 \ No newline at end of file 8 \ No newline at end of file
  9 +})
calcui-prototypes.lua
@@ -7,13 +7,9 @@ data:extend({ @@ -7,13 +7,9 @@ data:extend({
7 order = "b[blueprints]-h[calculator-ui]", 7 order = "b[blueprints]-h[calculator-ui]",
8 action = "lua", 8 action = "lua",
9 toggleable = true, 9 toggleable = true,
10 - icon =  
11 - {  
12 - filename = "__calculator-ui__/graphics/calculator.png",  
13 - priority = "extra-high-no-scale",  
14 - size = 64,  
15 - scale = 1,  
16 - flags = {"icon"}  
17 - } 10 + icon = "__calculator-ui__/graphics/calculator.png",
  11 + icon_size = 64,
  12 + small_icon = "__calculator-ui__/graphics/calculator.png",
  13 + small_icon_size = 64
18 } 14 }
19 -})  
20 \ No newline at end of file 15 \ No newline at end of file
  16 +})
calculator.lua
@@ -11,7 +11,7 @@ local nilaus_rant = { "calcui_nilaus_ugghhhh", "utility/cannot_build" } @@ -11,7 +11,7 @@ local nilaus_rant = { "calcui_nilaus_ugghhhh", "utility/cannot_build" }
11 -- ---------------------------------------------------------------- 11 -- ----------------------------------------------------------------
12 local function play_sfx(player, sfx) 12 local function play_sfx(player, sfx)
13 if settings.get_player_settings(player)["calcui-sfx"].value then 13 if settings.get_player_settings(player)["calcui-sfx"].value then
14 - player.play_sound{ 14 + player.play_sound {
15 path = sfx, 15 path = sfx,
16 volume_modifier = 1.0 16 volume_modifier = 1.0
17 } 17 }
@@ -61,28 +61,28 @@ local function destroy_calculator(player) @@ -61,28 +61,28 @@ local function destroy_calculator(player)
61 local root = get_gui_root(player) 61 local root = get_gui_root(player)
62 if root.calcui then 62 if root.calcui then
63 root.calcui.destroy() 63 root.calcui.destroy()
64 - global.recent_results[player.index] = {} 64 + storage.recent_results[player.index] = {}
65 end 65 end
66 end 66 end
67 67
68 -- ---------------------------------------------------------------- 68 -- ----------------------------------------------------------------
69 local function fix_oob_ui(player) 69 local function fix_oob_ui(player)
70 - if global.gui_position[player.index].x < 0 then  
71 - global.gui_position[player.index].x = 0 70 + if storage.gui_position[player.index].x < 0 then
  71 + storage.gui_position[player.index].x = 0
72 end 72 end
73 - if global.gui_position[player.index].y < 0 then  
74 - global.gui_position[player.index].y = 0 73 + if storage.gui_position[player.index].y < 0 then
  74 + storage.gui_position[player.index].y = 0
75 end 75 end
76 76
77 -- TODO fixed box size, because there is no API call for that 77 -- TODO fixed box size, because there is no API call for that
78 local width = 255 78 local width = 255
79 local height = 350 79 local height = 350
80 80
81 - if global.gui_position[player.index].x + width > player.display_resolution.width then  
82 - global.gui_position[player.index].x = player.display_resolution.width - width 81 + if storage.gui_position[player.index].x + width > player.display_resolution.width then
  82 + storage.gui_position[player.index].x = player.display_resolution.width - width
83 end 83 end
84 - if global.gui_position[player.index].y + height > player.display_resolution.height then  
85 - global.gui_position[player.index].y = player.display_resolution.height - height 84 + if storage.gui_position[player.index].y + height > player.display_resolution.height then
  85 + storage.gui_position[player.index].y = player.display_resolution.height - height
86 end 86 end
87 end 87 end
88 88
@@ -90,11 +90,11 @@ end @@ -90,11 +90,11 @@ end
90 function show_calculator(player) 90 function show_calculator(player)
91 local root = get_gui_root(player) 91 local root = get_gui_root(player)
92 92
93 - if not global.recent_results then  
94 - global.recent_results = {} 93 + if not storage.recent_results then
  94 + storage.recent_results = {}
95 end 95 end
96 - if not global.recent_results[player.index] then  
97 - global.recent_results[player.index] = {} 96 + if not storage.recent_results[player.index] then
  97 + storage.recent_results[player.index] = {}
98 end 98 end
99 99
100 if not root.calcui then 100 if not root.calcui then
@@ -108,12 +108,12 @@ function show_calculator(player) @@ -108,12 +108,12 @@ function show_calculator(player)
108 type = "flow", 108 type = "flow",
109 name = "calcui_flow" 109 name = "calcui_flow"
110 }) 110 })
111 - flow.style.horizontally_stretchable = "on" 111 + flow.style.horizontally_stretchable = true
112 112
113 flow.add({ 113 flow.add({
114 type = "label", 114 type = "label",
115 name = "calcui_title", 115 name = "calcui_title",
116 - caption = {"calculator-ui.title"}, 116 + caption = { "calculator-ui.title" },
117 style = "frame_title" 117 style = "frame_title"
118 }).drag_target = calcui 118 }).drag_target = calcui
119 119
@@ -123,13 +123,13 @@ function show_calculator(player) @@ -123,13 +123,13 @@ function show_calculator(player)
123 name = "calcui_drag" 123 name = "calcui_drag"
124 }) 124 })
125 widget.drag_target = calcui 125 widget.drag_target = calcui
126 - widget.style.horizontally_stretchable = "on" 126 + widget.style.horizontally_stretchable = true
127 widget.style.minimal_width = 24 127 widget.style.minimal_width = 24
128 widget.style.natural_height = 24 128 widget.style.natural_height = 24
129 129
130 flow.add({ 130 flow.add({
131 type = "sprite-button", 131 type = "sprite-button",
132 - sprite = "utility/close_white", 132 + sprite = "utility/close",
133 style = "frame_action_button", 133 style = "frame_action_button",
134 name = "calcui_close" 134 name = "calcui_close"
135 }) 135 })
@@ -154,35 +154,61 @@ function show_calculator(player) @@ -154,35 +154,61 @@ function show_calculator(player)
154 }) 154 })
155 display.style.width = 212 155 display.style.width = 212
156 156
157 - local row1 = col1.add({type="flow", name="calcui_col1_row1", direction="horizontal"})  
158 - row1.add({type="sprite-button", style="calcui_button_style_light", caption="CE", name="calcui_button_CE"}).sprite = "sprite_calcui_light" -- CE = Clear Entry (just this line)  
159 - row1.add({type="sprite-button", style="calcui_button_style_light", caption="C", name="calcui_button_C"}).sprite = "sprite_calcui_light" -- C = Clear (all, past results as well)  
160 - row1.add({type="sprite-button", style="calcui_button_style_light", caption="", name="calcui_button_BS"}).sprite = "sprite_calcui_backspace"  
161 - row1.add({type="sprite-button", style="calcui_button_style_light", caption="/", name="calcui_button_DIV"}).sprite = "sprite_calcui_light"  
162 -  
163 - local row2 = col1.add({type="flow", name="calcui_col1_row2", direction="horizontal"})  
164 - row2.add({type="sprite-button", style="calcui_button_style_dark", caption="7", name="calcui_button_7"}).sprite = "sprite_calcui_dark"  
165 - row2.add({type="sprite-button", style="calcui_button_style_dark", caption="8", name="calcui_button_8"}).sprite = "sprite_calcui_dark"  
166 - row2.add({type="sprite-button", style="calcui_button_style_dark", caption="9", name="calcui_button_9"}).sprite = "sprite_calcui_dark"  
167 - row2.add({type="sprite-button", style="calcui_button_style_light", caption="*", name="calcui_button_MUL"}).sprite = "sprite_calcui_light"  
168 -  
169 - local row3 = col1.add({type="flow", name="calcui_col1_row3", direction="horizontal"})  
170 - row3.add({type="sprite-button", style="calcui_button_style_dark", caption="4", name="calcui_button_4"}).sprite = "sprite_calcui_dark"  
171 - row3.add({type="sprite-button", style="calcui_button_style_dark", caption="5", name="calcui_button_5"}).sprite = "sprite_calcui_dark"  
172 - row3.add({type="sprite-button", style="calcui_button_style_dark", caption="6", name="calcui_button_6"}).sprite = "sprite_calcui_dark"  
173 - row3.add({type="sprite-button", style="calcui_button_style_light", caption="-", name="calcui_button_SUB"}).sprite = "sprite_calcui_light"  
174 -  
175 - local row4 = col1.add({type="flow", name="calcui_col1_row4", direction="horizontal"})  
176 - row4.add({type="sprite-button", style="calcui_button_style_dark", caption="1", name="calcui_button_1"}).sprite = "sprite_calcui_dark"  
177 - row4.add({type="sprite-button", style="calcui_button_style_dark", caption="2", name="calcui_button_2"}).sprite = "sprite_calcui_dark"  
178 - row4.add({type="sprite-button", style="calcui_button_style_dark", caption="3", name="calcui_button_3"}).sprite = "sprite_calcui_dark"  
179 - row4.add({type="sprite-button", style="calcui_button_style_light", caption="+", name="calcui_button_ADD"}).sprite = "sprite_calcui_light"  
180 -  
181 - local row5 = col1.add({type="flow", name="calcui_col1_row5", direction="horizontal"})  
182 - row5.add({type="sprite-button", style="calcui_button_style_light", caption="%", name="calcui_button_PERC"}).sprite = "sprite_calcui_light"  
183 - row5.add({type="sprite-button", style="calcui_button_style_dark", caption="0", name="calcui_button_0"}).sprite = "sprite_calcui_dark"  
184 - row5.add({type="sprite-button", style="calcui_button_style_dark", caption=".", name="calcui_button_DOT"}).sprite = "sprite_calcui_dark"  
185 - row5.add({type="sprite-button", style="calcui_button_style_red", caption="=", name="calcui_button_EQU"}).sprite = "sprite_calcui_red" 157 + local row1 = col1.add({ type = "flow", name = "calcui_col1_row1", direction = "horizontal" })
  158 + row1.add({
  159 + type = "sprite-button",
  160 + style = "calcui_button_style_light",
  161 + caption = "CE",
  162 + tooltip = { "calculator-ui.button_CE" },
  163 + name =
  164 + "calcui_button_CE"
  165 + }) --.sprite = "sprite_calcui_light" -- CE = Clear Entry (just this line)
  166 + row1.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "C", tooltip = { "calculator-ui.button_C" }, name = "calcui_button_C" }).sprite =
  167 + "sprite_calcui_light" -- C = Clear (all, past results as well)
  168 + row1.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "", tooltip = { "calculator-ui.button_BS" }, name = "calcui_button_BS" }).sprite =
  169 + "sprite_calcui_backspace"
  170 + row1.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "/", tooltip = { "calculator-ui.button_DIV" }, name = "calcui_button_DIV" }).sprite =
  171 + "sprite_calcui_light"
  172 +
  173 + local row2 = col1.add({ type = "flow", name = "calcui_col1_row2", direction = "horizontal" })
  174 + row2.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "7", tooltip = { "calculator-ui.button_7" }, name = "calcui_button_7" }).sprite =
  175 + "sprite_calcui_dark"
  176 + row2.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "8", tooltip = { "calculator-ui.button_8" }, name = "calcui_button_8" }).sprite =
  177 + "sprite_calcui_dark"
  178 + row2.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "9", tooltip = { "calculator-ui.button_9" }, name = "calcui_button_9" }).sprite =
  179 + "sprite_calcui_dark"
  180 + row2.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "*", tooltip = { "calculator-ui.button_MUL" }, name = "calcui_button_MUL" }).sprite =
  181 + "sprite_calcui_light"
  182 +
  183 + local row3 = col1.add({ type = "flow", name = "calcui_col1_row3", direction = "horizontal" })
  184 + row3.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "4", tooltip = { "calculator-ui.button_4" }, name = "calcui_button_4" }).sprite =
  185 + "sprite_calcui_dark"
  186 + row3.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "5", tooltip = { "calculator-ui.button_5" }, name = "calcui_button_5" }).sprite =
  187 + "sprite_calcui_dark"
  188 + row3.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "6", tooltip = { "calculator-ui.button_6" }, name = "calcui_button_6" }).sprite =
  189 + "sprite_calcui_dark"
  190 + row3.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "-", tooltip = { "calculator-ui.button_SUB" }, name = "calcui_button_SUB" }).sprite =
  191 + "sprite_calcui_light"
  192 +
  193 + local row4 = col1.add({ type = "flow", name = "calcui_col1_row4", direction = "horizontal" })
  194 + row4.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "1", tooltip = { "calculator-ui.button_1" }, name = "calcui_button_1" }).sprite =
  195 + "sprite_calcui_dark"
  196 + row4.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "2", tooltip = { "calculator-ui.button_2" }, name = "calcui_button_2" }).sprite =
  197 + "sprite_calcui_dark"
  198 + row4.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "3", tooltip = { "calculator-ui.button_3" }, name = "calcui_button_3" }).sprite =
  199 + "sprite_calcui_dark"
  200 + row4.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "+", tooltip = { "calculator-ui.button_ADD" }, name = "calcui_button_ADD" }).sprite =
  201 + "sprite_calcui_light"
  202 +
  203 + local row5 = col1.add({ type = "flow", name = "calcui_col1_row5", direction = "horizontal" })
  204 + row5.add({ type = "sprite-button", style = "calcui_button_style_light", caption = "%", tooltip = { "calculator-ui.button_PERC" }, name = "calcui_button_PERC" }).sprite =
  205 + "sprite_calcui_light"
  206 + row5.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = "0", tooltip = { "calculator-ui.button_0" }, name = "calcui_button_0" }).sprite =
  207 + "sprite_calcui_dark"
  208 + row5.add({ type = "sprite-button", style = "calcui_button_style_dark", caption = ".", tooltip = { "calculator-ui.button_DOT" }, name = "calcui_button_DOT" }).sprite =
  209 + "sprite_calcui_dark"
  210 + row5.add({ type = "sprite-button", style = "calcui_button_style_red", caption = "=", tooltip = { "calculator-ui.button_EQU" }, name = "calcui_button_EQU" }).sprite =
  211 + "sprite_calcui_red"
186 212
187 local col2 = table.add({ 213 local col2 = table.add({
188 type = "flow", 214 type = "flow",
@@ -234,14 +260,14 @@ function show_calculator(player) @@ -234,14 +260,14 @@ function show_calculator(player)
234 260
235 261
236 -- use last saved location or center the gui 262 -- use last saved location or center the gui
237 - if not global.gui_position then  
238 - global.gui_position = {} 263 + if not storage.gui_position then
  264 + storage.gui_position = {}
239 end 265 end
240 - if global.gui_position[player.index] then 266 + if storage.gui_position[player.index] then
241 -- fix weird saved positions (out of reach) 267 -- fix weird saved positions (out of reach)
242 fix_oob_ui(player) 268 fix_oob_ui(player)
243 269
244 - calcui.location = global.gui_position[player.index] 270 + calcui.location = storage.gui_position[player.index]
245 else 271 else
246 calcui.force_auto_center() 272 calcui.force_auto_center()
247 end 273 end
@@ -299,7 +325,7 @@ local function process_c_key(player, button) @@ -299,7 +325,7 @@ local function process_c_key(player, button)
299 local root = get_gui_root(player) 325 local root = get_gui_root(player)
300 process_ce_key(player, button) 326 process_ce_key(player, button)
301 root.calcui.calcui_table.calcui_table_col2.calcui_scroll_pane.calcui_result_table.clear() 327 root.calcui.calcui_table.calcui_table_col2.calcui_scroll_pane.calcui_result_table.clear()
302 - global.recent_results[player.index] = {} 328 + storage.recent_results[player.index] = {}
303 end 329 end
304 330
305 -- ---------------------------------------------------------------- 331 -- ----------------------------------------------------------------
@@ -318,12 +344,12 @@ local function draw_recent_table(player) @@ -318,12 +344,12 @@ local function draw_recent_table(player)
318 -- drop old table 344 -- drop old table
319 recent.calcui_result_table.clear() 345 recent.calcui_result_table.clear()
320 346
321 - for i, result in ipairs(global.recent_results[player.index]) do 347 + for i, result in ipairs(storage.recent_results[player.index]) do
322 recent.calcui_result_table.add({ 348 recent.calcui_result_table.add({
323 type = "label", 349 type = "label",
324 name = "calcui_copy_equation_" .. i, 350 name = "calcui_copy_equation_" .. i,
325 caption = result["equation"], 351 caption = result["equation"],
326 - tooltip = {"calculator-ui.recent_tooltip"} 352 + tooltip = { "calculator-ui.recent_tooltip" }
327 }) 353 })
328 recent.calcui_result_table.add({ 354 recent.calcui_result_table.add({
329 type = "label", 355 type = "label",
@@ -394,11 +420,11 @@ local function fix_equation(equation, root) @@ -394,11 +420,11 @@ local function fix_equation(equation, root)
394 420
395 -- fix percentage 421 -- fix percentage
396 -- complex equations like "20+10%" = 22, before it was 20.1 -- big thanks to GWulf 422 -- complex equations like "20+10%" = 22, before it was 20.1 -- big thanks to GWulf
397 - result = result:gsub("(%d+)(.)(%d+)%%", function (base, sign, perc) 423 + result = result:gsub("(%d+)(.)(%d+)%%", function(base, sign, perc)
398 if sign == "+" then 424 if sign == "+" then
399 return base .. "*1." .. perc 425 return base .. "*1." .. perc
400 elseif sign == "-" then 426 elseif sign == "-" then
401 - return base .. "*(1-0." ..perc .. ")" 427 + return base .. "*(1-0." .. perc .. ")"
402 elseif sign == "*" then 428 elseif sign == "*" then
403 return "(" .. base .. "/100)*" .. perc 429 return "(" .. base .. "/100)*" .. perc
404 elseif sign == "/" then 430 elseif sign == "/" then
@@ -412,11 +438,26 @@ local function fix_equation(equation, root) @@ -412,11 +438,26 @@ local function fix_equation(equation, root)
412 result = result:gsub(",", ".") 438 result = result:gsub(",", ".")
413 result = result:gsub(";", ",") 439 result = result:gsub(";", ",")
414 440
  441 + -- remove thousand separators
  442 + result = result:gsub("'", "");
415 443
416 return result, new_equation 444 return result, new_equation
417 end 445 end
418 446
419 -- ---------------------------------------------------------------- 447 -- ----------------------------------------------------------------
  448 +function add_thousand_separator(result)
  449 + local left, num, right = string.match(result, '^([^%d]*%d)(%d*)(.-)$')
  450 + num = num:reverse():gsub("(%d%d%d)", "%1'"):reverse()
  451 + return left .. num .. right
  452 +end
  453 +
  454 +-- ----------------------------------------------------------------
  455 +function is_scientific_notation(result)
  456 + -- Check if the number is in scientific notation
  457 + return string.match(result, "^[-+]?%d*%.?%d+e[-+]?%d+$")
  458 +end
  459 +
  460 +-- ----------------------------------------------------------------
420 function process_equal_key(player, button) 461 function process_equal_key(player, button)
421 local root = get_gui_root(player) 462 local root = get_gui_root(player)
422 local original_equation = root.calcui.calcui_table.calcui_table_col1.calcui_display.text; 463 local original_equation = root.calcui.calcui_table.calcui_table_col1.calcui_display.text;
@@ -431,12 +472,34 @@ function process_equal_key(player, button) @@ -431,12 +472,34 @@ function process_equal_key(player, button)
431 return load("return " .. equation)() 472 return load("return " .. equation)()
432 end) 473 end)
433 root.calcui.calcui_table.calcui_table_col2.calcui_result.calcui_copy_display_result.tooltip = retval 474 root.calcui.calcui_table.calcui_table_col2.calcui_result.calcui_copy_display_result.tooltip = retval
  475 +
434 if not (retval == math.huge or retval ~= retval) then 476 if not (retval == math.huge or retval ~= retval) then
435 status, retval_show = pcall(function() 477 status, retval_show = pcall(function()
436 - local result = string.format("%0." .. settings.get_player_settings(player)["calcui-decimal-places"].value .. "f", retval)  
437 - if result:len() > tostring(retval):len() then  
438 - result = retval 478 + -- Check if the result is in scientific notation
  479 + if is_scientific_notation(retval) then
  480 + return retval
439 end 481 end
  482 +
  483 + local result = string.format(
  484 + "%0." .. settings.get_player_settings(player)["calcui-decimal-places"].value .. "f", retval)
  485 +
  486 +
  487 + -- Add thousand separators
  488 + result = add_thousand_separator(result)
  489 +
  490 + -- Check if extra decimal places need to be removed
  491 + local trimmed_result = tostring(retval)
  492 + if string.find(trimmed_result, '%.') then
  493 + local int, frac = trimmed_result:match("(%d+)%.(%d+)")
  494 + if frac then
  495 + local truncated_result = int ..
  496 + "." .. frac:sub(1, settings.get_player_settings(player)["calcui-decimal-places"].value)
  497 + result = add_thousand_separator(truncated_result)
  498 + end
  499 + else
  500 + result = add_thousand_separator(trimmed_result)
  501 + end
  502 +
440 return result 503 return result
441 end) 504 end)
442 else 505 else
@@ -460,8 +523,8 @@ function process_equal_key(player, button) @@ -460,8 +523,8 @@ function process_equal_key(player, button)
460 -- only write in recent table if actually a result 523 -- only write in recent table if actually a result
461 if status then 524 if status then
462 -- check first equation and only insert if not the same 525 -- check first equation and only insert if not the same
463 - if #global.recent_results[player.index] == 0 or global.recent_results[player.index][1]["equation"] ~= original_equation then  
464 - table.insert(global.recent_results[player.index], 1, { 526 + if #storage.recent_results[player.index] == 0 or storage.recent_results[player.index][1]["equation"] ~= original_equation then
  527 + table.insert(storage.recent_results[player.index], 1, {
465 equation = original_equation, 528 equation = original_equation,
466 result = retval_show 529 result = retval_show
467 }) 530 })
@@ -527,7 +590,7 @@ function handle_calcui_click(event, player) @@ -527,7 +590,7 @@ function handle_calcui_click(event, player)
527 if string.sub(event_name, 1, button_prefix_len) == button_prefix then 590 if string.sub(event_name, 1, button_prefix_len) == button_prefix then
528 show_rant(player, false) 591 show_rant(player, false)
529 592
530 - button = string.sub(event_name, button_prefix_len + 1 ) 593 + button = string.sub(event_name, button_prefix_len + 1)
531 debug_print("handle_calcui_click button " .. button) 594 debug_print("handle_calcui_click button " .. button)
532 local dispatch_func = button_dispatch[button] 595 local dispatch_func = button_dispatch[button]
533 if dispatch_func then 596 if dispatch_func then
@@ -538,23 +601,25 @@ function handle_calcui_click(event, player) @@ -538,23 +601,25 @@ function handle_calcui_click(event, player)
538 if addchar then 601 if addchar then
539 display_addchar(player, addchar) 602 display_addchar(player, addchar)
540 end 603 end
541 - -- close button 604 + -- close button
542 elseif event_name == "calcui_close" then 605 elseif event_name == "calcui_close" then
543 hide_calculator(player) 606 hide_calculator(player)
544 - -- copy results 607 + -- copy results
545 elseif string.sub(event_name, 1, copy_prefix_len) == copy_prefix then 608 elseif string.sub(event_name, 1, copy_prefix_len) == copy_prefix then
546 if event.button == defines.mouse_button_type.left and 609 if event.button == defines.mouse_button_type.left and
547 - event.shift == true then 610 + event.shift == true then
548 -- copy equation or result to display 611 -- copy equation or result to display
549 local root = get_gui_root(player) 612 local root = get_gui_root(player)
550 if event_name == "calcui_copy_display_result" then 613 if event_name == "calcui_copy_display_result" then
551 - root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col2.calcui_result.calcui_copy_display_result.caption 614 + root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table
  615 + .calcui_table_col2.calcui_result.calcui_copy_display_result.caption
552 else 616 else
553 - root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col2.calcui_scroll_pane.calcui_result_table[event_name].caption 617 + root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table
  618 + .calcui_table_col2.calcui_scroll_pane.calcui_result_table[event_name].caption
554 end 619 end
555 end 620 end
556 focus_on_input(player) 621 focus_on_input(player)
557 - -- if else focus on focus on display 622 + -- if else focus on focus on display
558 else 623 else
559 focus_on_input(player) 624 focus_on_input(player)
560 end 625 end
@@ -566,7 +631,8 @@ function calcui_on_gui_text_changed(event) @@ -566,7 +631,8 @@ function calcui_on_gui_text_changed(event)
566 local player = game.players[event.player_index] 631 local player = game.players[event.player_index]
567 local root = get_gui_root(player) 632 local root = get_gui_root(player)
568 if string.find(root.calcui.calcui_table.calcui_table_col1.calcui_display.text, "=") then 633 if string.find(root.calcui.calcui_table.calcui_table_col1.calcui_display.text, "=") then
569 - root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col1.calcui_display.text:gsub("=", "") 634 + root.calcui.calcui_table.calcui_table_col1.calcui_display.text = root.calcui.calcui_table.calcui_table_col1
  635 + .calcui_display.text:gsub("=", "")
570 process_equal_key(player) 636 process_equal_key(player)
571 end 637 end
572 end 638 end
@@ -575,9 +641,9 @@ end @@ -575,9 +641,9 @@ end
575 -- ---------------------------------------------------------------- 641 -- ----------------------------------------------------------------
576 function calcui_on_gui_location_changed(event) 642 function calcui_on_gui_location_changed(event)
577 if event.element.name == "calcui" then 643 if event.element.name == "calcui" then
578 - if not global.gui_position then  
579 - global.gui_position = {} 644 + if not storage.gui_position then
  645 + storage.gui_position = {}
580 end 646 end
581 - global.gui_position[event.player_index] = event.element.location 647 + storage.gui_position[event.player_index] = event.element.location
582 end 648 end
583 -end  
584 \ No newline at end of file 649 \ No newline at end of file
  650 +end
changelog.txt
1 --------------------------------------------------------------------------------------------------- 1 ---------------------------------------------------------------------------------------------------
  2 +Version: 2.0.0
  3 +Date: 2024-10-29
  4 + Info:
  5 + - Updated the version for Factorio 2.0
  6 + Features:
  7 + - Added thousand seperators for big numbers, to make it more readable
  8 + - Also is now able to display scientific notation correctly (like 1.69e+42)
  9 + - Added translations for French, Spanish and German (Thanks to ChatGPT, Feedback is welcome if
  10 + something is not sounding correct)
  11 +---------------------------------------------------------------------------------------------------
2 Version: 1.1.1 12 Version: 1.1.1
3 Date: 2020-11-28 13 Date: 2020-11-28
4 Features: 14 Features:
control.lua
@@ -13,7 +13,7 @@ end @@ -13,7 +13,7 @@ end
13 13
14 -- ---------------------------------------------------------------- 14 -- ----------------------------------------------------------------
15 function debug_print(str) 15 function debug_print(str)
16 - if global.marc_debug then 16 + if storage.marc_debug then
17 game.print(str) 17 game.print(str)
18 end 18 end
19 end 19 end
@@ -21,7 +21,7 @@ end @@ -21,7 +21,7 @@ end
21 function __FUNC__() return debug.getinfo(2, 'n').name end 21 function __FUNC__() return debug.getinfo(2, 'n').name end
22 22
23 function debug_log(f, str) 23 function debug_log(f, str)
24 - if global.marc_debug then 24 + if storage.marc_debug then
25 game.print(f .. ": " .. str) 25 game.print(f .. ": " .. str)
26 end 26 end
27 end 27 end
@@ -62,11 +62,11 @@ end @@ -62,11 +62,11 @@ end
62 -- ---------------------------------------------------------------- 62 -- ----------------------------------------------------------------
63 local function on_calcui_command(event) 63 local function on_calcui_command(event)
64 if event.parameter == "debug" then 64 if event.parameter == "debug" then
65 - global.calcui_debug = true 65 + storage.calcui_debug = true
66 debug_print("calcui debugging is on") 66 debug_print("calcui debugging is on")
67 elseif event.parameter == "nodebug" then 67 elseif event.parameter == "nodebug" then
68 debug_print("calcui debugging is off") 68 debug_print("calcui debugging is off")
69 - global.calcui_debug = false 69 + storage.calcui_debug = false
70 elseif event.parameter == nil then 70 elseif event.parameter == nil then
71 game.players[event.player_index].print("please add a parameter") 71 game.players[event.player_index].print("please add a parameter")
72 else 72 else
info.json
1 { 1 {
2 "name": "calculator-ui", 2 "name": "calculator-ui",
3 - "version": "1.1.1", 3 + "version": "2.0.0",
4 "title": "Calculator UI", 4 "title": "Calculator UI",
5 "author": "Wichu", 5 "author": "Wichu",
6 - "factorio_version": "1.1",  
7 - "dependencies": ["base >= 1.1.0"], 6 + "factorio_version": "2.0",
  7 + "dependencies": [
  8 + "base >= 2.0.13"
  9 + ],
8 "description": "This mod adds a calculator with advanced controls to the UI." 10 "description": "This mod adds a calculator with advanced controls to the UI."
9 } 11 }
10 \ No newline at end of file 12 \ No newline at end of file
locale/de/config.cfg 0 → 100644
  1 +[shortcut-name]
  2 +calcui_4func=Taschenrechner
  3 +
  4 +[controls]
  5 +calcui_hotkey=Fokus auf die Eingabe / Öffnen/Schliessen des Taschenrechners (je nach Eintstellung)
  6 +
  7 +[mod-setting-name]
  8 +calcui-decimal-places=Nachkommastellen
  9 +calcui-clear-on-calc=Gleichung nach Berechnung löschen
  10 +calcui-shortcut-close=Mit Shortcut schliessen
  11 +calcui-nilaus-mode=Nilaus-Modus
  12 +calcui-sfx=Soundeffekte
  13 +
  14 +[mod-settings-description]
  15 +calcui-decimal-places=Anzahl der Nachkommastellen im Ergebnis
  16 +calcui-clear-on-calc=Soll die Berechnung die Gleichung löschen?
  17 +calcui-shortcut-close=Soll das Fenster beim Drücken des Shortcuts geschlossen werden (wahr), oder soll das Eingabefeld fokussiert werden, wenn es bereits geöffnet ist (falsch)?
  18 +calcui-nilaus-mode=Bei aktiviertem Nilaus-Modus erscheinen einige spezielle Easter Eggs
  19 +calcui-sfx=Wenn aktiviert, werden bei ungewöhnlichen Ergebnissen Soundeffekte abgespielt
  20 +
  21 +[calculator-ui]
  22 +title=Taschenrechner
  23 +recent_tooltip=Drücke Umschalt+Linksklick, um es in die aktuelle Gleichung zu kopieren
  24 +button_CE=Eingabe löschen
  25 +button_C=Löschen
  26 +button_BS=Rücktaste
  27 +button_DIV=Division
  28 +button_7=7
  29 +button_8=8
  30 +button_9=9
  31 +button_MUL=Multiplikation
  32 +button_4=4
  33 +button_5=5
  34 +button_6=6
  35 +button_SUB=Subtraktion
  36 +button_1=1
  37 +button_2=2
  38 +button_3=3
  39 +button_ADD=Addition
  40 +button_PERC=Prozent
  41 +button_0=0
  42 +button_DOT=Komma
  43 +button_EQU=Gleich
0 \ No newline at end of file 44 \ No newline at end of file
locale/en/config.cfg
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 calcui_4func=Calculator 2 calcui_4func=Calculator
3 3
4 [controls] 4 [controls]
5 -calcui_hotkey=Focus on input 5 +calcui_hotkey=Focus on input / Open/Close the calculator (Depending on setting)
6 6
7 [mod-setting-name] 7 [mod-setting-name]
8 calcui-decimal-places=Decimal places 8 calcui-decimal-places=Decimal places
@@ -13,11 +13,31 @@ calcui-sfx=Sound effects @@ -13,11 +13,31 @@ calcui-sfx=Sound effects
13 13
14 [mod-settings-description] 14 [mod-settings-description]
15 calcui-decimal-places=Number of decimal places in the result 15 calcui-decimal-places=Number of decimal places in the result
16 -calcui-clear-on-calc=Should trigger the calculation delete the equation?  
17 -calcui-shortcut-close=Whether the UI should close as well by pressing the shortcut (when true), or focus on the inputfield when already open (when false) 16 +calcui-clear-on-calc=Should the calculation trigger the equation to be deleted?
  17 +calcui-shortcut-close=Should the UI close when the shortcut is pressed (true), or focus on the input field if already open (false)?
18 calcui-nilaus-mode=With Nilaus mode enabled some special easter eggs appear 18 calcui-nilaus-mode=With Nilaus mode enabled some special easter eggs appear
19 calcui-sfx=When enabled sound effects will be played on strange results 19 calcui-sfx=When enabled sound effects will be played on strange results
20 20
21 [calculator-ui] 21 [calculator-ui]
22 title=Calculator 22 title=Calculator
23 -recent_tooltip=Press shift+left-click to copy it to current equation  
24 \ No newline at end of file 23 \ No newline at end of file
  24 +recent_tooltip=Press shift+left-click to copy it to current equation
  25 +button_CE=Clear Entry
  26 +button_C=Clear
  27 +button_BS=Backspace
  28 +button_DIV=Division
  29 +button_7=7
  30 +button_8=8
  31 +button_9=9
  32 +button_MUL=Multiplication
  33 +button_4=4
  34 +button_5=5
  35 +button_6=6
  36 +button_SUB=Subtraction
  37 +button_1=1
  38 +button_2=2
  39 +button_3=3
  40 +button_ADD=Addition
  41 +button_PERC=Percentage
  42 +button_0=0
  43 +button_DOT=Decimal point
  44 +button_EQU=Equals
25 \ No newline at end of file 45 \ No newline at end of file
locale/es/config.cfg 0 → 100644
  1 +[shortcut-name]
  2 +calcui_4func=Calculadora
  3 +
  4 +[controls]
  5 +calcui_hotkey=Enfocar en la entrada / Abrir/Cerrar la calculadora (según la configuración)
  6 +
  7 +[mod-setting-name]
  8 +calcui-decimal-places=Lugares decimales
  9 +calcui-clear-on-calc=Limpiar la ecuación tras el cálculo
  10 +calcui-shortcut-close=Cerrar con atajo
  11 +calcui-nilaus-mode=Modo Nilaus
  12 +calcui-sfx=Efectos de sonido
  13 +
  14 +[mod-settings-description]
  15 +calcui-decimal-places=Número de lugares decimales en el resultado
  16 +calcui-clear-on-calc=¿Debe el cálculo borrar la ecuación?
  17 +calcui-shortcut-close=¿Debe la interfaz cerrarse al presionar el atajo (verdadero), o enfocar el campo de entrada si ya está abierto (falso)?
  18 +calcui-nilaus-mode=Con el modo Nilaus activado, aparecen algunos Easter Eggs especiales
  19 +calcui-sfx=Cuando está activado, se reproducen efectos de sonido en resultados extraños
  20 +
  21 +[calculator-ui]
  22 +title=Calculadora
  23 +recent_tooltip=Presiona shift+clic izquierdo para copiar en la ecuación actual
  24 +button_CE=Borrar entrada
  25 +button_C=Borrar
  26 +button_BS=Retroceso
  27 +button_DIV=División
  28 +button_7=7
  29 +button_8=8
  30 +button_9=9
  31 +button_MUL=Multiplicación
  32 +button_4=4
  33 +button_5=5
  34 +button_6=6
  35 +button_SUB=Sustracción
  36 +button_1=1
  37 +button_2=2
  38 +button_3=3
  39 +button_ADD=Adición
  40 +button_PERC=Porcentaje
  41 +button_0=0
  42 +button_DOT=Punto decimal
  43 +button_EQU=Igual
0 \ No newline at end of file 44 \ No newline at end of file
locale/fr/config.cfg 0 → 100644
  1 +[shortcut-name]
  2 +calcui_4func=Calculatrice
  3 +
  4 +[controls]
  5 +calcui_hotkey=Focus sur l'entrée / Ouvrir/Fermer la calculatrice (selon les paramètres)
  6 +
  7 +[mod-setting-name]
  8 +calcui-decimal-places=Décimales
  9 +calcui-clear-on-calc=Effacer l'équation après le calcul
  10 +calcui-shortcut-close=Fermer avec le raccourci
  11 +calcui-nilaus-mode=Mode Nilaus
  12 +calcui-sfx=Effets sonores
  13 +
  14 +[mod-settings-description]
  15 +calcui-decimal-places=Nombre de décimales dans le résultat
  16 +calcui-clear-on-calc=La calculatrice doit-elle effacer l'équation après le calcul?
  17 +calcui-shortcut-close=La fenêtre doit-elle se fermer lors de l'utilisation du raccourci (vrai), ou se focaliser sur le champ de saisie si déjà ouvert (faux) ?
  18 +calcui-nilaus-mode=Avec le mode Nilaus activé, quelques easter eggs spéciaux apparaissent
  19 +calcui-sfx=Si activé, des effets sonores seront joués pour des résultats étranges
  20 +
  21 +[calculator-ui]
  22 +title=Calculatrice
  23 +recent_tooltip=Appuyez sur shift+clic gauche pour copier dans l'équation actuelle
  24 +button_CE=Effacer l'entrée
  25 +button_C=Effacer
  26 +button_BS=Retour arrière
  27 +button_DIV=Division
  28 +button_7=7
  29 +button_8=8
  30 +button_9=9
  31 +button_MUL=Multiplication
  32 +button_4=4
  33 +button_5=5
  34 +button_6=6
  35 +button_SUB=Soustraction
  36 +button_1=1
  37 +button_2=2
  38 +button_3=3
  39 +button_ADD=Addition
  40 +button_PERC=Pourcentage
  41 +button_0=0
  42 +button_DOT=Virgule
  43 +button_EQU=Égal
0 \ No newline at end of file 44 \ No newline at end of file