From 466fef2baf3b198113a7e376a9171f052265cac9 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 Aug 2021 16:53:43 +0100 Subject: [PATCH] Bangle 2 support and misc game tweaks --- apps.json | 12 ++-- apps/astroid/ChangeLog | 1 + apps/astroid/asteroids.js | 29 +++++++--- apps/flappy/ChangeLog | 1 + apps/flappy/app.js | 112 ++++++++++++++++++++++---------------- apps/trex/ChangeLog | 1 + apps/trex/trex.js | 46 ++++++++++++---- 7 files changed, 127 insertions(+), 75 deletions(-) diff --git a/apps.json b/apps.json index 61eb7cfd1..c730d61ce 100644 --- a/apps.json +++ b/apps.json @@ -402,9 +402,9 @@ { "id": "trex", "name": "T-Rex", "icon": "trex.png", - "version":"0.03", + "version":"0.04", "description": "T-Rex game in the style of Chrome's offline game", - "tags": "game", + "tags": "game,b2", "allow_emulator":true, "storage": [ {"name":"trex.app.js","url":"trex.js"}, @@ -418,9 +418,9 @@ { "id": "astroid", "name": "Asteroids!", "icon": "asteroids.png", - "version":"0.02", + "version":"0.03", "description": "Retro asteroids game", - "tags": "game", + "tags": "game,b2", "allow_emulator":true, "storage": [ {"name":"astroid.app.js","url":"asteroids.js"}, @@ -1096,9 +1096,9 @@ { "id": "flappy", "name": "Flappy Bird", "icon": "app.png", - "version":"0.04", + "version":"0.05", "description": "A Flappy Bird game clone", - "tags": "game", + "tags": "game,b2", "allow_emulator":true, "storage": [ {"name":"flappy.app.js","url":"app.js"}, diff --git a/apps/astroid/ChangeLog b/apps/astroid/ChangeLog index 42c1df403..faa0ca5f8 100644 --- a/apps/astroid/ChangeLog +++ b/apps/astroid/ChangeLog @@ -1 +1,2 @@ 0.02: Add "ram" keyword to allow 2v06 Espruino builds to cache function that needs to be fast +0.03: Bangle 2 support diff --git a/apps/astroid/asteroids.js b/apps/astroid/asteroids.js index da4dc017e..6cfa70b47 100644 --- a/apps/astroid/asteroids.js +++ b/apps/astroid/asteroids.js @@ -1,12 +1,24 @@ -Bangle.setLCDMode("doublebuffered"); - +var BTNL, BTNR, BTNU, BTNA; +if (process.env.HWVERSION==2) { + var tap = {}; + // use tapping on screen for left,right,accel + Bangle.on('drag',e=>tap=e); + BTNL = { read : _=>tap.b && tap.x < 58}; + BTNR = { read : _=>tap.b && tap.x > 117}; + BTNU = { read : _=>tap.b && tap.x > 58 && tap.x < 117}; + // use button for fire + BTNA = BTN1; +} else { + // use hard buttons + BTNL = BTN4; + BTNR = BTN5; + BTNU = BTN1; + BTNA = BTN2; + Bangle.setLCDMode("doublebuffered"); +} var W = g.getWidth(); var H = g.getHeight(); -g.setFontAlign(0,-1); -var BTNL = BTN4; -var BTNR = BTN5; -var BTNU = BTN1; -var BTNA = BTN2; +g.clear().setFontAlign(0,-1); function newAst(x,y) { var a = { @@ -92,8 +104,7 @@ function onFrame() { } g.clear(); - - g.drawString(score,120,0); + g.drawString(score,W-20,0); var rs = Math.PI*0.8; g.drawPoly([ ship.x+Math.cos(ship.r)*4, ship.y+Math.sin(ship.r)*4, diff --git a/apps/flappy/ChangeLog b/apps/flappy/ChangeLog index 62f107d11..349cb9d07 100644 --- a/apps/flappy/ChangeLog +++ b/apps/flappy/ChangeLog @@ -1,3 +1,4 @@ 0.02: Tweaks to make flappy bird run with less RAM available 0.03: A few tweaks to improve rendering speed 0.04: Add "ram" keyword to allow 2v06 Espruino builds to cache function that needs to be fast +0.05: Don't use Bangle.setLCDMode, just use offscreen buffer (allows widgets) diff --git a/apps/flappy/app.js b/apps/flappy/app.js index 402614a07..e9ca31fa5 100644 --- a/apps/flappy/app.js +++ b/apps/flappy/app.js @@ -1,3 +1,21 @@ +b = Graphics.createArrayBuffer(120,120,8); +var gimg = { + width:120, + height:104, + bpp:8, + buffer:b.buffer + }; + +if (process.env.HWVERSION==2) { + b.flip = function() { + g.drawImage(gimg,28,50); + }; +} else { + b.flip = function() { + g.drawImage(gimg,0,24,{scale:2}); + }; +} + var BIRDIMG = E.toArrayBuffer(atob("EQyI/v7+/v7+/gAAAAAAAP7+/v7+/v7+/gYG0tLS0gDXAP7+/v7+/v4A0tLS0tIA19fXAP7+/v4AAAAA0tLS0gDX1wDXAP7+ANfX19cA0tLSANfXANcA/v4A19fX19cA0tLSANfX1wD+/gDS19fX0gDS0tLSAAAAAAD+/gDS0tIA0tLS0gDAwMDAwAD+/gAAAM3Nzc0AwAAAAAAA/v7+/v4Azc3Nzc0AwMDAwAD+/v7+/v4AAM3Nzc0AAAAAAP7+/v7+/v7+AAAAAP7+/v7+/g==")) var FLOORIMG = require("heatshrink").decompress(atob("iEKxH+kklABuLAAlgAAwNFB34OLmAAO0YAO5wAOA")); @@ -33,26 +51,26 @@ function gameStop() { function draw() { "ram" - var H = g.getHeight()-24; - g.setColor("#71c6cf"); - g.fillRect(0,0,g.getWidth(),H-1); + var H = b.getHeight()-24; + b.setColor("#71c6cf"); + b.fillRect(0,0,b.getWidth(),H-1); floorpos++; - for (var x=-(floorpos&15);x H) gameStop(); // draw bird - g.drawImage(BIRDIMG, 6,birdy, {rotate:Math.atan2(birdvy,15)}); + b.drawImage(BIRDIMG, 6,birdy, {rotate:Math.atan2(birdvy,15)}); // draw barriers - barriers.forEach(function(b) { - b.x1--; - b.x2--; - var btop = b.y-b.gap; - var bbot = b.y+b.gap; - g.setColor("#73bf2f"); // middle - g.fillRect(b.x1+4, 0, b.x2-4, btop-1); - g.fillRect(b.x1+4, bbot, b.x2-4, H-1); - g.setColor("#c0f181"); // left - g.fillRect(b.x1+1, 0, b.x1+3, btop-1); - g.fillRect(b.x1+1, bbot, b.x1+3, H-1); - g.setColor("#538917"); // right - g.fillRect(b.x2-3, 0, b.x2-1, btop-1); - g.fillRect(b.x2-3, bbot, b.x2-1, H-1); - g.setColor("#808080"); // outlines - g.drawRect(b.x1, btop-5, b.x2, btop); // top - g.drawLine(b.x1+1, 0, b.x1+1, btop-6); - g.drawLine(b.x2-2, 0, b.x2-2, btop-6); - g.drawRect(b.x1, bbot, b.x2, bbot+5); // bottom - g.drawLine(b.x1+1, bbot+6, b.x1+1, H-1); - g.drawLine(b.x2-1, bbot+6, b.x2-1, H-1); - if (b.x1<6 && (birdy-3bbot)) + barriers.forEach(function(r) { + r.x1--; + r.x2--; + var btop = r.y-r.gap; + var bbot = r.y+r.gap; + b.setColor("#73bf2f"); // middle + b.fillRect(r.x1+4, 0, r.x2-4, btop-1); + b.fillRect(r.x1+4, bbot, r.x2-4, H-1); + b.setColor("#c0f181"); // left + b.fillRect(r.x1+1, 0, r.x1+3, btop-1); + b.fillRect(r.x1+1, bbot, r.x1+3, H-1); + b.setColor("#538917"); // right + b.fillRect(r.x2-3, 0, r.x2-1, btop-1); + b.fillRect(r.x2-3, bbot, r.x2-1, H-1); + b.setColor("#808080"); // outlines + b.drawRect(r.x1, btop-5, r.x2, btop); // top + b.drawLine(r.x1+1, 0, r.x1+1, btop-6); + b.drawLine(r.x2-2, 0, r.x2-2, btop-6); + b.drawRect(r.x1, bbot, r.x2, bbot+5); // bottom + b.drawLine(r.x1+1, bbot+6, r.x1+1, H-1); + b.drawLine(r.x2-1, bbot+6, r.x2-1, H-1); + if (r.x1<6 && (birdy-3bbot)) gameStop(); }); while (barriers.length && barriers[0].x2<=0) { @@ -94,7 +112,7 @@ function draw() { newBarrier(g.getWidth()); } - g.flip(); + b.flip(); } Bangle.on('touch', function(button) { @@ -105,11 +123,9 @@ Bangle.on('touch', function(button) { } }); -// Finally, start everything going -setTimeout(()=>{ - Bangle.setLCDMode("120x120"); - g.setBgColor("#e3db9d"); - g.clear(); - gameStart(); - setInterval(draw, 100); -},10); +Bangle.loadWidgets(); +g.clear(); +Bangle.drawWidgets(); +b.setBgColor("#e3db9d"); +gameStart(); +setInterval(draw, 100); diff --git a/apps/trex/ChangeLog b/apps/trex/ChangeLog index 587dec05b..a92abb0df 100644 --- a/apps/trex/ChangeLog +++ b/apps/trex/ChangeLog @@ -1,2 +1,3 @@ 0.02: Add "ram" keyword to allow 2v06 Espruino builds to cache function that needs to be fast 0.03: Enabled BTN2 and BTN3, added highscore (score is saved to storage and can be reset in app settings menu) +0.04: Bangle.js 2 support diff --git a/apps/trex/trex.js b/apps/trex/trex.js index 0e36ec59a..3baca101b 100644 --- a/apps/trex/trex.js +++ b/apps/trex/trex.js @@ -8,20 +8,42 @@ function saveHighScore(score) { f.write(score + "\n"); } -greal = g; g.clear(); -g = Graphics.createArrayBuffer(120,64,1,{msb:true}); -g.flip = function() { - greal.drawImage({ - width:120, - height:64, - buffer:g.buffer - },0,(240-128)/2,{scale:2}); -}; + +var BTNL, BTNR, BTNU; +if (process.env.HWVERSION==2) { + var tap = {}; + // use tapping on screen for left and right + Bangle.on('drag',e=>tap=e); + BTNL = { read : _=>tap.b && tap.x < 88}; + BTNR = { read : _=>tap.b && tap.x > 88}; + // use button for jump + BTNU = BTN1; + greal = g; + g = Graphics.createArrayBuffer(88,64,1,{msb:true}); + g.flip = function() { + greal.drawImage({ + width:88, + height:64, + buffer:g.buffer + },0,(176-128)/2,{scale:2}); + }; +} else { + // use hard buttons + BTNL = BTN2; + BTNR = BTN3; + BTNU = BTN1; + greal = g; + g = Graphics.createArrayBuffer(120,64,1,{msb:true}); + g.flip = function() { + greal.drawImage({ + width:120, + height:64, + buffer:g.buffer + },0,(240-128)/2,{scale:2}); + }; +} var W = g.getWidth(); -var BTNL = BTN2; -var BTNR = BTN3; -var BTNU = BTN1; // Images can be added like this in Espruino v2.00 var IMG = {