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 | |
| 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
| -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) |
