From 7c804908bc085c8b21b598c784b33636909f0e87 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 19 Sep 2025 13:51:30 -0400 Subject: [Client] Added compass --- client/Archipelago/compass.gd | 66 +++++++++++++++++++++++++++++++++++ client/Archipelago/compass_overlay.gd | 17 +++++++++ client/Archipelago/manager.gd | 5 +++ client/Archipelago/pauseMenu.gd | 31 ++++++++++++++++ client/Archipelago/player.gd | 9 +++++ client/Archipelago/settings_screen.gd | 6 ++++ 6 files changed, 134 insertions(+) create mode 100644 client/Archipelago/compass.gd create mode 100644 client/Archipelago/compass_overlay.gd (limited to 'client') diff --git a/client/Archipelago/compass.gd b/client/Archipelago/compass.gd new file mode 100644 index 0000000..c90475a --- /dev/null +++ b/client/Archipelago/compass.gd @@ -0,0 +1,66 @@ +extends Node2D + +const RADIUS = 48 + +var _font + + +func _ready(): + _font = load("res://assets/fonts/Lingo2.ttf") + + +func _draw(): + draw_circle(Vector2.ZERO, RADIUS, Color(1.0, 1.0, 1.0, 0.8), true) + draw_circle(Vector2.ZERO, RADIUS, Color.BLACK, false) + draw_string( + _font, + Vector2(-4, -RADIUS * 3.0 / 4.0), + "N", + HorizontalAlignment.HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + Color.BLACK + ) + draw_set_transform(Vector2.ZERO, PI / 2) + draw_string( + _font, + Vector2(-4, -RADIUS * 3.0 / 4.0), + "E", + HorizontalAlignment.HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + Color.BLACK + ) + draw_set_transform(Vector2.ZERO, PI) + draw_string( + _font, + Vector2(-4, -RADIUS * 3.0 / 4.0), + "S", + HorizontalAlignment.HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + Color.BLACK + ) + draw_set_transform(Vector2.ZERO, PI * 3.0 / 2.0) + draw_string( + _font, + Vector2(-4, -RADIUS * 3.0 / 4.0), + "W", + HorizontalAlignment.HORIZONTAL_ALIGNMENT_LEFT, + -1, + 16, + Color.BLACK + ) + draw_set_transform(Vector2.ZERO) + draw_colored_polygon( + PackedVector2Array( + [Vector2(0, -RADIUS * 5.0 / 8.0), Vector2(-RADIUS / 6.0, 0), Vector2(RADIUS / 6.0, 0)] + ), + Color.RED + ) + draw_colored_polygon( + PackedVector2Array( + [Vector2(0, RADIUS * 5.0 / 8.0), Vector2(-RADIUS / 6.0, 0), Vector2(RADIUS / 6.0, 0)] + ), + Color.GRAY + ) diff --git a/client/Archipelago/compass_overlay.gd b/client/Archipelago/compass_overlay.gd new file mode 100644 index 0000000..56e81ff --- /dev/null +++ b/client/Archipelago/compass_overlay.gd @@ -0,0 +1,17 @@ +extends CanvasLayer + +var SCRIPT_compass + +var compass + + +func _ready(): + compass = SCRIPT_compass.new() + compass.position = Vector2(1840, 80) + add_child(compass) + + visible = false + + +func update_rotation(ry): + compass.rotation = ry diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index e46e4f3..a585167 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -12,6 +12,7 @@ var ap_server = "" var ap_user = "" var ap_pass = "" var connection_history = [] +var show_compass = false var client var keyboard @@ -82,6 +83,9 @@ func _init(): if data.size() > 3: connection_history = data[3] + if data.size() > 4: + show_compass = data[4] + func _ready(): client = SCRIPT_client.new() @@ -110,6 +114,7 @@ func saveSettings(): ap_user, ap_pass, connection_history, + show_compass, ] file.store_var(data, true) file.close() diff --git a/client/Archipelago/pauseMenu.gd b/client/Archipelago/pauseMenu.gd index df4bfd1..cd1813c 100644 --- a/client/Archipelago/pauseMenu.gd +++ b/client/Archipelago/pauseMenu.gd @@ -1,5 +1,26 @@ extends "res://scripts/ui/pauseMenu.gd" +var compass_button + + +func _ready(): + var ap_panel = Panel.new() + ap_panel.name = "Archipelago" + get_node("menu/settings/settingsInner/TabContainer").add_child(ap_panel) + + var ap = global.get_node("Archipelago") + + compass_button = CheckBox.new() + compass_button.text = "show compass" + compass_button.button_pressed = ap.show_compass + compass_button.position = Vector2(65, 100) + compass_button.theme = preload("res://assets/themes/baseUI.tres") + compass_button.add_theme_font_size_override("font_size", 60) + compass_button.pressed.connect(_toggle_compass) + ap_panel.add_child(compass_button) + + super._ready() + func _pause_game(): global.get_node("Textclient").dismiss() @@ -10,4 +31,14 @@ func _main_menu(): global.loaded = false global.get_node("Archipelago").disconnect_from_ap() global.get_node("Messages").clear() + global.get_node("Compass").visible = false super._main_menu() + + +func _toggle_compass(): + var ap = global.get_node("Archipelago") + ap.show_compass = compass_button.button_pressed + ap.saveSettings() + + var compass = global.get_node("Compass") + compass.visible = compass_button.button_pressed diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 583d5d6..538830f 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd @@ -18,6 +18,8 @@ const kEndingNameByVictoryValue = { signal evaluate_solvability +var compass + func _ready(): var khl_script = load("res://scripts/nodes/keyHolderListener.gd") @@ -25,6 +27,9 @@ func _ready(): var ap = global.get_node("Archipelago") var gamedata = global.get_node("Gamedata") + compass = global.get_node("Compass") + compass.visible = ap.show_compass + ap.start_batching_locations() # Set up door locations. @@ -351,3 +356,7 @@ func _set_up_invis_wall(x, y, z, sx, sy, sz): newwall.visibility_range_fade_mode = RenderingServer.VISIBILITY_RANGE_FADE_SELF newwall.skeleton = ".." get_parent().add_child.call_deferred(newwall) + + +func _process(_dt): + compass.update_rotation(global_rotation.y) diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 140b4f4..b7bfacf 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -69,6 +69,12 @@ func _ready(): textclient_instance.name = "Textclient" global.add_child(textclient_instance) + var compass_overlay_script = load("user://maps/Archipelago/compass_overlay.gd") + var compass_overlay_instance = compass_overlay_script.new() + compass_overlay_instance.name = "Compass" + compass_overlay_instance.SCRIPT_compass = load("user://maps/Archipelago/compass.gd") + global.add_child(compass_overlay_instance) + var ap = global.get_node("Archipelago") var gamedata = global.get_node("Gamedata") ap.connect("ap_connected", connectionSuccessful) -- cgit 1.4.1