Commit 9d6691a6ce97f4a4ff880399073f150adbbd7b49
1 parent
3371d413
Updated to Factorio 2.0
Showing
12 changed files
with
336 additions
and
97 deletions
.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
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 |