about summary refs log tree commit diff stats
path: root/client/Archipelago
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-23 20:16:05 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-23 20:16:05 -0400
commitfb220e1c75e72a536c19aa1283f905850a91cf44 (patch)
tree9fbb252b32d477b2aa50736d440e84d841ec73c5 /client/Archipelago
parentbb78594a6493338ec6e81fabe5ee2417f6b72284 (diff)
downloadlingo2-archipelago-fb220e1c75e72a536c19aa1283f905850a91cf44.tar.gz
lingo2-archipelago-fb220e1c75e72a536c19aa1283f905850a91cf44.tar.bz2
lingo2-archipelago-fb220e1c75e72a536c19aa1283f905850a91cf44.zip
[Client] Render meshes on minimap minimap
Diffstat (limited to 'client/Archipelago')
-rw-r--r--client/Archipelago/minimap.gd84
1 files changed, 59 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
9var cell_top 9var cell_top
10var cell_right 10var cell_right
11var cell_bottom 11var cell_bottom
12var cell_width
13var cell_height
12var center_x_min 14var center_x_min
13var center_x_max 15var center_x_max
14var center_y_min 16var 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
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)