@dank-inc/sketchy
Version:
A Super-dank sketching library built with ♥ and typescript!
53 lines (52 loc) • 1.85 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSketch = exports.loadSketch = void 0;
var requestId;
var lastSketch;
var animateSketch = function (frame, params) {
if (!params.animated)
return;
frame(params);
var now = +new Date();
var dt = now - (params.startTime + params.time);
var time = params.time + dt;
requestId = requestAnimationFrame(function () {
return animateSketch(frame, __assign(__assign({}, params), { time: time, dt: dt, t: function (s, o) {
if (s === void 0) { s = 1; }
if (o === void 0) { o = 0; }
return 0.001 * time * s + o;
} }));
});
};
var loadSketch = function (sketch, params) {
var _a;
if (requestId) {
cancelAnimationFrame(requestId);
requestId = null;
}
if (lastSketch) {
(_a = lastSketch.onKill) === null || _a === void 0 ? void 0 : _a.call(lastSketch);
lastSketch = null;
}
lastSketch = params;
params.requestId = Math.floor(Math.random() * 100000);
params.context.clearRect(0, 0, params.width, params.height);
var frame = sketch(params);
params.animated ? animateSketch(frame, params) : frame(params);
params.stop = function () { return (params.animated = false); };
return params;
};
exports.loadSketch = loadSketch;
var createSketch = function (sketch) { return sketch; };
exports.createSketch = createSketch;