mirror of https://github.com/espruino/BangleApps
84 lines
2.1 KiB
JavaScript
84 lines
2.1 KiB
JavaScript
class BanglejsApp {
|
|
constructor() {
|
|
this.x = 0;
|
|
this.y = 0;
|
|
this.settings = {
|
|
xoffset: 0,
|
|
yoffset: 0,
|
|
};
|
|
}
|
|
|
|
load_settings() {
|
|
let settings = require('Storage').readJSON('calibration.json', true) || {active: false};
|
|
|
|
// do nothing if the calibration is deactivated
|
|
if (settings.active === true) {
|
|
// cancel the calibration offset
|
|
Bangle.on('touch', function(button, xy) {
|
|
xy.x += settings.xoffset;
|
|
xy.y += settings.yoffset;
|
|
});
|
|
}
|
|
if (!settings.xoffset) settings.xoffset = 0;
|
|
if (!settings.yoffset) settings.yoffset = 0;
|
|
|
|
console.log('loaded settings:');
|
|
console.log(settings);
|
|
|
|
return settings;
|
|
}
|
|
|
|
save_settings() {
|
|
this.settings.active = true;
|
|
this.settings.reload = false;
|
|
require('Storage').writeJSON('calibration.json', this.settings);
|
|
|
|
console.log('saved settings:');
|
|
console.log(this.settings);
|
|
}
|
|
|
|
explain() {
|
|
/*
|
|
* TODO:
|
|
* Present how to use the application
|
|
*
|
|
*/
|
|
}
|
|
|
|
drawTarget() {
|
|
this.x = 16 + Math.floor(Math.random() * (g.getWidth() - 32));
|
|
this.y = 40 + Math.floor(Math.random() * (g.getHeight() - 80));
|
|
|
|
g.clearRect(0, 0, g.getWidth(), g.getHeight());
|
|
g.drawLine(this.x, this.y - 5, this.x, this.y + 5);
|
|
g.drawLine(this.x - 5, this.y, this.x + 5, this.y);
|
|
g.setFont('Vector', 10);
|
|
g.drawString('current offset: ' + this.settings.xoffset + ', ' + this.settings.yoffset, 0, 24);
|
|
}
|
|
|
|
setOffset(xy) {
|
|
this.settings.xoffset = Math.round((this.settings.xoffset + (this.x - Math.floor((this.x + xy.x)/2)))/2);
|
|
this.settings.yoffset = Math.round((this.settings.yoffset + (this.y - Math.floor((this.y + xy.y)/2)))/2);
|
|
}
|
|
}
|
|
|
|
|
|
E.srand(Date.now());
|
|
|
|
calibration = new BanglejsApp();
|
|
calibration.load_settings();
|
|
|
|
let modes = {
|
|
mode : 'custom',
|
|
btn : function(n) {
|
|
calibration.save_settings(this.settings);
|
|
load();
|
|
},
|
|
touch : function(btn, xy) {
|
|
calibration.setOffset(xy);
|
|
calibration.drawTarget();
|
|
},
|
|
};
|
|
Bangle.setUI(modes);
|
|
calibration.drawTarget();
|