Commit 4078977abb37c79618647161fe3454e197c757c3

Authored by Stefan Wichmann
1 parent 3ef575ee

Prepare for first release to mod portal

.vscode/launch.json 0 โ†’ 100644
  1 +{
  2 + // Use IntelliSense to learn about possible attributes.
  3 + // Hover to view descriptions of existing attributes.
  4 + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  5 + "version": "0.2.0",
  6 + "configurations": [
  7 + {
  8 + "type": "factoriomod",
  9 + "request": "launch",
  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"
  14 + }
  15 + ]
  16 +}
0 \ No newline at end of file 17 \ No newline at end of file
CHANGELOG.md 0 โ†’ 100644
  1 +# Changelog
  2 +All notable changes to this project will be documented in this file.
  3 +
  4 +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
  5 +and this project adheres to the versioning of Factorio, so 0.18.x will be at least compatible / tested with Factorio 0.18.x.
  6 +
  7 +## [Released]
  8 +
  9 +## [0.18.0] - 2020-06-06
  10 +### General
  11 +- Initial Release of the mod
  12 +- Compatible with Factorio >0.18.0; tested on 0.18.30
  13 +- Based on the 4-Function Calculator found in the [Max Rate Calculator](https://mods.factorio.com/mod/MaxRateCalculator) mod by [Theanderblast](https://mods.factorio.com/user/theanderblast)
  14 +
  15 +### Added
  16 +- History of recent calculations
  17 +- Possibility to copy recent calculations to the current one (with shift+left-click)
  18 +- Substitutes some functions & "constants" of the Lua [math-lib](http://lua-users.org/wiki/MathLibraryTutorial)
  19 + - abs() -> math.abs()
  20 + - acos() -> math.acos()
  21 + - asin() -> math.asin()
  22 + - atan() -> math.atan()
  23 + - ceil() -> math.ceil()
  24 + - floor() -> math.floor()
  25 + - cos() -> math.cos()
  26 + - sin() -> math.sin()
  27 + - tan() -> math.tan()
  28 + - deg() -> math.deg()
  29 + - rad() -> math.rad()
  30 + - exp() -> math.exp()
  31 + - log() -> math.log()
  32 + - min() -> math.min()
  33 + - max() -> math.max()
  34 + - modf() -> math.modf()
  35 + - sqrt() -> math.sqrt()
  36 + - huge -> math.huge
  37 + - pi -> math.pi
  38 +- Allows the use of "%" (percent sign) in the calculation
  39 +- A little easter egg :-)
  40 +- Setting for number of decimal places in result (Default: 2). Exact value will be displayed in the tooltip
  41 +- Setting if triggering the calculation should clear the current equation (Default: no)
  42 +
  43 +### Changed
  44 +- Made the buttons slightly bigger, so that it's better readable on streams.
  45 +- Allows to make "complex" calculations with parentheses
  46 +- Allows pretty much all characters in the equation field
  47 + - but the "=" (equal sign) will trigger the calculation
  48 +
  49 +### Removed
  50 +- Got rid of the memory functions - but introduced the list of recent calculations instead
0 \ No newline at end of file 51 \ No newline at end of file
README.md 0 โ†’ 100644
  1 +# Calculator UI
  2 +
  3 +Calculator UI is a Factorio mod which adds a calculator to the Factorio game with the goal to have a little bit of usability behind it.
  4 +
  5 +## Based on
  6 +The 4-Function Calculator found in the [Max Rate Calculator](https://mods.factorio.com/mod/MaxRateCalculator) mod by [Theanderblast](https://mods.factorio.com/user/theanderblast).
  7 +
  8 +## Features
  9 +- List of recent calculations
  10 +- Use of parentheses in the equation
  11 +- rounding of numbers (number of decimal places can be set in the settings)
  12 +- copy a recent calculation into the current calculation (by shift+left-click on the equation you want to copy)
  13 +- a nifty little easter egg ;-)
  14 +- use of some advanced function and constants of the Lua [math-lib](http://lua-users.org/wiki/MathLibraryTutorial) (without math.) -> e.g. "pi" instead of "math.pi".
  15 +
  16 +## Installation
  17 +Well ... ehm ... search for the mod ingame and install it :-)
  18 +
  19 +## Usage
  20 +Press the 3 little dots on the shortcuts UI of Factorio to select the "Calculator". Afterwards you can click on the calculator symbol to open it.
  21 +
  22 +## Changelog
  23 +see separate [changelog](changelog.md)
  24 +
  25 +## License
  26 +[MIT](https://choosealicense.com/licenses/mit/)
0 \ No newline at end of file 27 \ No newline at end of file
calculator.lua
@@ -218,8 +218,8 @@ function fix_equation(equation) @@ -218,8 +218,8 @@ function fix_equation(equation)
218 ["tan"] = "math.tan", 218 ["tan"] = "math.tan",
219 ["deg"] = "math.deg", 219 ["deg"] = "math.deg",
220 ["rad"] = "math.rad", 220 ["rad"] = "math.rad",
221 - ["exp"] = "math.log",  
222 - ["exp"] = "math.log", 221 + ["exp"] = "math.exp",
  222 + ["log"] = "math.log",
223 ["min"] = "math.min", 223 ["min"] = "math.min",
224 ["max"] = "math.max", 224 ["max"] = "math.max",
225 ["modf"] = "math.modf", 225 ["modf"] = "math.modf",
@@ -292,6 +292,10 @@ function process_equal_key(player, button) @@ -292,6 +292,10 @@ function process_equal_key(player, button)
292 end 292 end
293 end 293 end
294 end 294 end
  295 +
  296 + if settings.get_player_settings(player)["calcui-clear-on-calc"].value then
  297 + clear_equation(player)
  298 + end
295 end 299 end
296 300
297 -- ---------------------------------------------------------------- 301 -- ----------------------------------------------------------------
@@ -390,194 +394,4 @@ function calcui_on_gui_location_changed(event) @@ -390,194 +394,4 @@ function calcui_on_gui_location_changed(event)
390 local root = get_gui_root(player) 394 local root = get_gui_root(player)
391 root.calcui.location = event.element.location 395 root.calcui.location = event.element.location
392 end 396 end
393 -end  
394 -  
395 -  
396 -  
397 -  
398 -  
399 -  
400 --- -- ----------------------------------------------------------------  
401 --- local function process_number_key(player, num)  
402 - -- debug_print("process_number_key(" .. num .. ")")  
403 -  
404 - -- if global.calcui_context[player.index].in_left_of_decimal then  
405 - -- val = num / global.calcui_context[player.index].decimal_place  
406 - -- if global.calcui_context[player.index].in_data_entry then  
407 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].current_value + val  
408 - -- else  
409 - -- global.calcui_context[player.index].current_value = val  
410 - -- end  
411 - -- global.calcui_context[player.index].decimal_place = global.calcui_context[player.index].decimal_place * 10  
412 - -- else  
413 - -- if global.calcui_context[player.index].in_data_entry then  
414 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].current_value * 10 + num  
415 - -- else  
416 - -- global.calcui_context[player.index].current_value = tonumber(num)  
417 - -- end  
418 - -- end  
419 - -- global.calcui_context[player.index].in_data_entry = true  
420 - -- update_display(player)  
421 --- end  
422 -  
423 --- -- ----------------------------------------------------------------  
424 --- local function process_decimal_key(player, key)  
425 - -- debug_print("process_decimal_key(" .. key .. ")")  
426 - -- if global.calcui_context[player.index].in_left_of_decimal then  
427 - -- return  
428 - -- end  
429 -  
430 - -- global.calcui_context[player.index].in_left_of_decimal = true  
431 - -- global.calcui_context[player.index].decimal_place = 10  
432 - -- update_display(player)  
433 --- end  
434 -  
435 --- -- ----------------------------------------------------------------  
436 --- local function process_change_sign_key(player, key)  
437 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].current_value * -1  
438 - -- update_display(player)  
439 --- end  
440 -  
441 --- -- ----------------------------------------------------------------  
442 --- local function process_equal_key(player, key)  
443 - -- debug_print("process_equal_key(" .. key .. ") global.calcui_context[player.index].current_func is " .. global.calcui_context[player.index].current_func)  
444 -  
445 - -- global.calcui_context[player.index].in_data_entry = false  
446 - -- doing_decimal = false  
447 -  
448 - -- if global.calcui_context[player.index].current_func == "ADD" then  
449 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].operand + global.calcui_context[player.index].current_value  
450 - -- elseif global.calcui_context[player.index].current_func == "SUB" then  
451 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].operand - global.calcui_context[player.index].current_value  
452 - -- elseif global.calcui_context[player.index].current_func == "MUL" then  
453 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].operand * global.calcui_context[player.index].current_value  
454 - -- elseif global.calcui_context[player.index].current_func == "DIV" then  
455 - -- debug_print("process_equal_key global.calcui_context[player.index].current_value " .. global.calcui_context[player.index].current_value)  
456 -  
457 - -- if global.calcui_context[player.index].current_value == 0 then  
458 - -- debug_print("process_equal_key DIVIDE BY ZERO")  
459 - -- update_display(player, {"calcui_divide_by_zero"}) -- TODO: localize  
460 - -- return  
461 - -- end  
462 - -- global.calcui_context[player.index].current_value = global.calcui_context[player.index].operand / global.calcui_context[player.index].current_value  
463 - -- end  
464 - -- global.calcui_context[player.index].current_func = ""  
465 - -- global.calcui_context[player.index].in_data_entry = false  
466 - -- update_display(player)  
467 --- end  
468 -  
469 --- -- ----------------------------------------------------------------  
470 --- local function process_func_key(player, key)  
471 - -- debug_print("process_func_key(" .. key .. ")")  
472 -  
473 - -- if global.calcui_context[player.index].current_func ~= "" then  
474 - -- process_equal_key(player, key)  
475 - -- end  
476 -  
477 - -- global.calcui_context[player.index].current_func = key  
478 - -- global.calcui_context[player.index].operand = global.calcui_context[player.index].current_value  
479 - -- global.calcui_context[player.index].in_data_entry = false  
480 - -- global.calcui_context[player.index].in_left_of_decimal = false  
481 --- end  
482 -  
483 --- -- ----------------------------------------------------------------  
484 --- local function process_mem_key(player, key)  
485 - -- debug_print("process_mem_key(" .. key .. ")")  
486 - -- if calculator_memory == nil then  
487 - -- debug_print("process_mem_key(" .. key .. ") calculator_memory was nil")  
488 - -- calculator_memory = 0  
489 - -- end  
490 - -- if key == "MS" then  
491 - -- calculator_memory = global.calcui_context[player.index].current_value  
492 - -- elseif key == "M+" then  
493 - -- calculator_memory = calculator_memory + global.calcui_context[player.index].current_value  
494 - -- elseif key == "M-" then  
495 - -- calculator_memory = calculator_memory - global.calcui_context[player.index].current_value  
496 - -- else  
497 - -- global.calcui_context[player.index].current_value = calculator_memory  
498 - -- end  
499 - -- global.calcui_context[player.index].in_data_entry = false  
500 - -- update_display(player)  
501 --- end  
502 -  
503 --- -- ----------------------------------------------------------------  
504 --- local function process_edit_key(player, key)  
505 - -- debug_print("process_edit_key(" .. key .. ")")  
506 - -- if key == "CE" then  
507 - -- global.calcui_context[player.index].current_value = 0  
508 - -- elseif key == "C" then  
509 - -- init_calculator(player)  
510 - -- end  
511 - -- global.calcui_context[player.index].in_data_entry = false  
512 - -- update_display(player)  
513 --- end  
514 -  
515 --- -- ----------------------------------------------------------------  
516 --- local function set_current_value_to_text(player, text)  
517 - -- local last_char = string.sub(text, -1)  
518 - -- if last_char == "+" then  
519 - -- process_func_key(player, "ADD")  
520 - -- elseif last_char == "-" then  
521 - -- process_func_key(player, "SUB")  
522 - -- elseif last_char == "*" then  
523 - -- process_func_key(player, "MUL")  
524 - -- elseif last_char == "/" then  
525 - -- process_func_key(player, "DIV")  
526 - -- else  
527 - -- -- number  
528 - -- local val = tonumber(text)  
529 - -- if val ~= nil then  
530 - -- global.calcui_context[player.index].current_value = val  
531 - -- debug_print("set_current_value_to_text got value " .. text)  
532 - -- local plain_text = true  
533 - -- local dot = string.find(text, '.', 1, plain_text)  
534 - -- if dot ~= nil then  
535 - -- local number_decimal_places = #text - dot  
536 - -- global.calcui_context[player.index].decimal_place = 10 ^ (number_decimal_places + 1)  
537 - -- global.calcui_context[player.index].in_left_of_decimal = true  
538 - -- debug_print("#text " .. #text .. " number_global.calcui_context[player.index].decimal_places " ..  
539 - -- number_decimal_places .. " global.calcui_context[player.index].decimal_place " .. global.calcui_context[player.index].decimal_place .. " dot " .. dot .. " in_lod " .. boolstr(global.calcui_context[player.index].in_left_of_decimal))  
540 - -- else  
541 - -- debug_print("set_current_value_to_text no dot. set lod to false" )  
542 - -- global.calcui_context[player.index].in_left_of_decimal = false  
543 - -- end  
544 - -- else  
545 - -- debug_print("got junk")  
546 - -- end  
547 - -- end  
548 --- end  
549 -  
550 --- -- ----------------------------------------------------------------  
551 --- local function process_backspace_key(player, key)  
552 - -- local root = get_gui_root(player)  
553 - -- debug_print("process_backspace_key(" .. key .. ")")  
554 - -- local old_text = root.calcui.calcui_display.caption  
555 - -- local old_len = #old_text  
556 - -- text = string.sub(old_text, 1, old_len -1)  
557 - -- debug_print("process_backspace_key(" .. key .. ") old_text " .. old_text .. " old_len " .. old_len .. " text " .. text ..  
558 - -- " in_decimal " .. boolstr(global.calcui_context[player.index].in_left_of_decimal) .. " global.calcui_context[player.index].decimal_place " .. global.calcui_context[player.index].decimal_place)  
559 - -- if #text == 0 then  
560 - -- global.calcui_context[player.index].current_value = 0  
561 - -- else  
562 - -- set_current_value_to_text(player, text)  
563 - -- end  
564 - -- update_display(player)  
565 --- end  
566 -  
567 --- -- ----------------------------------------------------------------  
568 --- local function calcui_toggle_key(event)  
569 - -- local player = game.players[event.player_index]  
570 - -- toggle_calculator(player)  
571 --- end  
572 -  
573 --- -- ----------------------------------------------------------------  
574 --- function calcui_clickable_value_clicked(player, val) -- a value in the main Max Rate Calculator has been clicked on. Paste into current value  
575 - -- local root = get_gui_root(player)  
576 - -- if root ~=nil and root.calcui ~= nil then  
577 - -- local text = tostring(val)  
578 - -- set_current_value_to_text(player, text)  
579 - -- update_display(player)  
580 - -- end  
581 --- end  
582 -  
583 --- script.on_event( "calcui_toggle", calcui_toggle_key )  
584 \ No newline at end of file 397 \ No newline at end of file
  398 +end
