export default function (items = {}) {
const { canvas, namespace, entity, scrawl } = items;
if (!(canvas && entity && namespace && scrawl)) return {};
const name = item => `${namespace}-${item}`;
const {
dimensions = 400,
buildStartAngle = -45,
buildEndAngle = 225,
buildStepAngle = 15,
buildOffset = 0,
reflectOnly = false,
} = items;
const cell = canvas.buildCell({
name: name('cell'),
dimensions: [dimensions, dimensions],
shown: false,
});
scrawl.makeGroup({
name: name('clip-group'),
host: name('cell'),
order: 0,
});
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'
});
const 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: () => scrawl.purge(namespace),
}
}