about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--client/Archipelago/manager.gd1
-rw-r--r--client/Archipelago/minimap.gd141
-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, 148 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..4fb1214 --- /dev/null +++ b/client/Archipelago/minimap.gd
@@ -0,0 +1,141 @@
1extends CanvasLayer
2
3var player
4var drawer
5var sprite
6var label
7
8var cell_left
9var cell_top
10var cell_right
11var cell_bottom
12var center_x_min
13var center_x_max
14var center_y_min
15var center_y_max
16
17
18func _ready():
19 player = get_tree().get_root().get_node("scene/player")
20
21 var svc = PanelContainer.new()
22 svc.anchor_left = 1.0
23 svc.anchor_top = 1.0
24 svc.anchor_right = 1.0
25 svc.anchor_bottom = 1.0
26 svc.offset_left = -320.0
27 svc.offset_top = -320.0
28 svc.offset_right = -64.0
29 svc.offset_bottom = -64.0
30 svc.clip_contents = true
31 add_child(svc)
32
33 var background_color = Color.WHITE
34
35 var world_env = get_tree().get_root().get_node("scene/WorldEnvironment")
36 if world_env != null and world_env.environment != null:
37 if world_env.environment.background_mode == Environment.BG_COLOR:
38 background_color = world_env.environment.background_color
39 elif (
40 world_env.environment.background_mode == Environment.BG_SKY
41 and world_env.environment.sky != null
42 and world_env.environment.sky.sky_material != null
43 ):
44 var sky = world_env.environment.sky.sky_material
45 if sky is PhysicalSkyMaterial:
46 background_color = sky.ground_color
47 elif sky is ProceduralSkyMaterial:
48 background_color = sky.sky_top_color
49
50 var stylebox = StyleBoxFlat.new()
51 stylebox.bg_color = Color(background_color, 0.6)
52 svc.add_theme_stylebox_override("panel", stylebox)
53
54 drawer = Node2D.new()
55 svc.add_child(drawer)
56
57 var gridmap = get_tree().get_root().get_node("scene/GridMap")
58 if gridmap == null:
59 visible = false
60 return
61
62 cell_left = 0
63 cell_top = 0
64 cell_right = 0
65 cell_bottom = 0
66
67 for pos in gridmap.get_used_cells():
68 if pos.x < cell_left:
69 cell_left = pos.x
70 if pos.x > cell_right:
71 cell_right = pos.x
72 if pos.z < cell_top:
73 cell_top = pos.z
74 if pos.z > cell_bottom:
75 cell_bottom = pos.z
76
77 var cell_width = cell_right - cell_left + 1
78 var cell_height = cell_bottom - cell_top + 1
79
80 var heights = {}
81
82 var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8)
83 rendered.fill(Color.TRANSPARENT)
84
85 for pos in gridmap.get_used_cells():
86 var in_plane = Vector2i(pos.x, pos.z)
87
88 if in_plane in heights and heights[in_plane] > pos.y:
89 continue
90
91 heights[in_plane] = pos.y
92
93 var cell_item = gridmap.get_cell_item(pos)
94 var mesh = gridmap.mesh_library.get_item_mesh(cell_item)
95 var material = mesh.surface_get_material(0)
96 var color = material.albedo_color
97
98 rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color)
99
100 var image_texture = ImageTexture.create_from_image(rendered)
101 sprite = Sprite2D.new()
102 sprite.texture = image_texture
103 sprite.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
104 sprite.scale = Vector2(2, 2)
105 sprite.centered = false
106 drawer.add_child(sprite)
107
108 label = Label.new()
109 label.theme = preload("res://assets/themes/baseUI.tres")
110 label.add_theme_font_size_override("font_size", 32)
111 label.text = "@"
112 drawer.add_child(label)
113
114 var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top))
115 var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom))
116 var global_tl = gridmap.to_global(local_tl)
117 var global_br = gridmap.to_global(local_br)
118
119 center_x_min = 0
120 center_x_max = cell_width - 128
121 center_y_min = 0
122 center_y_max = cell_height - 128
123
124 if center_x_max < center_x_min:
125 center_x_min = (center_x_min + center_x_max) / 2
126 center_x_max = center_x_min
127
128 if center_y_max < center_y_min:
129 center_y_min = (center_y_min + center_y_max) / 2
130 center_y_max = center_y_min
131
132
133func _process(_delta):
134 if visible == false:
135 return
136
137 drawer.position.x = clamp(player.position.x - cell_left - 64, center_x_min, center_x_max) * -2
138 drawer.position.y = clamp(player.position.z - cell_top - 64, center_y_min, center_y_max) * -2
139
140 label.position.x = (player.position.x - cell_left) * 2 - 16
141 label.position.y = (player.position.z - cell_top) * 2 - 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")