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 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 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 27 \ No newline at end of file
... ...
calculator.lua
... ... @@ -218,8 +218,8 @@ function fix_equation(equation)
218 218 ["tan"] = "math.tan",
219 219 ["deg"] = "math.deg",
220 220 ["rad"] = "math.rad",
221   - ["exp"] = "math.log",
222   - ["exp"] = "math.log",
  221 + ["exp"] = "math.exp",
  222 + ["log"] = "math.log",
223 223 ["min"] = "math.min",
224 224 ["max"] = "math.max",
225 225 ["modf"] = "math.modf",
... ... @@ -292,6 +292,10 @@ function process_equal_key(player, button)
292 292 end
293 293 end
294 294 end
  295 +
  296 + if settings.get_player_settings(player)["calcui-clear-on-calc"].value then
  297 + clear_equation(player)
  298 + end
295 299 end
296 300  
297 301 -- ----------------------------------------------------------------
... ... @@ -390,194 +394,4 @@ function calcui_on_gui_location_changed(event)
390 394 local root = get_gui_root(player)
391 395 root.calcui.location = event.element.location
392 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 397 \ No newline at end of file
  398 +end
585 399 \ No newline at end of file
... ...
control.lua
... ... @@ -28,7 +28,6 @@ end
28 28  
29 29 -- ----------------------------------------------------------------
30 30 local function get_gui_root(player)
31   - -- return player.gui.left
32 31 return player.gui.screen
33 32 end
34 33  
... ... @@ -52,10 +51,7 @@ end
52 51 local function on_gui_click(event)
53 52 local event_name = event.element.name
54 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 54 local player = game.players[event.player_index]
58   - -- local root = get_gui_root(player)
59 55  
60 56 local calcui_prefix = "calcui_"
61 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 59 handle_calcui_click(event, player)
64 60 return
65 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 62 end
86 63  
87 64 -- ----------------------------------------------------------------
... ... @@ -90,9 +67,6 @@ local function on_gui_confirmed(event)
90 67 player = game.players[event.player_index];
91 68 if event.element.name == "calcui_display" then
92 69 process_equal_key(player)
93   - if settings.get_player_settings(player)["calcui-enter-clear"].value then
94   - clear_equation(player)
95   - end
96 70 end
97 71 end
98 72  
... ... @@ -118,4 +92,4 @@ script.on_event( defines.events.on_gui_click, on_gui_click)
118 92 script.on_event( defines.events.on_gui_confirmed, on_gui_confirmed)
119 93 script.on_event( defines.events.on_gui_text_changed, calcui_on_gui_text_changed )
120 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 95 \ No newline at end of file
  96 +commands.add_command( "calcui", "Calculator UI [ debug | nodebug ] ", on_calcui_command )
123 97 \ No newline at end of file
... ...
locale/en/config.cfg
... ... @@ -3,11 +3,11 @@ calcui_4func=Calculator
3 3  
4 4 [mod-setting-name]
5 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 8 [mod-settings-description]
9 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 12 [calculator-ui]
13 13 title=Calculator
... ...
settings.lua
... ... @@ -11,7 +11,7 @@ data:extend({
11 11 {
12 12 type = "bool-setting",
13 13 default_value = 0,
14   - name = "calcui-enter-clear",
  14 + name = "calcui-clear-on-calc",
15 15 setting_type = "runtime-per-user",
16 16 default_value = false
17 17 }
... ...
thumbnail.png 0 → 100644

17.7 KB