585 \ No newline at end of file 399 \ No newline at end of file
control.lua
@@ -28,7 +28,6 @@ end @@ -28,7 +28,6 @@ end
28 28
29 -- ---------------------------------------------------------------- 29 -- ----------------------------------------------------------------
30 local function get_gui_root(player) 30 local function get_gui_root(player)
31 - -- return player.gui.left  
32 return player.gui.screen 31 return player.gui.screen
33 end 32 end
34 33
@@ -52,10 +51,7 @@ end @@ -52,10 +51,7 @@ end
52 local function on_gui_click(event) 51 local function on_gui_click(event)
53 local event_name = event.element.name 52 local event_name = event.element.name
54 debug_print("event_name " .. event_name) 53 debug_print("event_name " .. event_name)
55 - -- local calcui_prefix = "calcui_"  
56 - -- local possible_calcui_prefix = string.sub( event_name, 1, string.len(calcui_prefix) )  
57 local player = game.players[event.player_index] 54 local player = game.players[event.player_index]
58 - -- local root = get_gui_root(player)  
59 55
60 local calcui_prefix = "calcui_" 56 local calcui_prefix = "calcui_"
61 local possible_marcalc_prefix = string.sub( event_name, 1, string.len(calcui_prefix)) 57 local possible_marcalc_prefix = string.sub( event_name, 1, string.len(calcui_prefix))
@@ -63,25 +59,6 @@ local function on_gui_click(event) @@ -63,25 +59,6 @@ local function on_gui_click(event)
63 handle_calcui_click(event, player) 59 handle_calcui_click(event, player)
64 return 60 return
65 end 61 end
66 -  
67 - -- if possible_calcui_prefix == calcui_prefix then  
68 - -- if event_name == "calcui_calculator_button" then  
69 - -- toggle_calculator(player)  
70 - -- return  
71 - -- end  
72 -  
73 - -- if root.calcui_gui_top then  
74 - -- if event_name == "calcui_close_button" then  
75 - -- destroy_calcui_gui(player)  
76 - -- hide_calculator(player)  
77 - -- end  
78 - -- elseif event_name == "calcui_close_button" then  
79 - -- if player.gui.left.calcui_gui_top then  
80 - -- player.gui.left.calcui_gui_top.destroy()  
81 - -- hide_calculator(player)  
82 - -- end  
83 - -- end  
84 - -- end  
85 end 62 end
86 63
87 -- ---------------------------------------------------------------- 64 -- ----------------------------------------------------------------
@@ -90,9 +67,6 @@ local function on_gui_confirmed(event) @@ -90,9 +67,6 @@ local function on_gui_confirmed(event)
90 player = game.players[event.player_index]; 67 player = game.players[event.player_index];
91 if event.element.name == "calcui_display" then 68 if event.element.name == "calcui_display" then
92 process_equal_key(player) 69 process_equal_key(player)
93 - if settings.get_player_settings(player)["calcui-enter-clear"].value then  
94 - clear_equation(player)  
95 - end  
96 end 70 end
97 end 71 end
98 72
@@ -118,4 +92,4 @@ script.on_event( defines.events.on_gui_click, on_gui_click) @@ -118,4 +92,4 @@ script.on_event( defines.events.on_gui_click, on_gui_click)
118 script.on_event( defines.events.on_gui_confirmed, on_gui_confirmed) 92 script.on_event( defines.events.on_gui_confirmed, on_gui_confirmed)
119 script.on_event( defines.events.on_gui_text_changed, calcui_on_gui_text_changed ) 93 script.on_event( defines.events.on_gui_text_changed, calcui_on_gui_text_changed )
120 script.on_event( defines.events.on_gui_location_changed, calcui_on_gui_location_changed ) 94 script.on_event( defines.events.on_gui_location_changed, calcui_on_gui_location_changed )
121 -commands.add_command( "calcui", "Max Rate Calculator [ debug | nodebug ] ", on_calcui_command )  
122 \ No newline at end of file 95 \ No newline at end of file
  96 +commands.add_command( "calcui", "Calculator UI [ debug | nodebug ] ", on_calcui_command )
