From 1ea81f593eda16e9ae93731041a9b7c7f77f8d8b Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 7 Oct 2025 18:24:54 -0400 Subject: Fix minimap colors when using a texture pack --- apworld/client/manager.gd | 16 ++++++++++++++++ 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 var strict_purple_ending = false var victory_condition = -1 +var color_by_material_path = {} + signal could_not_connect signal connect_status signal ap_connected @@ -112,6 +114,20 @@ func _init(): if data.size() > 6: show_minimap = data[6] + # We need to create a mapping from material paths to the original colors of + # those materials. We force reload the materials, overwriting any custom + # textures, and create the mapping. We then reload the textures in case the + # player had a custom one enabled. + var directory = DirAccess.open("res://assets/materials") + for material_name in directory.get_files(): + var material = ResourceLoader.load( + "res://assets/materials/" + material_name, "", ResourceLoader.CACHE_MODE_REPLACE + ) + + color_by_material_path[material.resource_path] = Color(material.albedo_color) + + settings.load_user_textures() + func _ready(): 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): func _renderMap(gridmap): + var ap = global.get_node("Archipelago") var heights = {} var rendered = Image.create_empty(cell_width, cell_height, false, Image.FORMAT_RGBA8) @@ -133,7 +134,7 @@ func _renderMap(gridmap): var meshes_node = get_tree().get_root().get_node("scene/Meshes") if meshes_node != null: - _renderMeshNode(gridmap, meshes_node, rendered) + _renderMeshNode(ap, gridmap, meshes_node, rendered) for pos in gridmap.get_used_cells(): var in_plane = Vector2i(pos.x, pos.z) @@ -146,20 +147,22 @@ func _renderMap(gridmap): var cell_item = gridmap.get_cell_item(pos) var mesh = gridmap.mesh_library.get_item_mesh(cell_item) var material = mesh.surface_get_material(0) - var color = material.albedo_color + var color = ap.color_by_material_path.get(material.resource_path, Color.TRANSPARENT) rendered.set_pixel(pos.x - cell_left, pos.z - cell_top, color) return rendered -func _renderMeshNode(gridmap, mesh, rendered): +func _renderMeshNode(ap, gridmap, mesh, rendered): if mesh is MeshInstance3D: var local_tl = gridmap.map_to_local(Vector3i(cell_left, 0, cell_top)) var global_tl = gridmap.to_global(local_tl) var mesh_material = mesh.get_surface_override_material(0) if mesh_material != null: - var mesh_color = mesh_material.albedo_color + var mesh_color = ap.color_by_material_path.get( + mesh_material.resource_path, Color.TRANSPARENT + ) for y in range( max(mesh.position.z - mesh.scale.z / 2 - global_tl.z, 0), @@ -172,4 +175,4 @@ func _renderMeshNode(gridmap, mesh, rendered): rendered.set_pixel(x, y, mesh_color) for child in mesh.get_children(): - _renderMeshNode(gridmap, child, rendered) + _renderMeshNode(ap, gridmap, child, rendered) -- cgit 1.4.1