From adfc639965b2bda776ceb0a20840438e31f82d58 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 2 Nov 2025 12:29:29 -0500 Subject: Allow ignoring locations in tracker --- apworld/client/textclient.gd | 82 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 66 insertions(+), 16 deletions(-) (limited to 'apworld/client/textclient.gd') diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd index f785a03..8356f92 100644 --- a/apworld/client/textclient.gd +++ b/apworld/client/textclient.gd @@ -16,6 +16,7 @@ var tracker_loc_tree_item_by_id = {} var tracker_port_tree_item_by_id = {} var tracker_goal_tree_item = null var tracker_object_by_index = {} +var tracker_object_by_ignored_index = {} var worldports_tab var worldports_tree @@ -99,7 +100,7 @@ func _ready(): tabs.add_child(tracker_margins) tracker_tree = Tree.new() - tracker_tree.columns = 3 + tracker_tree.columns = 4 tracker_tree.hide_root = true tracker_tree.add_theme_font_size_override("font_size", 24) tracker_tree.add_theme_color_override("font_color", Color(0.8, 0.8, 0.8, 1)) @@ -108,7 +109,9 @@ func _ready(): tracker_tree.set_column_expand(0, false) tracker_tree.set_column_expand(1, true) tracker_tree.set_column_expand(2, false) + tracker_tree.set_column_expand(3, false) tracker_tree.set_column_custom_minimum_width(2, 200) + tracker_tree.set_column_custom_minimum_width(3, 200) tracker_margins.add_child(tracker_tree) worldports_tab = MarginContainer.new() @@ -208,6 +211,7 @@ func update_locations(reset_locations = true): "name": location_name, "type": kLocation, "id": location_id, + "ignored": ap._ignored_locations.has(location_id), } ) ) @@ -222,11 +226,14 @@ func update_locations(reset_locations = true): "name": port_name, "type": kWorldport, "id": port_id, + "ignored": false, } ) ) - locations.sort_custom(func(a, b): return a["name"] < b["name"]) + locations.sort_custom( + func(a, b): return a["name"] < b["name"] if a["ignored"] == b["ignored"] else !a["ignored"] + ) if ap.client._goal_accessible: var location_name = gamedata.ending_display_name_by_name[ap.kEndingNameByVictoryValue[ @@ -238,13 +245,14 @@ func update_locations(reset_locations = true): { "name": location_name, "type": kGoal, + "ignored": false, } ) ) var count = 0 for location in locations: - if count < 18: + if count < 18 and not location["ignored"]: locations_overlay.push_paragraph(HORIZONTAL_ALIGNMENT_RIGHT) locations_overlay.append_text(location["name"]) locations_overlay.append_text(" ") @@ -264,9 +272,24 @@ func update_locations(reset_locations = true): reset_tracker_tab() var root_ti = tracker_tree.create_item(null) + var ignored_loc_header = null for location in locations: - var loc_row = root_ti.create_child() + var loc_row + + if location["ignored"]: + if ignored_loc_header == null: + ignored_loc_header = root_ti.create_child() + ignored_loc_header.set_text(1, "Ignored Locations") + ignored_loc_header.set_selectable(0, false) + ignored_loc_header.set_selectable(1, false) + ignored_loc_header.set_selectable(2, false) + ignored_loc_header.set_selectable(3, false) + + loc_row = ignored_loc_header.create_child() + else: + loc_row = root_ti.create_child() + loc_row.set_cell_mode(0, TreeItem.CELL_MODE_ICON) loc_row.set_selectable(0, false) loc_row.set_text(1, location["name"]) @@ -277,6 +300,16 @@ func update_locations(reset_locations = true): loc_row.set_editable(2, true) loc_row.set_selectable(2, false) loc_row.set_text_alignment(2, HORIZONTAL_ALIGNMENT_CENTER) + loc_row.set_selectable(3, false) + if location["type"] == kLocation: + loc_row.set_cell_mode(3, TreeItem.CELL_MODE_CUSTOM) + if location["ignored"]: + loc_row.set_text(3, "Unignore") + else: + loc_row.set_text(3, "Ignore") + loc_row.set_custom_as_button(3, true) + loc_row.set_editable(3, true) + loc_row.set_text_alignment(3, HORIZONTAL_ALIGNMENT_CENTER) if location["type"] == kLocation: loc_row.set_icon(0, location_texture) @@ -288,7 +321,10 @@ func update_locations(reset_locations = true): loc_row.set_icon(0, goal_texture) tracker_goal_tree_item = loc_row - tracker_object_by_index[loc_row.get_index()] = location + if location["ignored"]: + tracker_object_by_ignored_index[loc_row.get_index()] = location + else: + tracker_object_by_index[loc_row.get_index()] = location else: for loc_row in tracker_tree.get_root().get_children(): loc_row.visible = false @@ -317,20 +353,33 @@ func update_locations_visibility(): func _on_tracker_button_clicked(): + var ap = global.get_node("Archipelago") + var edited_item = tracker_tree.get_edited() var edited_index = edited_item.get_index() - if tracker_object_by_index.has(edited_index): - var tracker_object = tracker_object_by_index[edited_index] - var ap = global.get_node("Archipelago") - var type_str = "" - if tracker_object["type"] == kLocation: - type_str = "location" - elif tracker_object["type"] == kWorldport: - type_str = "worldport" - elif tracker_object["type"] == kGoal: - type_str = "goal" - ap.client.getLogicalPath(type_str, tracker_object.get("id", null)) + if edited_item.get_parent() == tracker_tree.get_root(): + if tracker_object_by_index.has(edited_index): + var tracker_object = tracker_object_by_index[edited_index] + if tracker_tree.get_edited_column() == 2: + var type_str = "" + if tracker_object["type"] == kLocation: + type_str = "location" + elif tracker_object["type"] == kWorldport: + type_str = "worldport" + elif tracker_object["type"] == kGoal: + type_str = "goal" + ap.client.getLogicalPath(type_str, tracker_object.get("id", null)) + elif tracker_tree.get_edited_column() == 3: + ap.toggle_ignored_location(tracker_object["id"]) + else: + # This is the ignored locations group. + if ( + tracker_object_by_ignored_index.has(edited_index) + and tracker_tree.get_edited_column() == 3 + ): + var tracker_object = tracker_object_by_ignored_index[edited_index] + ap.toggle_ignored_location(tracker_object["id"]) func display_logical_path(object_type, object_id, paths): @@ -435,4 +484,5 @@ func reset_tracker_tab(): tracker_port_tree_item_by_id.clear() tracker_goal_tree_item = null tracker_object_by_index.clear() + tracker_object_by_ignored_index.clear() tracker_tree.clear() -- cgit 1.4.1