diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-28 15:11:48 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-28 15:11:48 -0400 |
| commit | 048b6bdc607c61bf04766162970933e818a7173a (patch) | |
| tree | 5799e369f40dd46d3bab0a91b95ba7a3bcfd78b3 /apworld/client | |
| parent | c66aade68acfd7ef0bdace3fa6cf79a37965cc51 (diff) | |
| download | lingo2-archipelago-048b6bdc607c61bf04766162970933e818a7173a.tar.gz lingo2-archipelago-048b6bdc607c61bf04766162970933e818a7173a.tar.bz2 lingo2-archipelago-048b6bdc607c61bf04766162970933e818a7173a.zip | |
Added checked worldports tab to tracker
Diffstat (limited to 'apworld/client')
| -rw-r--r-- | apworld/client/manager.gd | 5 | ||||
| -rw-r--r-- | apworld/client/textclient.gd | 94 |
2 files changed, 98 insertions, 1 deletions
| diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 3facfba..5b731d2 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
| @@ -333,6 +333,7 @@ func _on_checked_worldports_updated(): | |||
| 333 | var textclient_node = global.get_node("Textclient") | 333 | var textclient_node = global.get_node("Textclient") |
| 334 | if textclient_node != null: | 334 | if textclient_node != null: |
| 335 | textclient_node.update_locations() | 335 | textclient_node.update_locations() |
| 336 | textclient_node.update_worldports() | ||
| 336 | 337 | ||
| 337 | 338 | ||
| 338 | func _client_could_not_connect(message): | 339 | func _client_could_not_connect(message): |
| @@ -449,6 +450,10 @@ func _client_connected(slot_data): | |||
| 449 | 450 | ||
| 450 | _inverse_item_locks[lock[0]].append([door_id, lock[1]]) | 451 | _inverse_item_locks[lock[0]].append([door_id, lock[1]]) |
| 451 | 452 | ||
| 453 | if shuffle_worldports: | ||
| 454 | var textclient = global.get_node("Textclient") | ||
| 455 | textclient.setup_worldports() | ||
| 456 | |||
| 452 | ap_connected.emit() | 457 | ap_connected.emit() |
| 453 | 458 | ||
| 454 | 459 | ||
| diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd index 1a0ce5c..0c4e675 100644 --- a/apworld/client/textclient.gd +++ b/apworld/client/textclient.gd | |||
| @@ -8,10 +8,14 @@ var tracker_label | |||
| 8 | var is_open = false | 8 | var is_open = false |
| 9 | 9 | ||
| 10 | var locations_overlay | 10 | var locations_overlay |
| 11 | |||
| 12 | var location_texture | 11 | var location_texture |
| 13 | var worldport_texture | 12 | var worldport_texture |
| 14 | 13 | ||
| 14 | var worldports_tab | ||
| 15 | var worldports_tree | ||
| 16 | var port_tree_item_by_map = {} | ||
| 17 | var port_tree_item_by_map_port = {} | ||
| 18 | |||
| 15 | 19 | ||
| 16 | func _ready(): | 20 | func _ready(): |
| 17 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS | 21 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS |
| @@ -87,6 +91,22 @@ func _ready(): | |||
| 87 | tracker_label = RichTextLabel.new() | 91 | tracker_label = RichTextLabel.new() |
| 88 | tracker_margins.add_child(tracker_label) | 92 | tracker_margins.add_child(tracker_label) |
| 89 | 93 | ||
| 94 | worldports_tab = MarginContainer.new() | ||
| 95 | worldports_tab.name = "Worldports" | ||
| 96 | worldports_tab.add_theme_constant_override("margin_top", 60) | ||
| 97 | worldports_tab.add_theme_constant_override("margin_left", 60) | ||
| 98 | worldports_tab.add_theme_constant_override("margin_right", 60) | ||
| 99 | worldports_tab.add_theme_constant_override("margin_bottom", 60) | ||
| 100 | tabs.add_child(worldports_tab) | ||
| 101 | tabs.set_tab_hidden(2, true) | ||
| 102 | |||
| 103 | worldports_tree = Tree.new() | ||
| 104 | worldports_tree.columns = 2 | ||
| 105 | worldports_tree.hide_root = true | ||
| 106 | worldports_tree.theme = preload("res://assets/themes/baseUI.tres") | ||
| 107 | worldports_tree.add_theme_font_size_override("font_size", 24) | ||
| 108 | worldports_tab.add_child(worldports_tree) | ||
| 109 | |||
| 90 | var runtime = global.get_node("Runtime") | 110 | var runtime = global.get_node("Runtime") |
| 91 | var location_image = Image.new() | 111 | var location_image = Image.new() |
| 92 | location_image.load_png_from_buffer(runtime.read_path("assets/location.png")) | 112 | location_image.load_png_from_buffer(runtime.read_path("assets/location.png")) |
| @@ -199,5 +219,77 @@ func update_locations_visibility(): | |||
| 199 | locations_overlay.visible = ap.show_locations | 219 | locations_overlay.visible = ap.show_locations |
| 200 | 220 | ||
| 201 | 221 | ||
| 222 | func setup_worldports(): | ||
| 223 | tabs.set_tab_hidden(2, false) | ||
| 224 | |||
| 225 | var root_ti = worldports_tree.create_item(null) | ||
| 226 | |||
| 227 | var ports_by_map_id = {} | ||
| 228 | var display_names_by_map_id = {} | ||
| 229 | var display_names_by_port_id = {} | ||
| 230 | |||
| 231 | var ap = global.get_node("Archipelago") | ||
| 232 | var gamedata = global.get_node("Gamedata") | ||
| 233 | for fpid in ap.port_pairings: | ||
| 234 | var port = gamedata.objects.get_ports()[fpid] | ||
| 235 | var room = gamedata.objects.get_rooms()[port.get_room_id()] | ||
| 236 | |||
| 237 | if not ports_by_map_id.has(room.get_map_id()): | ||
| 238 | ports_by_map_id[room.get_map_id()] = [] | ||
| 239 | |||
| 240 | var map = gamedata.objects.get_maps()[room.get_map_id()] | ||
| 241 | display_names_by_map_id[map.get_id()] = map.get_display_name() | ||
| 242 | |||
| 243 | ports_by_map_id[room.get_map_id()].append(fpid) | ||
| 244 | display_names_by_port_id[fpid] = port.get_display_name() | ||
| 245 | |||
| 246 | var sorted_map_ids = ports_by_map_id.keys().duplicate() | ||
| 247 | sorted_map_ids.sort_custom( | ||
| 248 | func(a, b): return display_names_by_map_id[a] < display_names_by_map_id[b] | ||
| 249 | ) | ||
| 250 | |||
| 251 | for map_id in sorted_map_ids: | ||
| 252 | var map_ti = root_ti.create_child() | ||
| 253 | map_ti.set_text(0, display_names_by_map_id[map_id]) | ||
| 254 | map_ti.visible = false | ||
| 255 | map_ti.collapsed = true | ||
| 256 | port_tree_item_by_map[map_id] = map_ti | ||
| 257 | port_tree_item_by_map_port[map_id] = {} | ||
| 258 | |||
| 259 | var port_ids = ports_by_map_id[map_id] | ||
| 260 | port_ids.sort_custom( | ||
| 261 | func(a, b): return display_names_by_port_id[a] < display_names_by_port_id[b] | ||
| 262 | ) | ||
| 263 | |||
| 264 | for port_id in port_ids: | ||
| 265 | var port_ti = map_ti.create_child() | ||
| 266 | port_ti.set_text(0, display_names_by_port_id[port_id]) | ||
| 267 | port_ti.set_text(1, gamedata.get_worldport_display_name(ap.port_pairings[port_id])) | ||
| 268 | port_ti.visible = false | ||
| 269 | port_tree_item_by_map_port[map_id][port_id] = port_ti | ||
| 270 | |||
| 271 | update_worldports() | ||
| 272 | |||
| 273 | |||
| 274 | func update_worldports(): | ||
| 275 | var ap = global.get_node("Archipelago") | ||
| 276 | |||
| 277 | for map_id in port_tree_item_by_map_port.keys(): | ||
| 278 | var map_visible = false | ||
| 279 | |||
| 280 | for port_id in port_tree_item_by_map_port[map_id].keys(): | ||
| 281 | var ti = port_tree_item_by_map_port[map_id][port_id] | ||
| 282 | ti.visible = ap.client._checked_worldports.has(port_id) | ||
| 283 | |||
| 284 | if ti.visible: | ||
| 285 | map_visible = true | ||
| 286 | |||
| 287 | port_tree_item_by_map[map_id].visible = map_visible | ||
| 288 | |||
| 289 | |||
| 202 | func reset(): | 290 | func reset(): |
| 203 | locations_overlay.clear() | 291 | locations_overlay.clear() |
| 292 | tabs.set_tab_hidden(2, true) | ||
| 293 | port_tree_item_by_map.clear() | ||
| 294 | port_tree_item_by_map_port.clear() | ||
| 295 | worldports_tree.clear() | ||
