From 3bfbe37a151f8514cbb259a5241b06314f2db530 Mon Sep 17 00:00:00 2001 From: jh3y Date: Tue, 12 Nov 2019 16:31:44 +0000 Subject: [PATCH] feat: hypno-rings --- apps.json | 12 ++++++++++++ apps/hypno-rings.js | 44 ++++++++++++++++++++++++++++++++++++++++++ apps/hypno-rings.json | 5 +++++ apps/hypno-rings.png | Bin 0 -> 3030 bytes 4 files changed, 61 insertions(+) create mode 100644 apps/hypno-rings.js create mode 100644 apps/hypno-rings.json create mode 100644 apps/hypno-rings.png 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 0000000000000000000000000000000000000000..9d4323dd7ea0b62d8da1d419459274553b9b44a3 GIT binary patch literal 3030 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