diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-10-07 18:24:54 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-10-07 18:24:54 -0400 |
commit | 1ea81f593eda16e9ae93731041a9b7c7f77f8d8b (patch) | |
tree | 149f798f54667d3136d321a7a72573b0ed8eca29 /apworld/client | |
parent | 01c5e5bb28cb751b6c493c4f03b29b2a74b450ad (diff) | |
download | lingo2-archipelago-1ea81f593eda16e9ae93731041a9b7c7f77f8d8b.tar.gz lingo2-archipelago-1ea81f593eda16e9ae93731041a9b7c7f77f8d8b.tar.bz2 lingo2-archipelago-1ea81f593eda16e9ae93731041a9b7c7f77f8d8b.zip |
Fix minimap colors when using a texture pack
Diffstat (limited to 'apworld/client')
-rw-r--r-- | apworld/client/manager.gd | 16 | ||||
-rw-r--r-- | apworld/client/minimap.gd | 13 |
2 files changed, 24 insertions, 5 deletions
diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 4f5018f..dac09b2 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
@@ -75,6 +75,8 @@ var strict_cyan_ending = false | |||
75 | var strict_purple_ending = false | 75 | var strict_purple_ending = false |
76 | var victory_condition = -1 | 76 | var victory_condition = -1 |
77 | 77 | ||
78 | var color_by_material_path = {} | ||
79 | |||
78 | signal could_not_connect | 80 | signal could_not_connect |
79 | signal connect_status | 81 | signal connect_status |
80 | signal ap_connected | 82 | signal ap_connected |
@@ -112,6 +114,20 @@ func _init(): | |||
112 | if data.size() > 6: | 114 | if data.size() > 6: |
113 | show_minimap = data[6] | 115 | show_minimap = data[6] |
114 | 116 | ||
117 | # We need to create a mapping from material paths to the original colors of | ||
118 | # those materials. We force reload the materials, overwriting any custom | ||
119 | # textures, and create the mapping. We then reload the textures in case the | ||
120 | # player had a custom one enabled. | ||
121 | var directory = DirAccess.open("res://assets/materials") | ||
122 | for material_name in directory.get_files(): | ||
123 | var material = ResourceLoader.load( | ||
124 | "res://assets/materials/" + material_name, "", ResourceLoader.CACHE_MODE_REPLACE | ||
125 | ) | ||
126 | |||
127 | color_by_material_path[material.resource_path] = Color(material.albedo_color) | ||
128 | |||
129 | settings.load_user_textures() | ||
130 | |||
115 | 131 | ||
116 | func _ready(): | 132 | func _ready(): |
117 | client = SCRIPT_client.new() | 133 | client = SCRIPT_client.new() |
diff --git a/apworld/client/minimap.gd b/apworld/client/minimap.gd index 5640716..bf70114 100644 --- a/apworld/client/minimap.gd +++ b/apworld/client/minimap.gd | |||
@@ -126,6 +126,7 @@ func _process(_delta): | |||
126 | 126 | ||
127 | 127 | ||
128 | func _renderMap(gridmap): | 128 | func _renderMap(gridmap): |
129 | var ap = global.get_node("Archipelago") | ||
129 | var heights = {} | 130 | var heights = {} |
130 | 131 | ||
131 | var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8) | 132 | var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8) |
@@ -133,7 +134,7 @@ func _renderMap(gridmap): | |||
133 | 134 | ||
134 | var meshes_node = get_tree().get_root().get_node("scene/Meshes") | 135 | var meshes_node = get_tree().get_root().get_node("scene/Meshes") |
135 | if meshes_node != null: | 136 | if meshes_node != null: |
136 | _renderMeshNode(gridmap, meshes_node, rendered) | 137 | _renderMeshNode(ap, gridmap, meshes_node, rendered) |
137 | 138 | ||
138 | for pos in gridmap.get_used_cells(): | 139 | for pos in gridmap.get_used_cells(): |
139 | var in_plane = Vector2i(pos.x, pos.z) | 140 | var in_plane = Vector2i(pos.x, pos.z) |
@@ -146,20 +147,22 @@ func _renderMap(gridmap): | |||
146 | var cell_item = gridmap.get_cell_item(pos) | 147 | var cell_item = gridmap.get_cell_item(pos) |
147 | var mesh = gridmap.mesh_library.get_item_mesh(cell_item) | 148 | var mesh = gridmap.mesh_library.get_item_mesh(cell_item) |
148 | var material = mesh.surface_get_material(0) | 149 | var material = mesh.surface_get_material(0) |
149 | var color = material.albedo_color | 150 | var color = ap.color_by_material_path.get(material.resource_path, Color.TRANSPARENT) |
150 | 151 | ||
151 | rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color) | 152 | rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color) |
152 | 153 | ||
153 | return rendered | 154 | return rendered |
154 | 155 | ||
155 | 156 | ||
156 | func _renderMeshNode(gridmap, mesh, rendered): | 157 | func _renderMeshNode(ap, gridmap, mesh, rendered): |
157 | if mesh is MeshInstance3D: | 158 | if mesh is MeshInstance3D: |
158 | var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) | 159 | var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) |
159 | var global_tl = gridmap.to_global(local_tl) | 160 | var global_tl = gridmap.to_global(local_tl) |
160 | var mesh_material = mesh.get_surface_override_material(0) | 161 | var mesh_material = mesh.get_surface_override_material(0) |
161 | if mesh_material != null: | 162 | if mesh_material != null: |
162 | var mesh_color = mesh_material.albedo_color | 163 | var mesh_color = ap.color_by_material_path.get( |
164 | mesh_material.resource_path, Color.TRANSPARENT | ||
165 | ) | ||
163 | 166 | ||
164 | for y in range( | 167 | for y in range( |
165 | max(mesh.position.z - mesh.scale.z / 2 - global_tl.z, 0), | 168 | max(mesh.position.z - mesh.scale.z / 2 - global_tl.z, 0), |
@@ -172,4 +175,4 @@ func _renderMeshNode(gridmap, mesh, rendered): | |||
172 | rendered.set_pixel(x, y, mesh_color) | 175 | rendered.set_pixel(x, y, mesh_color) |
173 | 176 | ||
174 | for child in mesh.get_children(): | 177 | for child in mesh.get_children(): |
175 | _renderMeshNode(gridmap, child, rendered) | 178 | _renderMeshNode(ap, gridmap, child, rendered) |