0.7.0 • Published 6 years ago
tiny-export v0.7.0
Tiny Export
Export tool for Tiny - Arduboy sprite and scene editor.
Install
mkdir thing
cd thing
npm init -f
npm intall tiny-exportUsage
Create config for your export:
// config.js
const path = require('path');
const root = __dirname;
module.exports = {
target: path.join(root, 'src'),
cache: {
payload: path.join(root, 'payload-cache.json'),
readable: path.join(root, 'payload-readable.json')
},
url: 'https://...your-app-id.cloudfunctions.net/export-project',
token: 'token for project you want to export'
};Create fetch.js which will fetch and cache locally your current project (sprites, scenes):
// fetch.js
let config = require('./config');
let { run } = require('tiny-export');
run(config, async runtime => {
await runtime.fetch();
});Run fetch:
node ./fetch.jsCreate generate.js which will take cached json and generate C++ code:
// generate.js
let config = require('./config');
let { run } = require('tiny-export');
let path = require('path');
let local = filename => path.join(__dirname, filename);
run(config, async runtime => {
let payload = await runtime.project();
let pair = async (filename, props) => {
let file = ext => runtime.render(local(`templates/${filename}.${ext}.ejs`), props);
await Promise.all([
runtime.write(`${filename}.cpp`, file('cpp')),
runtime.write(`${filename}.h`, file('h'))
]);
}
await pair('tiny', payload);
});For this example I'm generating tiny.cpp and tiny.h using tiny.cpp.ejs and tiny.h.ejs (which are identical for this example):
<%# templates/tiny.cpp.ejs %>
<%# templates/tiny.h.ejs %>
namespace Tiny {
// Project: <%= title %>
// Sprites
<% project.sprites.forEach(sprite => { %>
// <%= sprite.index %>: <%= sprite.identifier %> <%= sprite.size.width %> <%= sprite.size.height %>
<% }) %>
}Run generate:
node ./generate.jsFor more decent export example, see https://github.com/ampatspell/tiny/tree/master/player/tiny/generate
API
Project
let project = runtime.project();project.title→Stringproject.properties→Propertiesproject.models→Array<Sprite|Scene|Layer|Node>project.sprites→Array<Sprite>project.scenes→Array<Scene>
Entity
let project = runtime.project();
project.models.forEach(entity => {
//
});entity.id→Stringentity.type→Stringentity.identifier→Stringentity.classified→Stringentity.index→Numberentity.properties→Properties
Sprite
let project = runtime.project();
project.sprites.forEach(sprite => {
//
});sprite.size→{ width, height }sprite.frames→Array<Frame>sprite.loops→Array<Loop>sprite.toPlusMaskString()→String
Frame
let project = runtime.project();
let sprite = project.sprites.byIdentifier('weirdo');
sprite.frames.forEach(frame => {
//
});frame.bytes→Bytes
Bytes
let project = runtime.project();
let frame = project.sprites.byIdentifier('weirdo').frames.byIdentifier('idle');
let bytes = frame.bytes;bytes.size→{ width, height }bytes.raw→Array<Number>bytes.toPlusMaskString()→Stringbytes.toBitmapString()→String
Loop
let project = runtime.project();
let sprite = project.sprites.byIdentifier('weirdo');
sprite.loops.forEach(loop => {
//
});loop.frames→Array<Frame>loop.toFrameIndexes()→Array<Number>loop.toFrameIndexesString()→String
Scene
let project = runtime.project();
project.scenes.forEach(scene => {
//
});scene.background→black,white,transparentscene.name→Stringscene.size→{ width, height }scene.layers→Array<Layer>
Layer
let project = runtime.project();
let scene = project.sceneByIdentifier('01');
scene.layers.forEach(layer => {
//
});layer.identifier→Stringlayer.type→pixel,gridlayer.grid→{ width, heigt }if type isgridlayer.nodes→Array<Node>
Node
let project = runtime.project();
let scene = project.scenes.byIdentifier('01');
let layer = scene.layers.byIdentifier('background');node.position→{ x, y }node.alignment→{ horizontal: 'left', vertical: 'top' }node.flip→{ horizontal: false', vertical: false }node.color→String(forfilltype)node.sprite→Sprite(forsprite/..types)node.frame→Frame(forsprite/frametype)node.loop→Loop(forsprite/looptype)node.invert→Boolean(forsprite/..type)node.omit→String(forsprite/..type)
Properties
let project = runtime.project();
let properties = project.properties;properties.all→Objectproperties.keys→Array<String>properties.get(key, defaultValue)→any
Bytes
let width = 4;
let bytes = [ 0, 1, 2, 2, 2, 1, 0, 0 ];
//
// y
// 0,0 | 0 1 2 3
// x -- +---------+
// 0 | 0 1 2 2 |
// 1 | 2 1 0 0 |
// +---------+
//export const Pixel = {
transparent: 0,
white: 1,
black: 2
};