From e6604a41ffa56401666bfe27550cc819a00e0765 Mon Sep 17 00:00:00 2001 From: Colin Basnett Date: Mon, 2 Dec 2019 01:53:32 -0800 Subject: [PATCH] * Added a check that there must be at least one material. * Added support for multiple materials. --- src/builder.py | 11 +++++++++-- src/exporter.py | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/builder.py b/src/builder.py index 59eef1c..1225542 100644 --- a/src/builder.py +++ b/src/builder.py @@ -10,8 +10,12 @@ class PskBuilder(object): def build(self, context) -> Psk: object = context.view_layer.objects.active + if object.type != 'MESH': - raise RuntimeError('Selected object must be a Mesh') + raise RuntimeError('selected object must be a mesh') + + if len(object.data.materials) == 0: + raise RuntimeError('the mesh must have at least one material') # ensure that there is exactly one armature modifier modifiers = [x for x in object.modifiers if x.type == 'ARMATURE'] @@ -52,7 +56,7 @@ class PskBuilder(object): for loop_index, loop in enumerate(object.data.loops): wedge = psk.wedges[loop_index] - wedge.material_index = -1 + wedge.material_index = 0 wedge.point_index = loop.vertex_index wedge.u, wedge.v = uv_layer[loop_index].uv psk.wedges.append(wedge) @@ -75,6 +79,9 @@ class PskBuilder(object): face.wedge_index_3 = f.loops[0] face.smoothing_groups = poly_groups[f.polygon_index] psk.faces.append(face) + # update the material index of the wedges + for i in range(3): + psk.wedges[f.loops[i]].material_index = f.material_index # BONES bone_list = list(armature_object.data.bones) diff --git a/src/exporter.py b/src/exporter.py index 49d2eba..9cb000c 100644 --- a/src/exporter.py +++ b/src/exporter.py @@ -59,7 +59,9 @@ class PskExporter(object): if len(self.psk.wedges) <= 65536: fmt = 'hhffbbh' for w in self.psk.wedges: - write(data, fmt, w.point_index, 0, w.u, w.v, w.material_index, 0, 0) + # NOTE: there's some sort of problem here where the wedges mtl indx is wrong + # in the documentation. + write(data, fmt, w.point_index, 0, w.u, w.v, w.material_index, w.material_index, 0) else: fmt = 'iffi' for w in self.psk.wedges: