From 7ee253c666bb224c6f7e943b3bff28d2d6d61319 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 1 Sep 2025 10:22:03 -0400 Subject: [Client] Handle triggering goal --- client/Archipelago/client.gd | 4 ++-- client/Archipelago/manager.gd | 8 +++++++- client/Archipelago/player.gd | 23 +++++++++++++++++++++++ client/Archipelago/settings_screen.gd | 1 + client/Archipelago/victoryListener.gd | 18 ++++++++++++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 client/Archipelago/victoryListener.gd (limited to 'client') diff --git a/client/Archipelago/client.gd b/client/Archipelago/client.gd index 7b690f5..f0f36d7 100644 --- a/client/Archipelago/client.gd +++ b/client/Archipelago/client.gd @@ -37,7 +37,7 @@ var _slot_data = {} signal could_not_connect signal connect_status -signal client_connected +signal client_connected(slot_data) signal item_received(item_id, index, player, flags) signal message_received(message) @@ -183,7 +183,7 @@ func _process(_delta): player["slot"] )]["game"] - emit_signal("client_connected") + emit_signal("client_connected", _slot_data) elif cmd == "ConnectionRefused": var error_message = "" diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index f83d0cc..97c556a 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -5,6 +5,7 @@ const my_version = "0.1.0" var SCRIPT_client var SCRIPT_locationListener var SCRIPT_uuid +var SCRIPT_victoryListener var ap_server = "" var ap_user = "" @@ -19,6 +20,8 @@ var _last_new_item = -1 var _batch_locations = false var _held_locations = [] +var victory_condition = -1 + signal could_not_connect signal connect_status signal ap_connected @@ -267,7 +270,7 @@ func _client_connect_status(message): emit_signal("connect_status", message) -func _client_connected(): +func _client_connected(slot_data): _localdata_file = "user://archipelago_data/%s_%d" % [client._seed, client._slot] _last_new_item = -1 @@ -285,6 +288,9 @@ func _client_connected(): if localdata.size() > 0: _last_new_item = localdata[0] + if slot_data.has("victory_condition"): + victory_condition = int(slot_data["victory_condition"]) + emit_signal("ap_connected") diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index b23553c..7a1f5db 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd @@ -1,5 +1,21 @@ extends "res://scripts/nodes/player.gd" +const kEndingNameByVictoryValue = { + 0: "GRAY", + 1: "PURPLE", + 2: "MINT", + 3: "BLACK", + 4: "BLUE", + 5: "CYAN", + 6: "RED", + 7: "PLUM", + 8: "ORANGE", + 9: "GOLD", + 10: "YELLOW", + 11: "GREEN", + 12: "WHITE", +} + func _ready(): var khl_script = load("res://scripts/nodes/keyHolderListener.gd") @@ -91,6 +107,13 @@ func _ready(): get_parent().add_child.call_deferred(locationListener) + if kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name(): + var victoryListener = ap.SCRIPT_victoryListener.new() + victoryListener.name = "victoryListener" + victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path())) + + get_parent().add_child.call_deferred(victoryListener) + # Block off roof access in Daedalus. if global.map == "daedalus": _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 3697466..624b1eb 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -32,6 +32,7 @@ func _ready(): ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") + ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") global.add_child(ap_instance) diff --git a/client/Archipelago/victoryListener.gd b/client/Archipelago/victoryListener.gd new file mode 100644 index 0000000..4b85d3a --- /dev/null +++ b/client/Archipelago/victoryListener.gd @@ -0,0 +1,18 @@ +extends Receiver + + +func _ready(): + super._ready() + + +func handleTriggered(): + triggered += 1 + if triggered >= total: + var ap = global.get_node("Archipelago") + ap.client.completedGoal() + + +func handleUntriggered(): + triggered -= 1 + if triggered < total: + pass -- cgit 1.4.1