forked from FOSS/BangleApps
commit
2954d513b8
|
@ -30,3 +30,8 @@
|
|||
1.28: increased vibration strength, added some comments, & some QOL
|
||||
1.29: changed image
|
||||
1.30: changed image, again
|
||||
1.40: added various settings for controlling when & how to throw dice
|
||||
1.41: fixed dumb mistake
|
||||
1.42: okay maby I should've read the *whole* error log
|
||||
1.43: playing whackamole with ESLint
|
||||
1.44: fixed (?) settings app
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
var menu = true; // default to have the selection menu open
|
||||
var settings = Object.assign({
|
||||
vibrate: true,
|
||||
shake: true,
|
||||
screen: false,
|
||||
shake_timeout: 200,
|
||||
shake_duration: 100,
|
||||
}, require('Storage').readJSON("multidice.json", true) || {});
|
||||
|
||||
var menu = true; // defaults to having the menu open
|
||||
const DICE_ARRAY = [0, 4, 6, 8, 10, 12, 20, 100]; // 0 means nothing selected
|
||||
const SELECTION_ARRAY = [6, 0, 0, 0, 0, 0, 0, 0]; // default to selecting a single d20
|
||||
|
||||
// function to draw the selection menu
|
||||
function drawMenu() {
|
||||
|
||||
stringArr = new Array ("", "", "", "", "", "", "", "");
|
||||
for (i = 0; i < 8; i++) {
|
||||
var stringArr = new Array ("", "", "", "", "", "", "", "");
|
||||
for (var i = 0; i < 8; i++) {
|
||||
|
||||
if (SELECTION_ARRAY [i] != 0) {
|
||||
|
||||
|
@ -41,6 +49,7 @@ function touchHandler (button, xy) {
|
|||
return;
|
||||
}
|
||||
|
||||
var selection;
|
||||
if (xy.x <= 87) { // left
|
||||
|
||||
if (xy.y <= 43) { // first
|
||||
|
@ -84,15 +93,30 @@ function touchHandler (button, xy) {
|
|||
drawMenu();
|
||||
}
|
||||
|
||||
var shaken = false;
|
||||
var last_shaken = null;
|
||||
function accelHandler (xyz) {
|
||||
|
||||
// if the screen should be on *and* it isn't, return
|
||||
if (settings.screen && ! Bangle.isBacklightOn()) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (xyz.diff >= 0.3) {
|
||||
|
||||
menu = false;
|
||||
mutex (rollDice).catch (() => {
|
||||
shaken = true;
|
||||
last_shaken = Date.now();
|
||||
} else if (shaken && last_shaken !== null) {
|
||||
|
||||
return; // not necessary, but prevents spamming the logs
|
||||
});
|
||||
if (Date.now() - last_shaken > settings.shake_timeout) {
|
||||
|
||||
last_shaken = null;
|
||||
shaken = false;
|
||||
menu = false;
|
||||
|
||||
mutex (rollDice).catch (() => { return; });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,8 +147,8 @@ function mutex (functionRef) {
|
|||
// function to roll all selected dice, and display them
|
||||
function rollDice() {
|
||||
|
||||
resultsArr = new Uint8Array (8);
|
||||
for (i = 0; i < 8; i++) {
|
||||
var resultsArr = new Uint8Array (8);
|
||||
for (var i = 0; i < 8; i++) {
|
||||
|
||||
if (SELECTION_ARRAY [i] != 0) {
|
||||
|
||||
|
@ -135,7 +159,7 @@ function rollDice() {
|
|||
g.clear();
|
||||
g.setFont ("Vector", 40);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (var i = 0; i < 4; i++) {
|
||||
|
||||
if (SELECTION_ARRAY [i] != 0) {
|
||||
|
||||
|
@ -143,7 +167,7 @@ function rollDice() {
|
|||
}
|
||||
}
|
||||
|
||||
for (i = 4; i < 8; i++) {
|
||||
for (var i = 4; i < 8; i++) {
|
||||
|
||||
if (SELECTION_ARRAY [i] != 0) {
|
||||
|
||||
|
@ -157,14 +181,19 @@ function rollDice() {
|
|||
// triggers the vibration, then pauses before returning
|
||||
function vibrate() {
|
||||
|
||||
if (! settings.vibrate) {
|
||||
|
||||
return (Promise.resolve (0));
|
||||
}
|
||||
|
||||
return new Promise ((resolve, reject) => {
|
||||
|
||||
return Bangle.buzz (50, 1).then ((value) => {
|
||||
return Bangle.buzz (settings.shake_duration, 1).then ((value) => {
|
||||
|
||||
setTimeout (() => {
|
||||
|
||||
resolve (value);
|
||||
}, 200);
|
||||
}, 2 * settings.shake_duration + settings.shake_timeout);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -177,7 +206,7 @@ function random (max) {
|
|||
|
||||
drawMenu();
|
||||
Bangle.on ('touch', touchHandler);
|
||||
Bangle.on ('accel', accelHandler);
|
||||
if (settings.shake) { Bangle.on ('accel', accelHandler); }
|
||||
setWatch (function() {
|
||||
|
||||
menu = false;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ "id": "multidice",
|
||||
"name": "multiple dice roller",
|
||||
"shortName":"multidice",
|
||||
"version":"1.30",
|
||||
"version":"1.44",
|
||||
"description": "roll anywhere from 1-8 dice at the same time",
|
||||
"icon": "app.png",
|
||||
"tags": "tool,game",
|
||||
|
@ -10,6 +10,8 @@
|
|||
"allow_emulator": true,
|
||||
"storage": [
|
||||
{"name":"multidice.app.js","url":"app.js"},
|
||||
{"name":"multidice.settings.js","url":"settings.js"},
|
||||
{"name":"multidice.img","url":"app-icon.js","evaluate":true}
|
||||
]
|
||||
],
|
||||
"data": [{"name": "multidice.json"}]
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
(function(back) {
|
||||
var settings = Object.assign({
|
||||
vibrate: true,
|
||||
shake: true,
|
||||
screen: false,
|
||||
shake_timeout: 200,
|
||||
shake_duration: 100,
|
||||
}, require('Storage').readJSON("multidice.json", true) || {});
|
||||
|
||||
function writeSettings() {
|
||||
require('Storage').writeJSON("multidice.json", settings);
|
||||
}
|
||||
|
||||
// Show the menu
|
||||
E.showMenu({
|
||||
"" : { "title" : "multi dice roll" },
|
||||
"< Back" : () => back(),
|
||||
'vibrate on roll?': {
|
||||
value: !!settings.vibrate,
|
||||
onchange: v => {
|
||||
settings.vibrate = v;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
'allow shaking?': {
|
||||
value: !!settings.shake,
|
||||
onchange: v => {
|
||||
settings.shake = v;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
'screen on to shake?': {
|
||||
value: !!settings.screen,
|
||||
onchange: v => {
|
||||
settings.screen = v;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
'shake timeout': {
|
||||
value: settings.shake_timeout / 5,
|
||||
min: 10, max: 40,
|
||||
format: v => v * 5,
|
||||
onchange: v => {
|
||||
settings.shake_timeout = v * 5;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
'shake duration': {
|
||||
value: settings.shake_duration / 5,
|
||||
min: 10, max: 40,
|
||||
format: v => v * 5,
|
||||
onchange: v => {
|
||||
settings.shake_duration = v * 5;
|
||||
writeSettings();
|
||||
}
|
||||
},
|
||||
});
|
||||
})
|
Loading…
Reference in New Issue