From 0e33217d9a3957153a9d50192538bd6af59f044b Mon Sep 17 00:00:00 2001 From: jeffmer Date: Wed, 3 Jun 2020 17:21:33 +0100 Subject: [PATCH] Add files via upload --- apps/life/ChangeLog | 3 + apps/life/life-icon.js | 1 + apps/life/life.js | 122 ++++++++++++++++++++++++++++++++++++++++- apps/life/life.min.js | 5 ++ apps/life/life.png | Bin 0 -> 1566 bytes 5 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 apps/life/ChangeLog create mode 100644 apps/life/life-icon.js create mode 100644 apps/life/life.min.js create mode 100644 apps/life/life.png diff --git a/apps/life/ChangeLog b/apps/life/ChangeLog new file mode 100644 index 000000000..b26468a22 --- /dev/null +++ b/apps/life/ChangeLog @@ -0,0 +1,3 @@ +0.01: New App! +0.02: Updated to be more responsive re suggestion by Gordon + diff --git a/apps/life/life-icon.js b/apps/life/life-icon.js new file mode 100644 index 000000000..8127abd79 --- /dev/null +++ b/apps/life/life-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AFkLC6+wC6u73YuVC7JIUCwIZBLywwTIwYwTC4QwUC4OwGCgXCCoQwRXwYwTO4wwQO4wwQO44wPO44wPO5G7olACY9EAAVLO44LCCosECwYXDGAm0BQIvFCwoABCwIcCCoQuHCwwXEAAguFBQgFBoEEC451GIwQVDAgIXBIhQwECoYEBYAS5NCogEBC6BGFVAQXPGAoXRGAoXSO6owGC6Z3VGAoXUd4gWRGAYXVIwQXUIwReSC7gWUgELFyoXBCyoA/ACwA==")) \ No newline at end of file diff --git a/apps/life/life.js b/apps/life/life.js index 1d401dfcc..4e71c3069 100644 --- a/apps/life/life.js +++ b/apps/life/life.js @@ -1 +1,121 @@ -//temporary +Bangle.setLCDTimeout(30); + +var buf = Graphics.createArrayBuffer(160,160,1,{msb:true}); + +function flip() { + g.setColor(1,1,1); + g.drawImage({width:160,height:160,bpp:1,buffer:buf.buffer},40,40); + buf.clear(); +} + +var genA = new Uint8Array(324); +var genB = new Uint8Array(324); +var generation=0; +var start=Date.now(); +var currentY=1; + +function initDraw(gen){ + for (let y = 1; y<17; ++y) + for (let x = 1; x<17; ++x) { + var r = Math.random()<0.5?1:0; + gen[x+y*18] = r; + if (r==1){ + var Xr=10*(x-1); + var Yr=10*(y-1); + buf.fillRect(Xr,Yr, Xr+7,Yr+7); + } + } + flip(); +} + +function howlong(){ + var now = Date.now(); + const duration = Math.floor(now-start); + start=now; + ++generation; + g.setFont("6x8",2); + g.setFontAlign(-1,-1,0); + g.drawString('Gen:'+generation+' '+duration+'ms ',20,220,true); +} + +function next(){ + "ram"; + var cur=genA, fut=genB, y=currentY; + var count=(p)=>{return cur[p-19]+cur[p-18]+cur[p-17]+cur[p-1]+cur[p+1]+cur[p+17]+cur[p+18]+cur[p+19];}; + for (let x = 1; x<17; ++x){ + var ind = x+y*18; + var nc = count(ind); + var r = (cur[ind]==1 && nc==2 || nc==3)?1:0; + fut[ind]=r; + if (r==1){ + var Xr=10*(x-1); + var Yr=10*(y-1); + buf.fillRect(Xr,Yr, Xr+7,Yr+7); + } + } + if (y==16){ + flip(); + var tmp = genA; genA=genB; genB=tmp; + howlong(); + currentY=1; + } else ++currentY; +} + +function reset(){ + g.setColor(1,1,1); + initDraw(genA); + currentY=1; + generation = 0; +} + +var intervalRef = null; + +function stopdraw() { + if(intervalRef) {clearInterval(intervalRef);} + } + +function startdraw() { + g.clear(); + Bangle.drawWidgets(); + g.reset(); + g.setColor(1,1,1); + g.setFont("6x8",2); + g.setFontAlign(0,0,3); + g.drawString("Reset",230,200); + intervalRef = setInterval(next,60); + } + + function setButtons(){ + setWatch(Bangle.showLauncher, BTN2, {repeat:false,edge:"falling"}); + setWatch(reset, BTN3, {repeat:true,edge:"rising"}); + } + + var SCREENACCESS = { + withApp:true, + request:function(){ + this.withApp=false; + stopdraw(); + clearWatch(); + }, + release:function(){ + this.withApp=true; + startdraw(); + setButtons(); + } + }; + + Bangle.on('lcdPower',function(on) { + if (!SCREENACCESS.withApp) return; + if (on) { + startdraw(); + } else { + stopdraw(); + } + }); + + g.clear(); + Bangle.loadWidgets(); + startdraw(); + setButtons(); + reset(); + \ No newline at end of file diff --git a/apps/life/life.min.js b/apps/life/life.min.js new file mode 100644 index 000000000..f8f3f3858 --- /dev/null +++ b/apps/life/life.min.js @@ -0,0 +1,5 @@ +Bangle.setLCDTimeout(30);var buf=Graphics.createArrayBuffer(160,160,1,{msb:!0});function flip(){g.setColor(1,1,1);g.drawImage({width:160,height:160,bpp:1,buffer:buf.buffer},40,40);buf.clear()}var genA=new Uint8Array(324),genB=new Uint8Array(324),generation=0,start=Date.now(),currentY=1;function initDraw(a){for(var d=1;17>d;++d)for(var e=1;17>e;++e){var c=.5>Math.random()?1:0;a[e+18*d]=c;if(1==c){c=10*(e-1);var b=10*(d-1);buf.fillRect(c,b,c+7,b+7)}}flip()} +function howlong(){var a=Date.now(),d=Math.floor(a-start);start=a;++generation;g.setFont("6x8",2);g.setFontAlign(-1,-1,0);g.drawString("Gen:"+generation+" "+d+"ms ",20,220,!0)} +function next(){"ram";for(var a=genA,d=genB,e=currentY,c=1;17>c;++c){var b=c+18*e,f=a[b-19]+a[b-18]+a[b-17]+a[b-1]+a[b+1]+a[b+17]+a[b+18]+a[b+19];f=1==a[b]&&2==f||3==f?1:0;d[b]=f;1==f&&(b=10*(c-1),f=10*(e-1),buf.fillRect(b,f,b+7,f+7))}16==e?(flip(),a=genA,genA=genB,genB=a,howlong(),currentY=1):++currentY}function reset(){g.setColor(1,1,1);initDraw(genA);currentY=1;generation=0}var intervalRef=null;function stopdraw(){intervalRef&&clearInterval(intervalRef)} +function startdraw(){g.clear();Bangle.drawWidgets();g.reset();g.setColor(1,1,1);g.setFont("6x8",2);g.setFontAlign(0,0,3);g.drawString("Reset",230,200);intervalRef=setInterval(next,60)}function setButtons(){setWatch(Bangle.showLauncher,BTN2,{repeat:!1,edge:"falling"});setWatch(reset,BTN3,{repeat:!0,edge:"rising"})}var SCREENACCESS={withApp:!0,request:function(){this.withApp=!1;stopdraw();clearWatch()},release:function(){this.withApp=!0;startdraw();setButtons()}}; +Bangle.on("lcdPower",function(a){SCREENACCESS.withApp&&(a?startdraw():stopdraw())});g.clear();Bangle.loadWidgets();startdraw();setButtons();reset(); diff --git a/apps/life/life.png b/apps/life/life.png new file mode 100644 index 0000000000000000000000000000000000000000..a88157f5cb1a32cb5caa0011832a6dd15491769e GIT binary patch literal 1566 zcmV+(2I2XMP)n}Yi2PQS{n=DzP1yP+Y=uFLq%-S44+QLd;~3}0#K~R9!m`n_9r*aV-l$^# zNbN_OD9Sg(VcKaKfhA)dzY%0bb*!iYm&RoAQ%YZGc3Vb3kb7$ki9Q76Rdic6J^ZwW z6uvDXP)XKnrUgPSG4$6zh_W8Y13R+mZO?>3q9p{Z=q)t@C6P;Ib|r>WM}S`eW5AAF zDzj_8;nWfW0xN@Kt%Oc4_2sk46REd>TY#~uY(6Afl>^rWo=2QY=v3oBd7}RpY=xyKW~ZN2yDWAsEh5n>0!IUbxG|ou*8CD7Cva=$ zWZ@slg!^9oNmO$>K_;92^3Q`m*nIu|#HOv^D*-`*1n^w5pR)N}jaiG3L)g$vVi(n1 zB`$|WrGFr?>5;~^n#2o<-W!ZM>l|dIqCZsV5?BOSU;^-fv%srYN28s~y=ZTpiZ^w# zw4R82rMT{EC<&CoWYXP|%bL|HyadF7o$nM24@Z#4Cak%O+K>Fi#?$-mtNA!HIlYtZ zk)=z%y$4~3RemIZqK%j@s{HK$w&i@o@_^=o>PcVK_dM^ZFDA!-e{C$jR$TWrnA(YC z(%mwWGq)SHPv(5{V^wo}LZze5owBO_yWYnO?!e$Bcdb*$J_%eq6Ujz!MObxF8&Xj} zW-T8T3)N{K7+EAvuFZ9fLi?C8p09d2;9fxGh()&ao__9)`ib*)KtTqUZhlCyeO!p3 z${7{D71b*c1Qm;@t?DzX$TV1c6r~5jLDVa_(bes)-=mZEAfg^HR`McuME%lDs63FjCerRqg|7p| z#bsR0Yz|jZ0uBIu8&B{1V5WuV5paY-tK1E=1;mBC8@=hA!z_-Q(y?)(J?%07=Bg~} zm;ae}V?A*@d2rm?SC$1@ie+x(@8i}Kf$KrLK$1YTGCcu&3VbZ+VZWpUn?|2M+YHl& zA@ahK-k(^kr!X3EoSqVTm1FE7WM)~np-9<(rX&onlGBF0|S?AUWM=` zLPV6&HYu;j+sI|J$$r+>K8ny?vGne;q5f526KJXuZ#=v29h9G=lvU^~XyjGKw zrRu?xwhdh$JoETx_PrsS&OCl9z4e~|wI2&u!2bjO3ry|)!9vCF Qf&c&j07*qoM6N<$g6$U&9smFU literal 0 HcmV?d00001