From b78c93122f856940f7492e3dbc7dc5fbb798e14b Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 22 Sep 2025 22:13:39 -0400 Subject: [Client] Camera version of minimap --- client/Archipelago/manager.gd | 1 + client/Archipelago/minimap.gd | 93 +++++++++++++++++++++++++++++++++++ client/Archipelago/player.gd | 4 ++ client/Archipelago/settings_screen.gd | 1 + client/Archipelago/textclient.gd | 1 + 5 files changed, 100 insertions(+) create mode 100644 client/Archipelago/minimap.gd diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 608a106..b170c77 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -5,6 +5,7 @@ const MOD_VERSION = 7 var SCRIPT_client var SCRIPT_keyboard var SCRIPT_locationListener +var SCRIPT_minimap var SCRIPT_uuid var SCRIPT_victoryListener diff --git a/client/Archipelago/minimap.gd b/client/Archipelago/minimap.gd new file mode 100644 index 0000000..2702bb1 --- /dev/null +++ b/client/Archipelago/minimap.gd @@ -0,0 +1,93 @@ +extends CanvasLayer + +var player +var camera +var label +var map_bounds = null + + +func _ready(): + player = get_tree().get_root().get_node("scene/player") + + var svc = SubViewportContainer.new() + svc.anchor_left = 1.0 + svc.anchor_top = 1.0 + svc.anchor_right = 1.0 + svc.anchor_bottom = 1.0 + svc.offset_left = -320.0 + svc.offset_top = -320.0 + svc.offset_right = -64.0 + svc.offset_bottom = -64.0 + add_child(svc) + + var sv = SubViewport.new() + sv.size = Vector2i(256, 256) + svc.add_child(sv) + + camera = Camera3D.new() + camera.position.y = 5 + camera.rotation_degrees.x = -90 + camera.projection = Camera3D.PROJECTION_ORTHOGONAL + camera.size = 128.0 + camera.far = 10 + sv.add_child(camera) + + label = Label.new() + label.theme = preload("res://assets/themes/baseUI.tres") + label.add_theme_font_size_override("font_size", 32) + label.text = "@" + add_child(label) + + var gridmap = get_tree().get_root().get_node("scene/GridMap") + if gridmap != null: + var cell_left = 0 + var cell_top = 0 + var cell_right = 0 + var cell_bottom = 0 + + for pos in gridmap.get_used_cells(): + if pos.x < cell_left: + cell_left = pos.x + if pos.x > cell_right: + cell_right = pos.x + if pos.z < cell_top: + cell_top = pos.z + if pos.z > cell_bottom: + cell_bottom = pos.z + + var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) + var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom)) + var global_tl = gridmap.to_global(local_tl) + var global_br = gridmap.to_global(local_br) + map_bounds = [ + min(global_tl.x, global_br.x) + 64, + max(global_tl.x, global_br.x) - 64, + min(global_tl.z, global_br.z) + 64, + max(global_tl.z, global_br.z) - 64 + ] + + if map_bounds[1] < map_bounds[0]: + map_bounds[0] = (map_bounds[0] + map_bounds[1]) / 2 + map_bounds[1] = map_bounds[0] + + if map_bounds[3] < map_bounds[2]: + map_bounds[2] = (map_bounds[2] + map_bounds[3]) / 2 + map_bounds[3] = map_bounds[2] + + if map_bounds == null: + label.position.x = 1712.0 + label.position.y = 872.0 + #label.offset_right = 1743.0 + #label.offset_bottom = 907.0 + + +func _process(_delta): + if map_bounds == null: + camera.position.x = player.position.x + camera.position.z = player.position.z + else: + camera.position.x = clamp(player.position.x, map_bounds[0], map_bounds[1]) + camera.position.z = clamp(player.position.z, map_bounds[2], map_bounds[3]) + + label.position.x = 1600 + (player.position.x - camera.position.x) * 2 + 128 - 16 + label.position.y = 760 + (player.position.z - camera.position.z) * 2 + 128 - 16 diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 538830f..2d310c1 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd @@ -333,6 +333,10 @@ func _ready(): entry1.get_parent().add_child.call_deferred(entry12) entry1.queue_free() + var minimap = ap.SCRIPT_minimap.new() + minimap.name = "Minimap" + get_parent().add_child.call_deferred(minimap) + super._ready() await get_tree().process_frame diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index b29fb19..15ffe16 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -25,6 +25,7 @@ func _ready(): ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") + ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd") ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") diff --git a/client/Archipelago/textclient.gd b/client/Archipelago/textclient.gd index 5e648f2..26831b4 100644 --- a/client/Archipelago/textclient.gd +++ b/client/Archipelago/textclient.gd @@ -8,6 +8,7 @@ var is_open = false func _ready(): process_mode = ProcessMode.PROCESS_MODE_ALWAYS + layer = 2 panel = Panel.new() panel.set_name("Panel") -- cgit 1.4.1