Fixed a bug where material slots could end up empty when importing PSKs

The material slots would end up empty if the BDK texture lookup failed.
This change ensures that a new black material is created if any of the
other lookups fail (local data blocks or BDK asset lookup).
This commit is contained in:
Colin Basnett
2025-03-30 18:22:49 -07:00
parent 7c695e6195
commit 16a11cd961

View File

@@ -130,6 +130,7 @@ def import_psk(psk: Psk, context: Context, name: str, options: PskImportOptions)
for material_index, psk_material in enumerate(psk.materials): for material_index, psk_material in enumerate(psk.materials):
material_name = psk_material.name.decode('utf-8') material_name = psk_material.name.decode('utf-8')
material = None material = None
if options.should_reuse_materials and material_name in bpy.data.materials: if options.should_reuse_materials and material_name in bpy.data.materials:
# Material already exists, just re-use it. # Material already exists, just re-use it.
material = bpy.data.materials[material_name] material = bpy.data.materials[material_name]
@@ -140,13 +141,15 @@ def import_psk(psk: Psk, context: Context, name: str, options: PskImportOptions)
repository_id = options.bdk_repository_id if options.bdk_repository_id is not None else '' repository_id = options.bdk_repository_id if options.bdk_repository_id is not None else ''
if material_reference and bpy.ops.bdk.link_material(reference=material_reference, repository_id=repository_id) == {'FINISHED'}: if material_reference and bpy.ops.bdk.link_material(reference=material_reference, repository_id=repository_id) == {'FINISHED'}:
material = bpy.data.materials[material_name] material = bpy.data.materials[material_name]
else:
# Just create a blank material. if material is None:
# Material was unable to be loaded, so just create a blank material.
material = bpy.data.materials.new(material_name) material = bpy.data.materials.new(material_name)
mesh_triangle_type, mesh_triangle_bit_flags = poly_flags_to_triangle_type_and_bit_flags(psk_material.poly_flags) mesh_triangle_type, mesh_triangle_bit_flags = poly_flags_to_triangle_type_and_bit_flags(psk_material.poly_flags)
material.psk.mesh_triangle_type = mesh_triangle_type material.psk.mesh_triangle_type = mesh_triangle_type
material.psk.mesh_triangle_bit_flags = mesh_triangle_bit_flags material.psk.mesh_triangle_bit_flags = mesh_triangle_bit_flags
material.use_nodes = True material.use_nodes = True
mesh_data.materials.append(material) mesh_data.materials.append(material)
bm = bmesh.new() bm = bmesh.new()