BangleApps/apps/petrock/app.js

74 lines
9.4 KiB
JavaScript
Raw Normal View History

2020-10-26 23:46:16 +00:00
const buffer = Graphics.createArrayBuffer(61, 61, 2, { msb: true });
const eye = {
width: buffer.getWidth(),
height: buffer.getWidth(),
bpp: 2,
transparent: 2,
buffer: buffer.buffer,
};
function getRock() {
return {
2020-10-26 23:46:16 +00:00
width: 240,
height: 160,
bpp: 2,
buffer: require("heatshrink").decompress(atob("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
};
}
2020-10-26 23:46:16 +00:00
let px = 0;
let py = 0;
let vx = 0;
let vy = 0;
let ax = 0;
let ay = 0;
let gx = 0;
let gy = 0;
function draw() {
vx += ax;
vy += ay;
px += vx;
py += vy;
const pp = Math.sqrt(px * px + py * py);
if (pp > 14) {
const vv = Math.sqrt(vx * vx + vy * vy);
const alpha = Math.atan2(px, py);
const ratio = 14 / pp;
px *= ratio;
py *= ratio;
vx = -0.9 * vv * Math.sin(alpha);
vy = -0.9 * vv * Math.cos(alpha);
}
buffer.setColor(2);
buffer.fillRect(0, 0, 60, 60);
buffer.setColor(3);
buffer.fillCircle(30, 30, 30);
buffer.setColor(0);
buffer.fillCircle(30 + px, 30 + py, 16);
g.reset(); // ensure we're drawing in white
2020-10-26 23:46:16 +00:00
g.drawImage(eye, 55, 90);
g.drawImage(eye, 125, 90);
}
Bangle.setLCDPower(1);
Bangle.setLCDTimeout(0);
g.clear(1); // ensure we're drawing in white
g.drawImage(getRock(), 0, 40);
2020-10-26 23:46:16 +00:00
Bangle.loadWidgets();
Bangle.drawWidgets();
Bangle.on('accel', (accel) => {
gx += 0.1 * (accel.x - gx);
gy += 0.1 * (accel.y - gy);
ax = 90 * gx - 100 * accel.x;
ay = 90 * gy - 100 * accel.y;
draw();
});