diff --git a/apps.json b/apps.json index 9c293b480..06e1566cf 100644 --- a/apps.json +++ b/apps.json @@ -93,6 +93,17 @@ {"name":"*clickms","url":"click-master-icon.js","evaluate":true} ] }, + { "id": "horsey", + "name": "Horse Race!", + "icon": "horse-race.png", + "description": "Get several friends to start the game, then compete to see who can press BTN1 the most!", + "tags": "game", + "storage": [ + {"name":"+horsey","url":"horse-race.json"}, + {"name":"-horsey","url":"horse-race.js"}, + {"name":"*horsey","url":"horse-race-icon.js","evaluate":true} + ] + }, { "id": "compass", "name": "Compass", "icon": "compass.png", diff --git a/apps/horse-race-icon.json b/apps/horse-race-icon.json new file mode 100644 index 000000000..23a974ef3 --- /dev/null +++ b/apps/horse-race-icon.json @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AVvNPp95F1tPqujF9IuCvPO5wspAAXHF84uFp4uBL84xEvPN5q+rqtiCBl6F7tiAAY9LvQDBF86cDvQvCGLYvEGAr7EF4IwDF7c4GQwuERwIACqpecrlcF4lWLw4ACF7s3F58rGDIvEA4VcFwtWL4ovSCwwvHFoiOHGCQXHXYdcBwQuIDIwsMI5QwEGIKNERgh6JFpIuKAAOAGIYvCqpYJAwUyFxaNIGAovEXBheOF5pfCrl6RYjoTVAYvMRwYOKF76NDwAveGBaNEF8AwLFzgvHeRovoqtWFxtVDQbwSF44KBqouLDYzAYqz8OPg5gSD6K9FGCIvJVoIdLdoxgUDop9NF7gcEPZwvZJgwvnbiwTHF54bLMCEsAAIvVTRBEOF7zBSF7StPGDB1HPpyMVDAgZFbxztWAH4A/AGw")) diff --git a/apps/horse-race.js b/apps/horse-race.js new file mode 100644 index 000000000..5ec61fadd --- /dev/null +++ b/apps/horse-race.js @@ -0,0 +1,70 @@ +Bangle.setLCDMode("doublebuffered"); +var img = require("Storage").read("*horsey"); +var mycounter = 0; +var players = {}; +setWatch(x=>{ + mycounter++; + updateAdvertising(); +},BTN1,{repeat:true}); + +function updateAdvertising() { +try { + NRF.setAdvertising({},{ + manufacturer: 0x0590, + manufacturerData: new Uint8Array([mycounter>>8,mycounter&255]), + interval: 60 + }); +} catch(e){} +} + +function drawPlayers() { + g.clear(1); + g.setBgColor(0,0.7,0); + g.setFont("6x8",2); + g.setFontAlign(0,0,1); + var max = mycounter; + for (var player of players) { + max = Math.max(player.cnt, mycounter); + } + var offset = 0; + if (max > 220) + offset = max-220; + + var d = 63 - (offset&63); + g.fillRect(0,10,240,12); + for (var x=d;x<240;x+=64) + g.fillRect(x,12,x+2,12+20); + var y = 20; + g.drawImage(img, mycounter-offset,y); + + for (var player of players) { + y+=45; + g.drawString(player.name,10,y); + g.drawImage(img, player.cnt-offset,20); + } + + g.fillRect(0,150,240,152); + for (var x=d;x<240;x+=64) + g.fillRect(x,152,x+2,160); + g.flip(); +} + +function doScan() { + NRF.findDevices(devs=>{ + devs.forEach(dev => { + players[dev.id] = { + name : dev.id.substr(12,5), + cnt : (dev.manufacturerData[0]<<8)|dev.manufacturerData[1] + }; + }); + drawPlayers(); + doScan(); + },{timeout : 250, filters : [{ manufacturerData:{0x0590:{}} }] }); +} + +drawPlayers(); +try { NRF.wake(); } catch (e) {} +doScan(); +setInterval(drawPlayers, 100); + +updateAdvertising(); diff --git a/apps/horse-race.json b/apps/horse-race.json new file mode 100644 index 000000000..3c141365d --- /dev/null +++ b/apps/horse-race.json @@ -0,0 +1,5 @@ +{ + "name":"Horse Race", + "icon": "*horser", + "src":"-horser" +} diff --git a/apps/horse-race.png b/apps/horse-race.png new file mode 100644 index 000000000..2cef05005 Binary files /dev/null and b/apps/horse-race.png differ