Commit ae0df041b2d7aa56f38942310aacdf54b28b0980
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.
Showing
3 changed files
with
51 additions
and
8 deletions
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 | |
7 | 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 | 20 | ## [0.18.3] - 2020-06-07 |
10 | 21 | ### General |
11 | 22 | A small visual overhaul of the mod | ... | ... |
calculator.lua
... | ... | @@ -40,6 +40,28 @@ local function destroy_calculator(player) |
40 | 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 | 65 | function show_calculator(player) |
44 | 66 | local root = get_gui_root(player) |
45 | 67 | |
... | ... | @@ -130,8 +152,6 @@ function show_calculator(player) |
130 | 152 | row5.add({type="sprite-button", style="calcui_button_style_dark", caption=".", name="calcui_button_DOT"}).sprite = "sprite_calcui_dark" |
131 | 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 | 155 | local col2 = table.add({ |
136 | 156 | type = "flow", |
137 | 157 | name = "calcui_table_col2", |
... | ... | @@ -170,8 +190,18 @@ function show_calculator(player) |
170 | 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 | 205 | end |
176 | 206 | end |
177 | 207 | |
... | ... | @@ -447,8 +477,10 @@ end |
447 | 477 | -- ---------------------------------------------------------------- |
448 | 478 | function calcui_on_gui_location_changed(event) |
449 | 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 | 485 | end |
454 | 486 | end |
455 | 487 | \ No newline at end of file | ... | ... |