123 \ No newline at end of file 97 \ No newline at end of file
locale/en/config.cfg
@@ -3,11 +3,11 @@ calcui_4func=Calculator @@ -3,11 +3,11 @@ calcui_4func=Calculator
3 3
4 [mod-setting-name] 4 [mod-setting-name]
5 calcui-decimal-places=Decimal places 5 calcui-decimal-places=Decimal places
6 -calcui-enter-clear=Clear equation on enter? 6 +calcui-clear-on-calc=Clear equation on calculation
7 7
8 [mod-settings-description] 8 [mod-settings-description]
9 calcui-decimal-places=Number of decimal places in the result 9 calcui-decimal-places=Number of decimal places in the result
10 -calcui-enter-clear=Should pressing the enter key delete the equation? 10 +calcui-clear-on-calc=Should trigger the calculation delete the equation?
11 11
12 [calculator-ui] 12 [calculator-ui]
13 title=Calculator 13 title=Calculator
settings.lua
@@ -11,7 +11,7 @@ data:extend({ @@ -11,7 +11,7 @@ data:extend({
11 { 11 {
12 type = "bool-setting", 12 type = "bool-setting",
13 default_value = 0, 13 default_value = 0,
14 - name = "calcui-enter-clear", 14 + name = "calcui-clear-on-calc",
15 setting_type = "runtime-per-user", 15 setting_type = "runtime-per-user",
16 default_value = false 16 default_value = false
17 } 17 }
thumbnail.png 0 โ†’ 100644

17.7 KB