@@ -1174,22 +1174,33 @@ def mesh(bsp, mesh_index: int) -> geometry.Mesh:
1174
1174
# material
1175
1175
material_sort = bsp .MATERIAL_SORTS [mesh .material_sort ]
1176
1176
texture_data = bsp .TEXTURE_DATA [material_sort .texture_data ]
1177
- material = geometry .Material (bsp .TEXTURE_DATA_STRING_DATA [texture_data .name_index ])
1177
+ material_name = bsp .TEXTURE_DATA_STRING_DATA [texture_data .name_index ]
1178
+ material = geometry .Material (material_name )
1178
1179
# indices
1179
1180
start , length = mesh .first_mesh_index , mesh .num_triangles * 3
1180
- indices = [material_sort .vertex_offset + i for i in bsp .MESH_INDICES [start :start + length ]]
1181
+ indices = [
1182
+ material_sort .vertex_offset + i
1183
+ for i in bsp .MESH_INDICES [start :start + length ]]
1181
1184
# vertices
1182
1185
vertex_lump = (mesh .flags & MeshFlags .MASK_VERTEX ).name
1183
- converter = bsp .lit_vertex if vertex_lump .split ("_" )[1 ] == "LIT" else bsp .unlit_vertex
1186
+ converters = {
1187
+ "VERTEX_LIT_FLAT" : bsp .lit_vertex ,
1188
+ "VERTEX_LIT_BUMP" : bsp .lit_vertex ,
1189
+ "VERTEX_UNLIT" : bsp .unlit_vertex ,
1190
+ "VERTEX_UNLIT_TS" : bsp .unlit_vertex }
1191
+ convert = converters [vertex_lump ]
1184
1192
VERTEX_LUMP = getattr (bsp , vertex_lump )
1185
- vertices = [converter (VERTEX_LUMP [i ]) for i in indices ]
1193
+ vertices = [convert (VERTEX_LUMP [i ]) for i in indices ]
1186
1194
return geometry .Mesh (material , geometry .triangle_soup (vertices ))
1187
1195
1188
1196
1189
1197
def model (bsp , model_index : int ) -> geometry .Model :
1190
1198
# entity
1191
1199
# NOTE: not all brush entities are in the ENTITIES block
1192
- entities = [e for es in bsp .search_all_entities (model = f"*{ model_index } " ).values () for e in es ]
1200
+ entities = [
1201
+ entity
1202
+ for entities in bsp .search_all_entities (model = f"*{ model_index } " ).values ()
1203
+ for entity in entities ]
1193
1204
model_entity = entities [0 ] if len (entities ) != 0 else dict ()
1194
1205
origin = model_entity .get ("origin" , "0 0 0" )
1195
1206
origin = vector .vec3 (* origin .split ())
@@ -1198,7 +1209,10 @@ def model(bsp, model_index: int) -> geometry.Model:
1198
1209
# geometry
1199
1210
model = bsp .MODELS [model_index ]
1200
1211
start , length = model .first_mesh , model .num_meshes
1201
- out = geometry .Model ([bsp .mesh (i ) for i in range (start , start + length )], origin , angles )
1212
+ out = geometry .Model ([
1213
+ bsp .mesh (i )
1214
+ for i in range (start , start + length )],
1215
+ origin , angles )
1202
1216
out .entity = model_entity
1203
1217
return out
1204
1218
0 commit comments