Skip to content

Instantly share code, notes, and snippets.

@Aleksey-Danchin
Last active March 27, 2017 15:49
Show Gist options
  • Save Aleksey-Danchin/6365f3aaf4a33ef015d80dc8bfa8a660 to your computer and use it in GitHub Desktop.
Save Aleksey-Danchin/6365f3aaf4a33ef015d80dc8bfa8a660 to your computer and use it in GitHub Desktop.
Left Lever
!(function () {
class Lever {
constructor(data) {
const lever = this;
lever.canvas = document.getElementById(data.canvasId);
lever.context = lever.canvas.getContext('2d');
lever.canvas.width = data.width;
lever.canvas.height = data.height;
lever.objects = [];
lever.registerBase = new Map;
lever.register('point', _drawPoint);
lever.register('line', _drawLine);
}
register(typeName, handler) {
const lever = this;
lever.registerBase.set(typeName, handler);
}
add(data) {
const lever = this;
lever.objects.push(data);
}
draw() {
const lever = this;
for (const data of lever.objects) {
if (data.type && lever.registerBase.has(data.type)) {
lever.registerBase.get(data.type)(lever.context, data, lever);
}
}
}
clear() {
const lever = this;
lever.canvas.width = lever.canvas.width;
}
interval(loop, timeout) {
const lever = this;
const startMoment = Date.now();
let n = 0;
return setInterval(() => loop(Date.now() - startMoment, ++n, lever), timeout);
}
}
window.Lever = Lever;
function _drawPoint(context, data, lever) {
context.beginPath();
context.arc(data.x, data.y, data.r, 0, 2 * Math.PI, false);
context.fillStyle = data.color;
context.fill();
}
function _drawLine(context, data, lever) {
context.beginPath();
context.moveTo(data.x1, data.y1);
context.lineTo(data.x2, data.y2);
context.stroke();
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment