about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-22 22:13:39 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-22 22:13:39 -0400
commitb78c93122f856940f7492e3dbc7dc5fbb798e14b (patch)
tree410b0a9725599762731925717fbd8406103c9b01
parentcf0e12627cf22d0c5755f2cfb841c6a33aaf5016 (diff)
downloadlingo2-archipelago-minimap.tar.gz
lingo2-archipelago-minimap.tar.bz2
lingo2-archipelago-minimap.zip
[Client] Camera version of minimap minimap
-rw-r--r--client/Archipelago/manager.gd1
-rw-r--r--client/Archipelago/minimap.gd93
-rw-r--r--client/Archipelago/player.gd4
-rw-r--r--client/Archipelago/settings_screen.gd1
-rw-r--r--client/Archipelago/textclient.gd1
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
5var SCRIPT_client 5var SCRIPT_client
6var SCRIPT_keyboard 6var SCRIPT_keyboard
7var SCRIPT_locationListener 7var SCRIPT_locationListener
8var SCRIPT_minimap
8var SCRIPT_uuid 9var SCRIPT_uuid
9var SCRIPT_victoryListener 10var 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 @@
1extends CanvasLayer
2
3var player
4var camera
5var label
6var map_bounds = null
7
8
9func _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
84func _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
9func _ready(): 9func _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")