isRigidBody, isPrism flags added

This commit is contained in:
ABelliqueux 2021-01-14 17:22:44 +01:00
parent 48eb7ca02d
commit 9cb70c7ae8

View File

@ -45,6 +45,15 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
scale = 200 scale = 200
f = open(os.path.normpath(self.filepath),"w+") f = open(os.path.normpath(self.filepath),"w+")
# write BODY struct def
f.write("typedef struct {\n" +
"\tVECTOR position;\n" +
"\tSVECTOR velocity;\n" +
"\tint mass;\n" +
"\tVECTOR min; \n" +
"\tVECTOR max; \n" +
"\t} BODY;\n\n")
# write typedef struct # write typedef struct
f.write("typedef struct { \n"+ f.write("typedef struct { \n"+
"\tTMESH * tmesh;\n" + "\tTMESH * tmesh;\n" +
@ -54,6 +63,7 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
"\tMATRIX * mat;\n" + "\tMATRIX * mat;\n" +
"\tVECTOR * pos;\n" + "\tVECTOR * pos;\n" +
"\tSVECTOR * rot;\n" + "\tSVECTOR * rot;\n" +
"\tshort * isRigidBody;\n" +
"\tshort * isPrism;\n" + "\tshort * isPrism;\n" +
"\tlong * p;\n" + "\tlong * p;\n" +
"\t} MESH;\n\n") "\t} MESH;\n\n")
@ -62,10 +72,26 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
# Write vertices vectors # Write vertices vectors
f.write("SVECTOR "+"model"+m.name+"_mesh[] = {\n") # AABB : Store vertices coordinates by axis
Xvals = []
Yvals = []
Zvals = []
# remove '.' from mesh name
cleanName = m.name.replace('.','_')
f.write("SVECTOR "+"model"+cleanName+"_mesh[] = {\n")
for i in range(len(m.vertices)): for i in range(len(m.vertices)):
v = m.vertices[i].co v = m.vertices[i].co
# AABB : append vertices coords by axis
Xvals.append(v.x)
Yvals.append(v.y)
Zvals.append(v.z)
f.write("\t{"+str(v.x*scale)+","+str(v.y*scale)+","+str(v.z*scale)+"}") f.write("\t{"+str(v.x*scale)+","+str(v.y*scale)+","+str(v.z*scale)+"}")
if i != len(m.vertices) - 1: if i != len(m.vertices) - 1:
f.write(",") f.write(",")
f.write("\n") f.write("\n")
@ -73,7 +99,7 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
# Write normals vectors # Write normals vectors
f.write("SVECTOR "+"model"+m.name+"_normal[] = {\n") f.write("SVECTOR "+"model"+cleanName+"_normal[] = {\n")
for i in range(len(m.polygons)): for i in range(len(m.polygons)):
poly = m.polygons[i] poly = m.polygons[i]
f.write("\t"+str(poly.normal.x)+","+str(poly.normal.y)+","+str(poly.normal.z)+",0") f.write("\t"+str(poly.normal.x)+","+str(poly.normal.y)+","+str(poly.normal.z)+",0")
@ -95,7 +121,7 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
if len(m.uv_textures) != 0: if len(m.uv_textures) != 0:
for t in range(len(m.uv_textures)): for t in range(len(m.uv_textures)):
if m.uv_textures[t].data[0].image != None: if m.uv_textures[t].data[0].image != None:
f.write("SVECTOR "+"model"+m.name+"_uv[] = {\n") f.write("SVECTOR "+"model"+cleanName+"_uv[] = {\n")
texture_image = m.uv_textures[t].data[0].image texture_image = m.uv_textures[t].data[0].image
tex_width = texture_image.size[0] tex_width = texture_image.size[0]
tex_height = texture_image.size[1] tex_height = texture_image.size[1]
@ -112,7 +138,7 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
# Write vertex colors vectors # Write vertex colors vectors
f.write("CVECTOR "+"model"+m.name+"_color[] = {\n") f.write("CVECTOR "+"model"+cleanName+"_color[] = {\n")
# If vertex colors exist, use them # If vertex colors exist, use them
if len(m.vertex_colors) != 0: if len(m.vertex_colors) != 0:
colors = m.vertex_colors[0].data colors = m.vertex_colors[0].data
@ -134,7 +160,7 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
f.write("};\n\n") f.write("};\n\n")
# Write polygons index # Write polygons index
f.write("int "+"model"+m.name+"_index[] = {\n") f.write("int "+"model"+cleanName+"_index[] = {\n")
for i in range(len(m.polygons)): for i in range(len(m.polygons)):
poly = m.polygons[i] poly = m.polygons[i]
f.write("\t"+str(poly.vertices[0])+","+str(poly.vertices[1])+","+str(poly.vertices[2])) f.write("\t"+str(poly.vertices[0])+","+str(poly.vertices[1])+","+str(poly.vertices[2]))
@ -144,26 +170,34 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
f.write("};\n\n") f.write("};\n\n")
#write object matrix, rot and pos vectors #write object matrix, rot and pos vectors
f.write("MATRIX model"+m.name+"_matrix = {0};\n" + f.write("MATRIX model"+cleanName+"_matrix = {0};\n" +
"VECTOR model"+m.name+"_pos = {"+ str(bpy.data.objects[m.name].location.x * 100) + "," + str(bpy.data.objects[m.name].location.y * 100) + "," + str(bpy.data.objects[m.name].location.z * 100) + ", 0};\n" + "VECTOR model"+cleanName+"_pos = {"+ str(bpy.data.objects[m.name].location.x * 100) + "," + str(bpy.data.objects[m.name].location.y * 100) + "," + str(bpy.data.objects[m.name].location.z * 100) + ", 0};\n" +
"SVECTOR model"+m.name+"_rot = {"+ str(degrees(bpy.data.objects[m.name].rotation_euler.x)/360 * 4096) + "," + str(degrees(bpy.data.objects[m.name].rotation_euler.y)/360 * 4096) + "," + str(degrees(bpy.data.objects[m.name].rotation_euler.z)/360 * 4096) + "};\n" + "SVECTOR model"+cleanName+"_rot = {"+ str(degrees(bpy.data.objects[m.name].rotation_euler.x)/360 * 4096) + "," + str(degrees(bpy.data.objects[m.name].rotation_euler.y)/360 * 4096) + "," + str(degrees(bpy.data.objects[m.name].rotation_euler.z)/360 * 4096) + "};\n" +
"short model"+m.name+"_isPrism = 0;\n" + "short model"+cleanName+"_isRigidBody = 0;\n" +
"long model"+m.name+"_p = 0;\n" + "short model"+cleanName+"_isPrism = 0;\n" +
"\n") "long model"+cleanName+"_p = 0;\n" +
"BODY model"+cleanName+"_body = {\n" +
"\t0, 0, 0, 0,\n" +
"\t0, 0, 0, 0,\n" +
"\t1,\n" +
# write min and max values of AABBs on each axis
"\t" + str(min(Xvals) * scale) + "," + str(min(Yvals) * scale) + "," + str(min(Zvals) * scale) + ", 0,\n" +
"\t" + str(max(Xvals) * scale) + "," + str(max(Yvals) * scale) + "," + str(max(Zvals) * scale) + ", 0,\n" +
"\t};\n\n")
# Write TMESH struct # Write TMESH struct
f.write("TMESH "+"model"+m.name+" = {\n") f.write("TMESH "+"model"+cleanName+" = {\n")
f.write("\t"+"model"+m.name+"_mesh, \n") f.write("\t"+"model"+cleanName+"_mesh, \n")
f.write("\t"+"model"+m.name+"_normal,\n") f.write("\t"+"model"+cleanName+"_normal,\n")
if len(m.uv_textures) != 0: if len(m.uv_textures) != 0:
for t in range(len(m.uv_textures)): for t in range(len(m.uv_textures)):
if m.uv_textures[0].data[0].image != None: if m.uv_textures[0].data[0].image != None:
f.write("\t"+"model"+m.name+"_uv,\n") f.write("\t"+"model"+cleanName+"_uv,\n")
else: else:
f.write("\t0,\n") f.write("\t0,\n")
f.write("\t"+"model"+m.name+"_color, \n") f.write("\t"+"model"+cleanName+"_color, \n")
# According to libgte.h, TMESH.len should be # of vertices. Meh... # According to libgte.h, TMESH.len should be # of vertices. Meh...
f.write("\t"+str(len(m.polygons))+"\n") f.write("\t"+str(len(m.polygons))+"\n")
@ -182,9 +216,9 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
f.write("extern unsigned long "+"_binary_TIM_" + prefix + "_tim_length;\n\n") f.write("extern unsigned long "+"_binary_TIM_" + prefix + "_tim_length;\n\n")
f.write("TIM_IMAGE tim_" + prefix + ";\n\n") f.write("TIM_IMAGE tim_" + prefix + ";\n\n")
f.write("MESH mesh"+m.name+" = {\n") f.write("MESH mesh"+cleanName+" = {\n")
f.write("\t&model"+ m.name +",\n") f.write("\t&model"+ cleanName +",\n")
f.write("\tmodel" + m.name + "_index,\n") f.write("\tmodel" + cleanName + "_index,\n")
if len(m.uv_textures) != 0: if len(m.uv_textures) != 0:
for t in range(len(m.uv_textures)): for t in range(len(m.uv_textures)):
@ -194,18 +228,19 @@ class ExportMyFormat(bpy.types.Operator, ExportHelper):
else: else:
f.write("\t0,\n" + f.write("\t0,\n" +
"\t0,\n") "\t0,\n")
f.write("\t&model"+m.name+"_matrix,\n" + f.write("\t&model"+cleanName+"_matrix,\n" +
"\t&model"+m.name+"_pos,\n" + "\t&model"+cleanName+"_pos,\n" +
"\t&model"+m.name+"_rot,\n" + "\t&model"+cleanName+"_rot,\n" +
"\t&model"+m.name+"_isPrism,\n" + "\t&model"+cleanName+"_isRigidBody,\n" +
"\t&model"+m.name+"_p\n") "\t&model"+cleanName+"_isPrism,\n" +
"\t&model"+cleanName+"_p\n")
f.write("};\n\n") f.write("};\n\n")
f.write("MESH * meshes[" + str(len(bpy.data.meshes)) + "] = {\n") f.write("MESH * meshes[" + str(len(bpy.data.meshes)) + "] = {\n")
for k in range(len(bpy.data.meshes)): for k in range(len(bpy.data.meshes)):
f.write("\t&mesh" + bpy.data.meshes[k].name) f.write("\t&mesh" + bpy.data.meshes[k].name.replace('.','_'))
if k != len(bpy.data.meshes) - 1: if k != len(bpy.data.meshes) - 1:
f.write(",\n") f.write(",\n")
f.write("\n}; \n") f.write("\n}; \n")