From 28912fff9723c5fb7e62e8ed78925b8660fc0897 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Sun, 1 Jan 2023 18:47:45 +0100 Subject: [PATCH 1/3] animate: rescale + move + zoom --- packages/core/animate.mjs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/core/animate.mjs b/packages/core/animate.mjs index 6da97f08..39d1da6d 100644 --- a/packages/core/animate.mjs +++ b/packages/core/animate.mjs @@ -1,4 +1,4 @@ -import { controls, Pattern, getDrawContext, silence, scheduler } from './index.mjs'; +import { controls, Pattern, getDrawContext, silence, scheduler, register, pure } from './index.mjs'; const { createParams } = controls; let clearColor = '#22222210'; @@ -52,3 +52,16 @@ Pattern.prototype.animate = function ({ callback, sync = false, smear = 0.5 } = }; export const { x, y, w, h, a, r, fill, smear } = createParams('x', 'y', 'w', 'h', 'a', 'r', 'fill', 'smear'); + +export const rescale = register('rescale', function (f, pat) { + return pat.mul(x(f).w(f).y(f).h(f)); +}); + +export const move = register('move', function (dx, dy, pat) { + return pat.add(x(dx).y(dy)); +}); + +export const zoom = register('zoom', function (f, pat) { + const d = pure(1).sub(f).div(2); + return pat.rescale(f).move(d, d); +}); From 4b79a75f39c2a656d724cc0cf32c76633273f780 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 2 Jan 2023 00:24:33 +0100 Subject: [PATCH 2/3] fix: mini repls were broken --- packages/core/animate.mjs | 12 ++++++------ packages/core/repl.mjs | 6 +----- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/core/animate.mjs b/packages/core/animate.mjs index 39d1da6d..1b198802 100644 --- a/packages/core/animate.mjs +++ b/packages/core/animate.mjs @@ -1,4 +1,4 @@ -import { controls, Pattern, getDrawContext, silence, scheduler, register, pure } from './index.mjs'; +import { controls, Pattern, getDrawContext, silence, register, pure } from './index.mjs'; const { createParams } = controls; let clearColor = '#22222210'; @@ -12,13 +12,13 @@ Pattern.prototype.animate = function ({ callback, sync = false, smear = 0.5 } = clearColor = `#200010${smearPart}`; const render = (t) => { let frame; - if (sync) { + /* if (sync) { t = scheduler.now(); frame = this.queryArc(t, t); - } else { - t = Math.round(t); - frame = this.slow(1000).queryArc(t, t); - } + } else { */ + t = Math.round(t); + frame = this.slow(1000).queryArc(t, t); + // } ctx.fillStyle = clearColor; ctx.fillRect(0, 0, ww, wh); frame.forEach((f) => { diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index 7d2d460e..6bef319b 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -3,10 +3,6 @@ import { evaluate as _evaluate } from './evaluate.mjs'; import { logger } from './logger.mjs'; import { setTime } from './time.mjs'; -export let scheduler; // expose scheduler to global scope -// this is not optimal as it will only work for one repl at a time -// TODO: use pattern.context to expose scheduler - export function repl({ interval, defaultOutput, @@ -18,7 +14,7 @@ export function repl({ transpiler, onToggle, }) { - scheduler = new Cyclist({ + const scheduler = new Cyclist({ interval, onTrigger: async (hap, deadline, duration) => { try { From 548619775e7ca9759724121e4c35d188082e98ab Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Mon, 2 Jan 2023 00:28:38 +0100 Subject: [PATCH 3/3] rename .. --- packages/core/animate.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/animate.mjs b/packages/core/animate.mjs index 1b198802..4ebb71ff 100644 --- a/packages/core/animate.mjs +++ b/packages/core/animate.mjs @@ -57,11 +57,11 @@ export const rescale = register('rescale', function (f, pat) { return pat.mul(x(f).w(f).y(f).h(f)); }); -export const move = register('move', function (dx, dy, pat) { +export const moveXY = register('moveXY', function (dx, dy, pat) { return pat.add(x(dx).y(dy)); }); -export const zoom = register('zoom', function (f, pat) { +export const zoomIn = register('zoomIn', function (f, pat) { const d = pure(1).sub(f).div(2); return pat.rescale(f).move(d, d); });