about summary refs log tree commit diff stats
path: root/client/Archipelago
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago')
-rw-r--r--client/Archipelago/manager.gd1
-rw-r--r--client/Archipelago/minimap.gd175
-rw-r--r--client/Archipelago/player.gd7
-rw-r--r--client/Archipelago/settings_screen.gd3
-rw-r--r--client/Archipelago/textclient.gd1
5 files changed, 187 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..5640716 --- /dev/null +++ b/client/Archipelago/minimap.gd
@@ -0,0 +1,175 @@
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 cell_width
13var cell_height
14var center_x_min
15var center_x_max
16var center_y_min
17var center_y_max
18
19
20func _ready():
21 player = get_tree().get_root().get_node("scene/player")
22
23 var svc = PanelContainer.new()
24 svc.anchor_left = 1.0
25 svc.anchor_top = 1.0
26 svc.anchor_right = 1.0
27 svc.anchor_bottom = 1.0
28 svc.offset_left = -320.0
29 svc.offset_top = -320.0
30 svc.offset_right = -64.0
31 svc.offset_bottom = -64.0
32 svc.clip_contents = true
33 add_child(svc)
34
35 var background_color = Color.WHITE
36
37 var world_env = get_tree().get_root().get_node("scene/WorldEnvironment")
38 if world_env != null and world_env.environment != null:
39 if world_env.environment.background_mode == Environment.BG_COLOR:
40 background_color = world_env.environment.background_color
41 elif (
42 world_env.environment.background_mode == Environment.BG_SKY
43 and world_env.environment.sky != null
44 and world_env.environment.sky.sky_material != null
45 ):
46 var sky = world_env.environment.sky.sky_material
47 if sky is PhysicalSkyMaterial:
48 background_color = sky.ground_color
49 elif sky is ProceduralSkyMaterial:
50 background_color = sky.sky_top_color
51
52 var stylebox = StyleBoxFlat.new()
53 stylebox.bg_color = Color(background_color, 0.6)
54 svc.add_theme_stylebox_override("panel", stylebox)
55
56 drawer = Node2D.new()
57 svc.add_child(drawer)
58
59 var gridmap = get_tree().get_root().get_node("scene/GridMap")
60 if gridmap == null:
61 visible = false
62 return
63
64 cell_left = 0
65 cell_top = 0
66 cell_right = 0
67 cell_bottom = 0
68
69 for pos in gridmap.get_used_cells():
70 if pos.x < cell_left:
71 cell_left = pos.x
72 if pos.x > cell_right:
73 cell_right = pos.x
74 if pos.z < cell_top:
75 cell_top = pos.z
76 if pos.z > cell_bottom:
77 cell_bottom = pos.z
78
79 cell_width = cell_right - cell_left + 1
80 cell_height = cell_bottom - cell_top + 1
81
82 var rendered = _renderMap(gridmap)
83
84 var image_texture = ImageTexture.create_from_image(rendered)
85 sprite = Sprite2D.new()
86 sprite.texture = image_texture
87 sprite.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
88 sprite.scale = Vector2(2, 2)
89 sprite.centered = false
90 drawer.add_child(sprite)
91
92 label = Label.new()
93 label.theme = preload("res://assets/themes/baseUI.tres")
94 label.add_theme_font_size_override("font_size", 32)
95 label.text = "@"
96 drawer.add_child(label)
97
98 #var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top))
99 #var global_tl = gridmap.to_global(local_tl)
100 #var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom))
101 #var global_br = gridmap.to_global(local_br)
102
103 center_x_min = 0
104 center_x_max = cell_width - 128
105 center_y_min = 0
106 center_y_max = cell_height - 128
107
108 if center_x_max < center_x_min:
109 center_x_min = (center_x_min + center_x_max) / 2
110 center_x_max = center_x_min
111
112 if center_y_max < center_y_min:
113 center_y_min = (center_y_min + center_y_max) / 2
114 center_y_max = center_y_min
115
116
117func _process(_delta):
118 if visible == false:
119 return
120
121 drawer.position.x = clamp(player.position.x - cell_left - 64, center_x_min, center_x_max) * -2
122 drawer.position.y = clamp(player.position.z - cell_top - 64, center_y_min, center_y_max) * -2
123
124 label.position.x = (player.position.x - cell_left) * 2 - 16
125 label.position.y = (player.position.z - cell_top) * 2 - 16
126
127
128func _renderMap(gridmap):
129 var heights = {}
130
131 var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8)
132 rendered.fill(Color.TRANSPARENT)
133
134 var meshes_node = get_tree().get_root().get_node("scene/Meshes")
135 if meshes_node != null:
136 _renderMeshNode(gridmap, meshes_node, rendered)
137
138 for pos in gridmap.get_used_cells():
139 var in_plane = Vector2i(pos.x, pos.z)
140
141 if in_plane in heights and heights[in_plane] > pos.y:
142 continue
143
144 heights[in_plane] = pos.y
145
146 var cell_item = gridmap.get_cell_item(pos)
147 var mesh = gridmap.mesh_library.get_item_mesh(cell_item)
148 var material = mesh.surface_get_material(0)
149 var color = material.albedo_color
150
151 rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color)
152
153 return rendered
154
155
156func _renderMeshNode(gridmap, mesh, rendered):
157 if mesh is MeshInstance3D:
158 var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top))
159 var global_tl = gridmap.to_global(local_tl)
160 var mesh_material = mesh.get_surface_override_material(0)
161 if mesh_material != null:
162 var mesh_color = mesh_material.albedo_color
163
164 for y in range(
165 max(mesh.position.z - mesh.scale.z / 2 - global_tl.z, 0),
166 min(mesh.position.z + mesh.scale.z / 2 - global_tl.z, cell_height)
167 ):
168 for x in range(
169 max(mesh.position.x - mesh.scale.x / 2 - global_tl.x, 0),
170 min(mesh.position.x + mesh.scale.x / 2 - global_tl.x, cell_width)
171 ):
172 rendered.set_pixel(x, y, mesh_color)
173
174 for child in mesh.get_children():
175 _renderMeshNode(gridmap, child, rendered)
diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 538830f..e58f1bc 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd
@@ -24,6 +24,9 @@ var compass
24func _ready(): 24func _ready():
25 var khl_script = load("res://scripts/nodes/keyHolderListener.gd") 25 var khl_script = load("res://scripts/nodes/keyHolderListener.gd")
26 26
27 var pause_menu = get_node("pause_menu")
28 pause_menu.layer = 3
29
27 var ap = global.get_node("Archipelago") 30 var ap = global.get_node("Archipelago")
28 var gamedata = global.get_node("Gamedata") 31 var gamedata = global.get_node("Gamedata")
29 32
@@ -333,6 +336,10 @@ func _ready():
333 entry1.get_parent().add_child.call_deferred(entry12) 336 entry1.get_parent().add_child.call_deferred(entry12)
334 entry1.queue_free() 337 entry1.queue_free()
335 338
339 var minimap = ap.SCRIPT_minimap.new()
340 minimap.name = "Minimap"
341 get_parent().add_child.call_deferred(minimap)
342
336 super._ready() 343 super._ready()
337 344
338 await get_tree().process_frame 345 await get_tree().process_frame
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index b29fb19..d5aa747 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd
@@ -16,6 +16,8 @@ func _ready():
16 # data packages. 16 # data packages.
17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192) 17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192)
18 18
19 switcher.layer = 4
20
19 # Create the global AP manager, if it doesn't already exist. 21 # Create the global AP manager, if it doesn't already exist.
20 if not global.has_node("Archipelago"): 22 if not global.has_node("Archipelago"):
21 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd") 23 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd")
@@ -25,6 +27,7 @@ func _ready():
25 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") 27 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd")
26 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") 28 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd")
27 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") 29 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd")
30 ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd")
28 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") 31 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd")
29 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") 32 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd")
30 33
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")