diff --git a/apps.json b/apps.json index d0be75c34..746956ad5 100644 --- a/apps.json +++ b/apps.json @@ -350,6 +350,18 @@ {"name":"*pparrot","url":"party-parrot-icon.js","evaluate":true} ] }, + { "id": "rings", + "name": "Hypno Rings", + "icon": "rings.png", + "description": "Experiment with trippy rings, press buttons for change", + "tags": "rings,hypnosis,psychadelic", + "type":"app", + "storage": [ + {"name":"+hrings","url":"hypno-rings.json"}, + {"name":"-hrings","url":"hypno-rings.js"}, + {"name":"*hrings","url":"hypno-rings-icon.js","evaluate":true} + ] + }, { "id": "blescan", "name": "BLE Scanner", diff --git a/apps/hypno-rings.js b/apps/hypno-rings.js new file mode 100644 index 000000000..356273d54 --- /dev/null +++ b/apps/hypno-rings.js @@ -0,0 +1,44 @@ +class Ring { + constructor() { + this.alive = true; + this.radius = 0; + this.color = [ + Math.random() > 0.5 ? 1 : 0, Math.random() > 0.5 ? 1 : 0, Math.random() > 0.5 ? 1 : 0 + ]; + } +} + +const LIMIT = 10; +const RADIUS_LIMIT = 240; +const pool = []; +let RANDOM = 0; +let BUFFER = 0; +let BUFFER_SPREAD = 20; + +const animate = () => { + if (pool.length < LIMIT && BUFFER === 0) { + const available = pool.filter(ring => !ring.alive); + const newRing = available.length ? available[0] : new Ring(); + pool.push(newRing); + BUFFER = BUFFER_SPREAD; + } + g.clear(); + if (BUFFER > 0) BUFFER--; + for (const ring of pool) { + if (ring.radius > RADIUS_LIMIT) { + ring.radius = 0; + ring.alive = false; + } else { + if (RANDOM) g.setColor(ring.color[0], ring.color[1], ring.color[2]); + else g.setColor(1, 1, 1); + g.drawCircle(120, 120, ring.radius++); + } + } + setTimeout(animate, 1000/60); +}; + +setWatch(() => (BUFFER_SPREAD += 5), BTN1, {repeat: true}); +setWatch(() => (RANDOM = !RANDOM), BTN2, {repeat: true}); +setWatch(() => (BUFFER_SPREAD -= 5), BTN3, {repeat: true}); + +animate(); \ No newline at end of file diff --git a/apps/hypno-rings.json b/apps/hypno-rings.json new file mode 100644 index 000000000..a21a84561 --- /dev/null +++ b/apps/hypno-rings.json @@ -0,0 +1,5 @@ +{ + "name":"Hypno Rings","type":"app", + "icon":"*hrings", + "src":"-hrings" +} \ No newline at end of file diff --git a/apps/hypno-rings.png b/apps/hypno-rings.png new file mode 100644 index 000000000..9d4323dd7 Binary files /dev/null and b/apps/hypno-rings.png differ