I hate my life
This commit is contained in:
@ -3,20 +3,38 @@
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
function(tool_vn_character DEP_NAME IN OUT)
|
||||
add_custom_command(
|
||||
OUTPUT ${TEMP_DIR}/vn/${DEP_NAME}.c ${TEMP_DIR}/vn/${DEP_NAME}.h
|
||||
COMMAND node ${TOOLS_DIR}/vn/character-sheet-generator.js --assets="${ASSETS_DIR}" --root="${ROOT_DIR}" --temp="${TEMP_DIR}" --in="${IN}" --out="${OUT}" --dep="${DEP_NAME}"
|
||||
COMMENT "Generating VN Character ${DEP_NAME}"
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
|
||||
# Build Tool
|
||||
project(character_generator VERSION 1.0)
|
||||
add_executable(character_generator)
|
||||
target_sources(character_generator
|
||||
PRIVATE
|
||||
character_generator.c
|
||||
../utils/file.c
|
||||
../utils/xml.c
|
||||
)
|
||||
target_include_directories(character_generator
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_LIST_DIR}/../
|
||||
)
|
||||
target_link_libraries(character_generator
|
||||
PUBLIC
|
||||
stb
|
||||
)
|
||||
|
||||
# Function Target
|
||||
function(tool_vn_character target in out)
|
||||
add_custom_target(vn_character_${target}
|
||||
COMMAND character_generator "${in}" "${TEMP_DIR}/${out}"
|
||||
COMMENT "Generating character ${target} from ${in}"
|
||||
DEPENDS character_generator ${ARGN}
|
||||
)
|
||||
|
||||
tool_texture(${target}
|
||||
${TEMP_DIR}/${out}.png ${out}
|
||||
vn_character_${target}
|
||||
)
|
||||
|
||||
# target_sources(${PROJECT_NAME}
|
||||
# PRIVATE
|
||||
# ${CMAKE_CURRENT_BINARY_DIR}/${TEMP_DIR}/vn/${DEP_NAME}.c
|
||||
# ${CMAKE_CURRENT_BINARY_DIR}/${TEMP_DIR}/vn/${DEP_NAME}.h
|
||||
# )
|
||||
# target_include_directories(${PROJECT_NAME}
|
||||
# PUBLIC
|
||||
# ${CMAKE_CURRENT_BINARY_DIR}/${TEMP_DIR}/vn/
|
||||
# )
|
||||
endfunction()
|
@ -6,9 +6,7 @@ const { args } = require('./../utils/args');
|
||||
const { mkdirp } = require('../utils/file');
|
||||
|
||||
// Parse Args
|
||||
if(!args.root) throw new Error(`Missing root argument`);
|
||||
if(!args.assets) throw new Error(`Missing assets argument`);
|
||||
if(!args.temp) throw new Error(`Missing temp argument`);
|
||||
// if(!args.temp) throw new Error(`Missing temp argument`);
|
||||
if(!args.in) throw new Error(`Missing in argument`);
|
||||
if(!args.out) throw new Error(`Missing out argument`);
|
||||
if(!args.dep) throw new Error(`Missing dep argument`);
|
||||
@ -16,14 +14,16 @@ if(!args.in.endsWith('xml')) throw new Error(`Invalid in XML`);
|
||||
if(!args.out.endsWith('png')) throw new Error(`Invalid out PNG`);
|
||||
|
||||
// Determine in and out.
|
||||
const root = path.resolve(args.root);
|
||||
const file = path.resolve(args.root, args.assets, args.in);
|
||||
const outFile = path.resolve(args.assets, args.out);
|
||||
const file = path.resolve(args.in);
|
||||
const outFile = path.resolve(args.out);
|
||||
|
||||
const cOut = path.resolve(args.temp, 'vn', `${args.dep}.c`);
|
||||
const hOut = path.resolve(args.temp, 'vn', `${args.dep}.h`);
|
||||
console.log(outFile);
|
||||
|
||||
// const cOut = path.resolve(args.temp, 'vn', `${args.dep}.c`);
|
||||
// const hOut = path.resolve(args.temp, 'vn', `${args.dep}.h`);
|
||||
if(!fs.existsSync(file)) throw new Error(`Could not find ${file}`);
|
||||
if(fs.existsSync(outFile) && fs.existsSync(cOut) && fs.existsSync(hOut)) return;
|
||||
// if(fs.existsSync(outFile) && fs.existsSync(cOut) && fs.existsSync(hOut)) return;
|
||||
if(fs.existsSync(outFile)) return;
|
||||
|
||||
// Load XML
|
||||
const data = xml.xml2js(fs.readFileSync(file, 'utf-8'));
|
||||
@ -31,7 +31,7 @@ const [ character ] = data.elements;
|
||||
|
||||
// Validate file.
|
||||
if(!character.attributes.context) throw new Error(`Missing context`)
|
||||
const dir = path.resolve(root, args.assets, character.attributes.context);
|
||||
const dir = path.resolve(path.dirname(file), character.attributes.context);
|
||||
|
||||
// Parse base and layers
|
||||
const base = character.elements.find(e => e.name == 'base').attributes;
|
||||
@ -107,33 +107,33 @@ const layers = character.elements
|
||||
mkdirp(outFile);
|
||||
await imageWrite(out, outFile);
|
||||
|
||||
mkdirp(cOut);
|
||||
let name = character.attributes.name || args.name || args.dep;
|
||||
|
||||
// mkdirp(cOut);
|
||||
// fs.writeFileSync(cOut, `
|
||||
// #include "${args.dep}.h"
|
||||
|
||||
fs.writeFileSync(cOut, `
|
||||
#include "${args.dep}.h"
|
||||
// void vnCharacter${name}Init(vncharacter_t *vnc, texture_t *texture) {
|
||||
// assetTextureLoad(texture, VN_CHARACTER_${name.toUpperCase()}_TEXTURE);
|
||||
// vnCharacterInit(vnc, texture);
|
||||
|
||||
void vnCharacter${name}Init(vncharacter_t *vnc, texture_t *texture) {
|
||||
assetTextureLoad(texture, VN_CHARACTER_${name.toUpperCase()}_TEXTURE);
|
||||
vnCharacterInit(vnc, texture);
|
||||
// // Base Layer
|
||||
// vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, ${baseImage.width}, ${baseImage.height});
|
||||
|
||||
// Base Layer
|
||||
vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, ${baseImage.width}, ${baseImage.height});
|
||||
// // Layers
|
||||
// ${strLayers}
|
||||
// }
|
||||
// `);
|
||||
|
||||
// Layers
|
||||
${strLayers}
|
||||
}
|
||||
`);
|
||||
// fs.writeFileSync(hOut, `
|
||||
// #pragma once
|
||||
// #include <libs.h>
|
||||
// #include <vn/vncharacter.h>
|
||||
// #include <display/texture.h>
|
||||
// #include <file/asset.h>
|
||||
|
||||
fs.writeFileSync(hOut, `
|
||||
#pragma once
|
||||
#include <libs.h>
|
||||
#include <vn/vncharacter.h>
|
||||
#include <display/texture.h>
|
||||
#include <file/asset.h>
|
||||
|
||||
#define VN_CHARACTER_${name.toUpperCase()}_TEXTURE "${args.out}"
|
||||
// #define VN_CHARACTER_${name.toUpperCase()}_TEXTURE "${args.out}"
|
||||
|
||||
void vnCharacter${name}Init(vncharacter_t *vnc, texture_t *texture);
|
||||
`);
|
||||
// void vnCharacter${name}Init(vncharacter_t *vnc, texture_t *texture);
|
||||
// `);
|
||||
})().catch(console.error);
|
46
tools/vn/character_generator.c
Normal file
46
tools/vn/character_generator.c
Normal file
@ -0,0 +1,46 @@
|
||||
/**
|
||||
* Copyright (c) 2021 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "../utils/common.h"
|
||||
#include "../utils/file.h"
|
||||
#include "../utils/image.h"
|
||||
#include "../utils/xml.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
FILE *file;
|
||||
char *in;
|
||||
char *out;
|
||||
char xmlBuffer[2048];
|
||||
|
||||
if(argc != 3) {
|
||||
printf("Invalid number of arguments\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Set up strings
|
||||
in = argv[1];
|
||||
out = argv[2];
|
||||
|
||||
// Normalize slashes
|
||||
fileNormalizeSlashes(in);
|
||||
fileNormalizeSlashes(out);
|
||||
|
||||
|
||||
// Read in XML file
|
||||
file = fopen(in, "rb");
|
||||
if(file == NULL) {
|
||||
printf("Failed to open file!\n");
|
||||
return 1;
|
||||
}
|
||||
assetReadString(file, xmlBuffer);
|
||||
|
||||
xmlnode_t node;
|
||||
xmlParseElement(&node, xmlBuffer);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user