diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-22 22:13:39 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-22 22:13:39 -0400 |
| commit | b78c93122f856940f7492e3dbc7dc5fbb798e14b (patch) | |
| tree | 410b0a9725599762731925717fbd8406103c9b01 /client | |
| parent | cf0e12627cf22d0c5755f2cfb841c6a33aaf5016 (diff) | |
| download | lingo2-archipelago-b78c93122f856940f7492e3dbc7dc5fbb798e14b.tar.gz lingo2-archipelago-b78c93122f856940f7492e3dbc7dc5fbb798e14b.tar.bz2 lingo2-archipelago-b78c93122f856940f7492e3dbc7dc5fbb798e14b.zip | |
[Client] Camera version of minimap
Diffstat (limited to 'client')
| -rw-r--r-- | client/Archipelago/manager.gd | 1 | ||||
| -rw-r--r-- | client/Archipelago/minimap.gd | 93 | ||||
| -rw-r--r-- | client/Archipelago/player.gd | 4 | ||||
| -rw-r--r-- | client/Archipelago/settings_screen.gd | 1 | ||||
| -rw-r--r-- | client/Archipelago/textclient.gd | 1 |
5 files changed, 100 insertions, 0 deletions
| 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 | |||
| 5 | var SCRIPT_client | 5 | var SCRIPT_client |
| 6 | var SCRIPT_keyboard | 6 | var SCRIPT_keyboard |
| 7 | var SCRIPT_locationListener | 7 | var SCRIPT_locationListener |
| 8 | var SCRIPT_minimap | ||
| 8 | var SCRIPT_uuid | 9 | var SCRIPT_uuid |
| 9 | var SCRIPT_victoryListener | 10 | var SCRIPT_victoryListener |
| 10 | 11 | ||
| 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 @@ | |||
| 1 | extends CanvasLayer | ||
| 2 | |||
| 3 | var player | ||
| 4 | var camera | ||
| 5 | var label | ||
| 6 | var map_bounds = null | ||
| 7 | |||
| 8 | |||
| 9 | func _ready(): | ||
| 10 | player = get_tree().get_root().get_node("scene/player") | ||
| 11 | |||
| 12 | var svc = SubViewportContainer.new() | ||
| 13 | svc.anchor_left = 1.0 | ||
| 14 | svc.anchor_top = 1.0 | ||
| 15 | svc.anchor_right = 1.0 | ||
| 16 | svc.anchor_bottom = 1.0 | ||
| 17 | svc.offset_left = -320.0 | ||
| 18 | svc.offset_top = -320.0 | ||
| 19 | svc.offset_right = -64.0 | ||
| 20 | svc.offset_bottom = -64.0 | ||
| 21 | add_child(svc) | ||
| 22 | |||
| 23 | var sv = SubViewport.new() | ||
| 24 | sv.size = Vector2i(256, 256) | ||
| 25 | svc.add_child(sv) | ||
| 26 | |||
| 27 | camera = Camera3D.new() | ||
| 28 | camera.position.y = 5 | ||
| 29 | camera.rotation_degrees.x = -90 | ||
| 30 | camera.projection = Camera3D.PROJECTION_ORTHOGONAL | ||
| 31 | camera.size = 128.0 | ||
| 32 | camera.far = 10 | ||
| 33 | sv.add_child(camera) | ||
| 34 | |||
| 35 | label = Label.new() | ||
| 36 | label.theme = preload("res://assets/themes/baseUI.tres") | ||
| 37 | label.add_theme_font_size_override("font_size", 32) | ||
| 38 | label.text = "@" | ||
| 39 | add_child(label) | ||
| 40 | |||
| 41 | var gridmap = get_tree().get_root().get_node("scene/GridMap") | ||
| 42 | if gridmap != null: | ||
| 43 | var cell_left = 0 | ||
| 44 | var cell_top = 0 | ||
| 45 | var cell_right = 0 | ||
| 46 | var cell_bottom = 0 | ||
| 47 | |||
| 48 | for pos in gridmap.get_used_cells(): | ||
| 49 | if pos.x < cell_left: | ||
| 50 | cell_left = pos.x | ||
| 51 | if pos.x > cell_right: | ||
| 52 | cell_right = pos.x | ||
| 53 | if pos.z < cell_top: | ||
| 54 | cell_top = pos.z | ||
| 55 | if pos.z > cell_bottom: | ||
| 56 | cell_bottom = pos.z | ||
| 57 | |||
| 58 | var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) | ||
| 59 | var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom)) | ||
| 60 | var global_tl = gridmap.to_global(local_tl) | ||
| 61 | var global_br = gridmap.to_global(local_br) | ||
| 62 | map_bounds = [ | ||
| 63 | min(global_tl.x, global_br.x) + 64, | ||
| 64 | max(global_tl.x, global_br.x) - 64, | ||
| 65 | min(global_tl.z, global_br.z) + 64, | ||
| 66 | max(global_tl.z, global_br.z) - 64 | ||
| 67 | ] | ||
| 68 | |||
| 69 | if map_bounds[1] < map_bounds[0]: | ||
| 70 | map_bounds[0] = (map_bounds[0] + map_bounds[1]) / 2 | ||
| 71 | map_bounds[1] = map_bounds[0] | ||
| 72 | |||
| 73 | if map_bounds[3] < map_bounds[2]: | ||
| 74 | map_bounds[2] = (map_bounds[2] + map_bounds[3]) / 2 | ||
| 75 | map_bounds[3] = map_bounds[2] | ||
| 76 | |||
| 77 | if map_bounds == null: | ||
| 78 | label.position.x = 1712.0 | ||
| 79 | label.position.y = 872.0 | ||
| 80 | #label.offset_right = 1743.0 | ||
| 81 | #label.offset_bottom = 907.0 | ||
| 82 | |||
| 83 | |||
| 84 | func _process(_delta): | ||
| 85 | if map_bounds == null: | ||
| 86 | camera.position.x = player.position.x | ||
| 87 | camera.position.z = player.position.z | ||
| 88 | else: | ||
| 89 | camera.position.x = clamp(player.position.x, map_bounds[0], map_bounds[1]) | ||
| 90 | camera.position.z = clamp(player.position.z, map_bounds[2], map_bounds[3]) | ||
| 91 | |||
| 92 | label.position.x = 1600 + (player.position.x - camera.position.x) * 2 + 128 - 16 | ||
| 93 | 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(): | |||
| 333 | entry1.get_parent().add_child.call_deferred(entry12) | 333 | entry1.get_parent().add_child.call_deferred(entry12) |
| 334 | entry1.queue_free() | 334 | entry1.queue_free() |
| 335 | 335 | ||
| 336 | var minimap = ap.SCRIPT_minimap.new() | ||
| 337 | minimap.name = "Minimap" | ||
| 338 | get_parent().add_child.call_deferred(minimap) | ||
| 339 | |||
| 336 | super._ready() | 340 | super._ready() |
| 337 | 341 | ||
| 338 | await get_tree().process_frame | 342 | 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(): | |||
| 25 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") | 25 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") |
| 26 | ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") | 26 | ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") |
| 27 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") | 27 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") |
| 28 | ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd") | ||
| 28 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") | 29 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") |
| 29 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") | 30 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") |
| 30 | 31 | ||
| 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 | |||
| 8 | 8 | ||
| 9 | func _ready(): | 9 | func _ready(): |
| 10 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS | 10 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS |
| 11 | layer = 2 | ||
| 11 | 12 | ||
| 12 | panel = Panel.new() | 13 | panel = Panel.new() |
| 13 | panel.set_name("Panel") | 14 | panel.set_name("Panel") |
