Added newlines to group includes, added prefix to material_revert_render_settings. Added enum option instead of boolean for dynamic/static display lists in order to add option for material dynamic display lists.

This commit is contained in:
kurethedead
2020-02-27 13:35:33 -08:00
parent 564499080e
commit 2e2bbaff0d
4 changed files with 43 additions and 36 deletions
+31 -24
View File
@@ -6,6 +6,12 @@ import os
from .utility import getNameFromPath, PluginError
import copy
dlTypeEnum = [
('STATIC', "Static", "Static"),
('MATERIAL', 'Dynamic Material', 'Dynamic Material'),
('PROCEDURAL', 'Procedural', 'Procedural'),
]
lightIndex = {
'LIGHT_1' : 1,
'LIGHT_2' : 2,
@@ -1550,21 +1556,22 @@ class FModel:
if self.materialRevert is not None:
self.materialRevert.save_binary(romfile, self.f3d, segments)
def to_c(self, static):
# See dlTypeEnum at top of f3d_gbi.py
def to_c(self, dlType):
data = ''
for name, light in self.lights.items():
data += light.to_c() + '\n'
for info, texture in self.textures.items():
data += texture.to_c() + '\n'
for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items():
data += fMaterial.to_c(static) + '\n'
data += fMaterial.to_c(dlType == 'STATIC') + '\n'
for name, meshGroup in self.meshGroups.items():
data += meshGroup.to_c(static) + '\n'
data += meshGroup.to_c(dlType) + '\n'
if self.materialRevert is not None:
data += self.materialRevert.to_c(static) + '\n'
data += self.materialRevert.to_c(dlType == 'STATIC') + '\n'
return data
def save_c_tex_separate(self, static, texDir, dirpath, texSeparate, texFileName):
def save_c_tex_separate(self, dlType, texDir, dirpath, texSeparate, texFileName):
data = ''
texC = ''
@@ -1604,11 +1611,11 @@ class FModel:
image.filepath = oldpath
for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items():
data += fMaterial.to_c(static) + '\n'
data += fMaterial.to_c(dlType == 'STATIC') + '\n'
for name, meshGroup in self.meshGroups.items():
data += meshGroup.to_c(static) + '\n'
data += meshGroup.to_c(dlType) + '\n'
if self.materialRevert is not None:
data += self.materialRevert.to_c(static) + '\n'
data += self.materialRevert.to_c(dlType == 'STATIC') + '\n'
modelPath = os.path.join(dirpath, 'model.inc.c')
modelFile = open(modelPath, 'w')
@@ -1629,14 +1636,14 @@ class FModel:
if texInfo[1] == 'PAL':
bpy.data.images.remove(image)
def to_c_def(self, static):
def to_c_def(self, dlType):
data = ''
#for (material, drawLayer), (fMaterial, texDimensions) in self.materials.items():
# data += fMaterial.to_c_def(static)
for name, meshGroup in self.meshGroups.items():
data += meshGroup.to_c_def(static)
data += meshGroup.to_c_def(dlType)
if self.materialRevert is not None:
data += self.materialRevert.to_c_def(static)
data += self.materialRevert.to_c_def(dlType == 'STATIC')
return data + '\n'
class FMeshGroup:
@@ -1672,20 +1679,20 @@ class FMeshGroup:
if self.skinnedMesh is not None:
self.skinnedMesh.save_binary(romfile, f3d, segments)
def to_c(self, static):
def to_c(self, dlType):
data = ""
if self.mesh is not None:
data += self.mesh.to_c(static) + '\n'
data += self.mesh.to_c(dlType) + '\n'
if self.skinnedMesh is not None:
data += self.skinnedMesh.to_c(static) + '\n'
data += self.skinnedMesh.to_c(dlType) + '\n'
return data
def to_c_def(self, static):
def to_c_def(self, dlType):
data = ""
if self.mesh is not None:
data += self.mesh.to_c_def(static)
data += self.mesh.to_c_def(dlType)
if self.skinnedMesh is not None:
data += self.skinnedMesh.to_c_def(static)
data += self.skinnedMesh.to_c_def(dlType)
return data
class FMesh:
@@ -1732,21 +1739,21 @@ class FMesh:
for materialTuple, drawOverride in self.drawMatOverrides.items():
drawOverride.save_binary(romfile, f3d, segments)
def to_c(self, static):
def to_c(self, dlType):
data = self.vertexList.to_c() + '\n'
for triangleList in self.triangleLists:
data += triangleList.to_c(static) + '\n'
data += self.draw.to_c(static) + '\n'
data += triangleList.to_c(dlType != 'PROCEDURAL') + '\n'
data += self.draw.to_c(dlType == 'STATIC') + '\n'
for materialTuple, drawOverride in self.drawMatOverrides.items():
data += drawOverride.to_c(static) + '\n'
data += drawOverride.to_c(dlType == 'STATIC') + '\n'
return data
def to_c_def(self, static):
data = self.draw.to_c_def(static)
def to_c_def(self, dlType):
data = self.draw.to_c_def(dlType == 'STATIC')
#for triangleList in self.triangleLists:
# data += triangleList.to_c_def(static)
for materialTuple, drawOverride in self.drawMatOverrides.items():
data += drawOverride.to_c_def(static)
data += drawOverride.to_c_def(dlType == 'STATIC')
return data
class FMaterial:
+3 -3
View File
@@ -184,19 +184,19 @@ def exportF3DtoC(dirPath, obj, isStatic, transformMatrix,
os.mkdir(modelDirPath)
if savePNG:
fModel.save_c_tex_separate(isStatic, texDir, modelDirPath, texSeparate, 'texture.inc.c')
fModel.save_c_tex_separate("STATIC" if isStatic else "PROCEDURAL", texDir, modelDirPath, texSeparate, 'texture.inc.c')
fModel.freePalettes()
else:
fModel.freePalettes()
modelPath = os.path.join(modelDirPath, 'model.inc.c')
data = fModel.to_c(isStatic)
data = fModel.to_c("STATIC" if isStatic else "PROCEDURAL")
outFile = open(modelPath, 'w')
outFile.write(data)
outFile.close()
headerPath = os.path.join(modelDirPath, 'header.h')
cDefine = fModel.to_c_def(isStatic)
cDefine = fModel.to_c_def("STATIC" if isStatic else "PROCEDURAL")
cDefFile = open(headerPath, 'w')
cDefFile.write(cDefine)
cDefFile.close()
+6 -6
View File
@@ -65,7 +65,7 @@ def getCameraObj(camera):
' is no longer in the scene.')
def appendRevertToGeolayout(geolayoutGraph, fModel):
fModel.materialRevert = GfxList('material_revert_render_settings')
fModel.materialRevert = GfxList(fModel.name + "_" + 'material_revert_render_settings')
revertMatAndEndDraw(fModel.materialRevert,
[DPSetEnvColor(0xFF, 0xFF, 0xFF, 0xFF),
DPSetAlphaCompare("G_AC_NONE")])
@@ -191,12 +191,12 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG,
os.mkdir(geoDirPath)
if savePNG:
fModel.save_c_tex_separate(True, texDir, geoDirPath, texSeparate, 'texture.inc.c')
fModel.save_c_tex_separate("STATIC", texDir, geoDirPath, texSeparate, 'texture.inc.c')
fModel.freePalettes()
else:
fModel.freePalettes()
modelPath = os.path.join(geoDirPath, 'model.inc.c')
dlData = fModel.to_c(True)
dlData = fModel.to_c("STATIC")
dlFile = open(modelPath, 'w')
dlFile.write(dlData)
dlFile.close()
@@ -204,7 +204,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG,
# group.c include
if groupName is not None:
groupPathC = os.path.join(dirPath, groupName + ".c")
writeIfNotFound(groupPathC, '#include "' + dirName + '/model.inc.c"', False)
writeIfNotFound(groupPathC, '#include "' + dirName + '/model.inc.c"\n', False)
geoPath = os.path.join(geoDirPath, 'geo.inc.c')
geoData = geolayoutGraph.to_c()
@@ -215,7 +215,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG,
# group_geo.c include
if groupName is not None:
groupPathGeoC = os.path.join(dirPath, groupName + "_geo.c")
writeIfNotFound(groupPathGeoC, '#include "' + dirName + '/geo.inc.c"', False)
writeIfNotFound(groupPathGeoC, '#include "' + dirName + '/geo.inc.c"\n', False)
cDefine = geolayoutGraph.to_c_def() + fModel.to_c_def(True)
if writeDefinitionsFile:
@@ -227,7 +227,7 @@ def saveGeolayoutC(dirName, geolayoutGraph, fModel, dirPath, texDir, savePNG,
# group.h declaration
if groupName is not None:
groupPathH = os.path.join(dirPath, groupName + ".h")
writeIfNotFound(groupPathH, '#include "' + dirName + '/geo_declarations.h"', True)
writeIfNotFound(groupPathH, '#include "' + dirName + '/geo_declarations.h"\n', True)
return cDefine
+3 -3
View File
@@ -96,18 +96,18 @@ def exportLevelC(obj, transformMatrix, f3dType, isHWv1, levelName, exportDir,
shutil.rmtree(os.path.join(levelDir, f))
if savePNG:
fModel.save_c_tex_separate(True, 'levels/' + levelName, levelDir, True, 'texture_include.inc.c')
fModel.save_c_tex_separate("STATIC", 'levels/' + levelName, levelDir, True, 'texture_include.inc.c')
fModel.freePalettes()
else:
fModel.freePalettes()
modelPath = os.path.join(levelDir, 'model.inc.c')
dlData = fModel.to_c(True)
dlData = fModel.to_c("STATIC")
dlFile = open(modelPath, 'w')
dlFile.write(dlData)
dlFile.close()
levelDataString += '#include "levels/' + levelName + '/model.inc.c"\n'
headerString += fModel.to_c_def(True)
headerString += fModel.to_c_def("STATIC")
#headerString += '\nextern const LevelScript level_' + levelName + '_entry[];\n'
#headerString += '\n#endif\n'