import * as scrawl from '../../source/scrawl.js';Factory functions to create more complex, compound entitys
Related files:
Import the Scrawl-canvas object
import * as scrawl from '../../source/scrawl.js';This factory takes a single items Javascript Object argument (to match the functionality of built-in Scrawl-canvas factories). Three of the attributes of this argument object are required, the others will fall back on default values. These attrributes are:
export default function (items = {}) {
if (!items.canvas || !items.entity || !items.name) return {};
let canvas = items.canvas,
name = items.name,
entity = items.entity,
dimensions = items.dimensions || 400,
buildStartAngle = items.buildStartAngle || -45,
buildEndAngle = items.buildEndAngle || 225,
buildStepAngle = items.buildStepAngle || 15,
buildOffset = items.buildOffset || 0,
reflectOnly = items.reflectOnly || false;
const cell = canvas.buildCell({
name: `${name}-cell`,
dimensions: [dimensions, dimensions],
shown: false,
compileOrder: 0,
});
const clip = scrawl.makeGroup({
name: `${name}-clip-group`,
host: `${name}-cell`,
order: 0,
});
const reflect = scrawl.makeGroup({
name: `${name}-reflect-group`,
host: `${name}-cell`,
order: 1,
});
scrawl.makeBlock({
name: `${name}-clipper`,
group: `${name}-clip-group`,
start: ['left', 'center'],
dimensions: ['100%', '50%'],
method: 'clip'
});
let v = scrawl.requestVector(0, buildOffset);
v.rotate(buildStartAngle);
for (let i = buildStartAngle; i <= buildEndAngle; i += buildStepAngle) {
entity.clone({
name: `${name}-ringitem-${i}`,
group: `${name}-clip-group`,
roll: i,
offset: [v.x, v.y],
});
v.rotate(buildStepAngle);
}
scrawl.releaseVector(v);
scrawl.makePicture({
name: `${name}-reflection`,
group: `${name}-reflect-group`,
asset: `${name}-cell`,
start: ['center', '25%'],
handle: ['center', 'center'],
flipUpend: true,
flipReverse: !reflectOnly,
dimensions: ['100%', '50%'],
copyDimensions: ['100%', '50%'],
copyStartY: '50%',
method: 'fill',
});
entity.set({
visibility: false,
});
return {
cell,
kill: () => {
clip.kill(true);
reflect.kill(true);
cell.kill();
},
}
};