Commit ae0df041b2d7aa56f38942310aacdf54b28b0980

Authored by Stefan Wichmann
1 parent 8595b9ad

Fixed multiplayer issue when dragging the window.

Now the UI won't auto center anymore after moved.
If moved out of bounds, it will return fully in sight.
CHANGELOG.md
@@ -6,6 +6,17 @@ and this project adheres to the versioning of Factorio, so 0.18.x will be at lea @@ -6,6 +6,17 @@ and this project adheres to the versioning of Factorio, so 0.18.x will be at lea
6 6
7 ## [Released] 7 ## [Released]
8 8
  9 +## [0.18.4] - 2020-06-07
  10 +### General
  11 +Based onyuser feedback updated the mod
  12 +
  13 +### Changed
  14 +- Window now remember last location when opened
  15 +
  16 +### Fixed
  17 +- On multiplayer session the window would lag behind while dragging, because the location would be saved on server. This isn't going to happen anymore, hopefully (not tested yet).
  18 +- When window is moved out of boundaries, when reopened, it will correct itself to be fully in sight again.
  19 +
9 ## [0.18.3] - 2020-06-07 20 ## [0.18.3] - 2020-06-07
10 ### General 21 ### General
11 A small visual overhaul of the mod 22 A small visual overhaul of the mod
calculator.lua
@@ -40,6 +40,28 @@ local function destroy_calculator(player) @@ -40,6 +40,28 @@ local function destroy_calculator(player)
40 end 40 end
41 41
42 -- ---------------------------------------------------------------- 42 -- ----------------------------------------------------------------
  43 +function fix_oob_ui(player)
  44 + if global.gui_position[player.index].x < 0 then
  45 + global.gui_position[player.index].x = 0
  46 + end
  47 + if global.gui_position[player.index].y < 0 then
  48 + global.gui_position[player.index].y = 0
  49 + end
  50 +
  51 + -- TODO fixed box size, because there is no API call for that
  52 + local width = 255
  53 + local height = 350
  54 +
  55 + if global.gui_position[player.index].x + width > player.display_resolution.width then
  56 + global.gui_position[player.index].x = player.display_resolution.width - width
  57 + end
  58 + if global.gui_position[player.index].y + height > player.display_resolution.height then
  59 + global.gui_position[player.index].y = player.display_resolution.height - height
  60 + end
  61 + --global.gui_position[player.index]
  62 +end
  63 +
  64 +-- ----------------------------------------------------------------
43 function show_calculator(player) 65 function show_calculator(player)
44 local root = get_gui_root(player) 66 local root = get_gui_root(player)
45 67
@@ -130,8 +152,6 @@ function show_calculator(player) @@ -130,8 +152,6 @@ function show_calculator(player)
130 row5.add({type="sprite-button", style="calcui_button_style_dark", caption=".", name="calcui_button_DOT"}).sprite = "sprite_calcui_dark" 152 row5.add({type="sprite-button", style="calcui_button_style_dark", caption=".", name="calcui_button_DOT"}).sprite = "sprite_calcui_dark"
131 row5.add({type="sprite-button", style="calcui_button_style_red", caption="=", name="calcui_button_EQU"}).sprite = "sprite_calcui_red" 153 row5.add({type="sprite-button", style="calcui_button_style_red", caption="=", name="calcui_button_EQU"}).sprite = "sprite_calcui_red"
132 154
133 - --.sprite = "sprite_calcui_dark"  
134 -  
135 local col2 = table.add({ 155 local col2 = table.add({
136 type = "flow", 156 type = "flow",
137 name = "calcui_table_col2", 157 name = "calcui_table_col2",
@@ -170,8 +190,18 @@ function show_calculator(player) @@ -170,8 +190,18 @@ function show_calculator(player)
170 recents.style.column_alignments[1] = "right" 190 recents.style.column_alignments[1] = "right"
171 191
172 192
173 - -- center the gui  
174 - calcui.force_auto_center() 193 + -- use last saved location or center the gui
  194 + if not global.gui_position then
  195 + global.gui_position = {}
  196 + end
  197 + if global.gui_position[player.index] then
  198 + -- fix weird saved positions (out of reach)
  199 + fix_oob_ui(player)
  200 +
  201 + calcui.location = global.gui_position[player.index]
  202 + else
  203 + calcui.force_auto_center()
  204 + end
175 end 205 end
176 end 206 end
177 207
@@ -447,8 +477,10 @@ end @@ -447,8 +477,10 @@ end
447 -- ---------------------------------------------------------------- 477 -- ----------------------------------------------------------------
448 function calcui_on_gui_location_changed(event) 478 function calcui_on_gui_location_changed(event)
449 if event.element.name == "calcui" then 479 if event.element.name == "calcui" then
450 - local player = game.players[event.player_index]  
451 - local root = get_gui_root(player)  
452 - root.calcui.location = event.element.location 480 + local root = get_gui_root(game.players[event.player_index])
  481 + if not global.gui_position then
  482 + global.gui_position = {}
  483 + end
  484 + global.gui_position[event.player_index] = event.element.location
453 end 485 end
454 end 486 end
455 \ No newline at end of file 487 \ No newline at end of file
info.json
1 { 1 {
2 "name": "calculator-ui", 2 "name": "calculator-ui",
3 - "version": "0.18.3", 3 + "version": "0.18.4",
4 "title": "Calculator UI", 4 "title": "Calculator UI",
5 "author": "Wichu", 5 "author": "Wichu",
6 "factorio_version": "0.18", 6 "factorio_version": "0.18",