portal64-still-alive/tools/models/generate_level_list.js
Matt Penny 1d0b22df61 Generate dynamic model lists with CMake, + refactor
* When building with CMake, dynamic model lists are now generated
* Factored common code out of generate_*_list.js files to deduplicate
* Better separated generated model lists from main game code
    `dynamic_asset_data.c` and `dynamic_animated_asset_data.c`
    previously #included the corresponding generated headers, and
    `dynamic_asset_loader.c` declared externs for the contents.

    This messiness was likely done so the generated code would be built
    automatically (the Makefile globs all C files under `src/`).

    Now, model list data is output to C source files which are built
    explicitly. This, with some refactoring, allows the previously
    mentioned source files and externs to be removed.

    This is a bit hacky in the Makefile but will be automatic under
    CMake by using target properties.
* Reorganized some files under `tools/`
2024-10-05 21:11:49 -04:00

43 lines
1.1 KiB
JavaScript

const fs = require('fs');
const util = require('./model_list_utils');
function generateLevelListEntry(outputPath, levelHeader) {
const levelName = util.generateModelName(levelHeader);
return ` {
&${util.generateRelativeModelName(outputPath, levelHeader, '_level')},
_${levelName}_geoSegmentRomStart,
_${levelName}_geoSegmentRomEnd,
_${levelName}_geoSegmentStart,
},`;
}
function generateHeader(outputPath, config) {
const { modelHeaders, modelGroup } = config;
return util.wrapWithIncludeGuard(outputPath,
`#include "levels/level_metadata.h"
${util.generateIncludes(outputPath, modelHeaders)}
${util.generateCount(modelGroup, modelHeaders)}
${util.generateExterns(modelHeaders)}
${util.generateModelList(outputPath, config)}`
);
}
const [outputHeaderFile, ...modelHeaders] = process.argv.slice(2);
const config = {
modelHeaders,
modelGroup: "level",
modelType: "LevelMetadata",
listEntryGenerator: generateLevelListEntry
};
fs.writeFileSync(
outputHeaderFile,
generateHeader(outputHeaderFile, config)
);