From a54edd2c0a2fc3ca851e14be96068909a56a42df Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 31 Aug 2025 19:24:11 -0400 Subject: [Client] Batch sending locations on map load --- client/Archipelago/client.gd | 4 ++++ client/Archipelago/manager.gd | 17 ++++++++++++++++- client/Archipelago/player.gd | 7 +++++++ 3 files changed, 27 insertions(+), 1 deletion(-) (limited to 'client') diff --git a/client/Archipelago/client.gd b/client/Archipelago/client.gd index 4c34e91..7b690f5 100644 --- a/client/Archipelago/client.gd +++ b/client/Archipelago/client.gd @@ -353,6 +353,10 @@ func sendLocation(loc_id): sendMessage([{"cmd": "LocationChecks", "locations": [loc_id]}]) +func sendLocations(loc_ids): + sendMessage([{"cmd": "LocationChecks", "locations": loc_ids}]) + + func setValue(key, value, operation = "replace"): sendMessage( [ diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 60b447a..f83d0cc 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -16,6 +16,8 @@ var client var _localdata_file = "" var _received_indexes = [] var _last_new_item = -1 +var _batch_locations = false +var _held_locations = [] signal could_not_connect signal connect_status @@ -286,8 +288,21 @@ func _client_connected(): emit_signal("ap_connected") +func start_batching_locations(): + _batch_locations = true + + func send_location(loc_id): - client.sendLocation(loc_id) + if _batch_locations: + _held_locations.append(loc_id) + else: + client.sendLocation(loc_id) + + +func stop_batching_locations(): + _batch_locations = false + client.sendLocations(_held_locations) + _held_locations.clear() func colorForItemType(flags): diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index f6b2539..b23553c 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd @@ -7,6 +7,8 @@ func _ready(): var ap = global.get_node("Archipelago") var gamedata = global.get_node("Gamedata") + ap.start_batching_locations() + # Set up door locations. var map_id = gamedata.map_id_by_name.get(global.map) for door in gamedata.objects.get_doors(): @@ -124,6 +126,11 @@ func _ready(): super._ready() + await get_tree().process_frame + await get_tree().process_frame + + ap.stop_batching_locations() + func _set_up_invis_wall(x, y, z, sx, sy, sz): var prefab = preload("res://objects/nodes/block.tscn") -- cgit 1.4.1