diff options
-rw-r--r-- | client/Archipelago/minimap.gd | 84 | ||||
-rw-r--r-- | client/Archipelago/player.gd | 3 | ||||
-rw-r--r-- | client/Archipelago/settings_screen.gd | 2 |
3 files changed, 64 insertions, 25 deletions
diff --git a/client/Archipelago/minimap.gd b/client/Archipelago/minimap.gd index 4fb1214..5640716 100644 --- a/client/Archipelago/minimap.gd +++ b/client/Archipelago/minimap.gd | |||
@@ -9,6 +9,8 @@ var cell_left | |||
9 | var cell_top | 9 | var cell_top |
10 | var cell_right | 10 | var cell_right |
11 | var cell_bottom | 11 | var cell_bottom |
12 | var cell_width | ||
13 | var cell_height | ||
12 | var center_x_min | 14 | var center_x_min |
13 | var center_x_max | 15 | var center_x_max |
14 | var center_y_min | 16 | var center_y_min |
@@ -74,28 +76,10 @@ func _ready(): | |||
74 | if pos.z > cell_bottom: | 76 | if pos.z > cell_bottom: |
75 | cell_bottom = pos.z | 77 | cell_bottom = pos.z |
76 | 78 | ||
77 | var cell_width = cell_right - cell_left + 1 | 79 | cell_width = cell_right - cell_left + 1 |
78 | var cell_height = cell_bottom - cell_top + 1 | 80 | cell_height = cell_bottom - cell_top + 1 |
79 | 81 | ||
80 | var heights = {} | 82 | var rendered = _renderMap(gridmap) |
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 | 83 | ||
100 | var image_texture = ImageTexture.create_from_image(rendered) | 84 | var image_texture = ImageTexture.create_from_image(rendered) |
101 | sprite = Sprite2D.new() | 85 | sprite = Sprite2D.new() |
@@ -111,10 +95,10 @@ func _ready(): | |||
111 | label.text = "@" | 95 | label.text = "@" |
112 | drawer.add_child(label) | 96 | drawer.add_child(label) |
113 | 97 | ||
114 | var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) | 98 | #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)) | 99 | #var global_tl = gridmap.to_global(local_tl) |
116 | var global_tl = gridmap.to_global(local_tl) | 100 | #var local_br = gridmap.map_to_local(Vector3i(cell_right, 0, cell_bottom)) |
117 | var global_br = gridmap.to_global(local_br) | 101 | #var global_br = gridmap.to_global(local_br) |
118 | 102 | ||
119 | center_x_min = 0 | 103 | center_x_min = 0 |
120 | center_x_max = cell_width - 128 | 104 | center_x_max = cell_width - 128 |
@@ -139,3 +123,53 @@ func _process(_delta): | |||
139 | 123 | ||
140 | label.position.x = (player.position.x - cell_left) * 2 - 16 | 124 | label.position.x = (player.position.x - cell_left) * 2 - 16 |
141 | label.position.y = (player.position.z - cell_top) * 2 - 16 | 125 | label.position.y = (player.position.z - cell_top) * 2 - 16 |
126 | |||
127 | |||
128 | func _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 | |||
156 | func _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 2d310c1..e58f1bc 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd | |||
@@ -24,6 +24,9 @@ var compass | |||
24 | func _ready(): | 24 | func _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 | ||
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 15ffe16..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") |