From 64b7b4b462fa6974bb03bd874ca3bcdd5bd6e177 Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 3 Nov 2019 09:18:25 -0600 Subject: [PATCH 1/3] Updates, new terrifying lava options. - Lava now has flow and growth options - APA102 is now the default - Changed the default wifi password - Fix #include (capitalization error) --- TWANG32/Lava.h | 49 ++++++++++++++++++++++- TWANG32/TWANG32.ino | 98 ++++++++++++++++++++++++++++----------------- TWANG32/config.h | 6 +-- TWANG32/wifi_ap.h | 12 ++++-- 4 files changed, 120 insertions(+), 45 deletions(-) diff --git a/TWANG32/Lava.h b/TWANG32/Lava.h index b762868..68aae54 100644 --- a/TWANG32/Lava.h +++ b/TWANG32/Lava.h @@ -3,9 +3,10 @@ class Lava { public: - void Spawn(int left, int right, int ontime, int offtime, int offset, int state); + void Spawn(int left, int right, int ontime, int offtime, int offset, int state, float grow_rate, float flow_vector); void Kill(); int Alive(); + void Update(); int _left; int _right; int _ontime; @@ -13,13 +14,18 @@ class Lava int _offset; long _lastOn; int _state; + float _grow_rate = 0.0; // size grows by this much each tick + float _flow_vector = 0.0; // endpoints move in the direction each tick. static const int OFF = 0; static const int ON = 1; private: int _alive; + float _growth = 0; + float _flow = 0; + int _width; }; -void Lava::Spawn(int left, int right, int ontime, int offtime, int offset, int state){ +void Lava::Spawn(int left, int right, int ontime, int offtime, int offset, int state, float grow_rate, float flow_vector){ _left = left; _right = right; _ontime = ontime; @@ -28,6 +34,13 @@ void Lava::Spawn(int left, int right, int ontime, int offtime, int offset, int s _alive = 1; _lastOn = millis()-offset; _state = state; + + _width = _right - _left; + + _grow_rate = fabs(grow_rate); // only allow positive growth + _flow_vector = flow_vector; + + } void Lava::Kill(){ @@ -37,3 +50,35 @@ void Lava::Kill(){ int Lava::Alive(){ return _alive; } + +// this gets called on every frame. +void Lava::Update() { + // update how much it has changed + if (_grow_rate != 0) { + _growth += _grow_rate; + if (_growth >= 1.0) { + if (_left > 0) + _left -= 1; + + if (_right < VIRTUAL_LED_COUNT) + _right += 1; + + _growth = 0.0; + } + } + + if (_flow_vector != 0) { + _flow += _flow_vector; + if (fabs(_flow) >=1) { + if (_left > 1 && _left < VIRTUAL_LED_COUNT - _width) { + _left += (int)_flow; + } + if (_right > _width && _right < VIRTUAL_LED_COUNT) + _right += (int)_flow; + + + _flow = 0.0; + } + } + +} diff --git a/TWANG32/TWANG32.ino b/TWANG32/TWANG32.ino index ac6eeeb..8c13197 100644 --- a/TWANG32/TWANG32.ino +++ b/TWANG32/TWANG32.ino @@ -39,12 +39,12 @@ // twang files #include "config.h" #include "twang_mpu.h" -#include "Enemy.h" -#include "Particle.h" -#include "Spawner.h" -#include "Lava.h" -#include "Boss.h" -#include "Conveyor.h" +#include "enemy.h" +#include "particle.h" +#include "spawner.h" +#include "lava.h" +#include "boss.h" +#include "conveyor.h" #include "iSin.h" #include "sound.h" #include "settings.h" @@ -419,12 +419,14 @@ void loadLevel(){ activate: The delay in milliseconds before the first enemy Lava: You can create 4 pools of lava. - spawnLava(left, right, ontime, offtime, offset, state); + spawnLava(left, right, ontime, offtime, offset, state, grow, flow); left: the lower end of the lava pool right: the upper end of the lava pool ontime: How long the lave stays on. offset: the delay before the first switch state: does it start on or off + grow: This specifies the rate of growth. Use 0 for no growth. Reasonable growth is 0.1 to 0.5 + flow: This specifies the rate/direction of flow. Reasonable numbers are 0.2 to 0.8 Conveyor: You can create 2 conveyors. spawnConveyor(startPoint, endPoint, direction) @@ -450,25 +452,36 @@ void loadLevel(){ break; case 1: // Slow moving enemy - spawnEnemy(900, 0, 1, 0); + spawnEnemy(900, 0, 1, 0); break; - case 2: + case 2: // Spawning enemies at exit every 2 seconds spawnPool[0].Spawn(1000, 3000, 2, 0, 0); break; case 3: // Lava intro - spawnLava(400, 490, 2000, 2000, 0, Lava::OFF); + spawnLava(400, 490, 2000, 2000, 0, Lava::OFF, 0, 0); spawnEnemy(350, 0, 1, 0); spawnPool[0].Spawn(1000, 5500, 3, 0, 0); - - break; + break; case 4: - // Sin enemy - spawnEnemy(700, 1, 7, 275); - spawnEnemy(500, 1, 5, 250); + // intro to moving lava (down) + spawnLava(400, 490, 2000, 2000, 0, Lava::OFF, 0, -0.5); + spawnEnemy(350, 0, 1, 0); + spawnPool[0].Spawn(1000, 5500, 3, 0, 0); break; - case 5: + case 5: + // lava spreading + spawnLava(400, 450, 2000, 2000, 0, Lava::OFF, 0.25, 0); + spawnEnemy(350, 0, 1, 0); + spawnPool[0].Spawn(1000, 5500, 3, 0, 0); + break; + case 6: + // Sin wave enemy + spawnEnemy(700, 1, 7, 275); + spawnEnemy(500, 1, 5, 250); + break; + case 7: // Sin enemy swarm spawnEnemy(700, 1, 7, 275); spawnEnemy(500, 1, 5, 250); @@ -477,15 +490,21 @@ void loadLevel(){ spawnEnemy(800, 1, 5, 350); spawnEnemy(400, 1, 7, 150); - spawnEnemy(450, 1, 5, 400); - + spawnEnemy(450, 1, 5, 400); + break; + case 8: + // lava moving up + playerPosition = 200; + spawnLava(10, 180, 2000, 2000, 0, Lava::OFF, 0, 0.5); + spawnEnemy(350, 0, 1, 0); + spawnPool[0].Spawn(1000, 5500, 3, 0, 0); break; - case 6: + case 9: // Conveyor spawnConveyor(100, 600, -6); spawnEnemy(800, 0, 0, 0); break; - case 7: + case 10: // Conveyor of enemies spawnConveyor(50, 1000, 6); spawnEnemy(300, 0, 0, 0); @@ -496,30 +515,36 @@ void loadLevel(){ spawnEnemy(800, 0, 0, 0); spawnEnemy(900, 0, 0, 0); break; - case 8: // spawn train; + case 11: + // lava spread and fall + spawnLava(400, 450, 2000, 2000, 0, Lava::OFF, 0.2, -0.5); + spawnEnemy(350, 0, 1, 0); + spawnPool[0].Spawn(1000, 5500, 3, 0, 0); + break; + case 12: // spawn train; spawnPool[0].Spawn(900, 1300, 2, 0, 0); break; - case 9: // spawn train skinny attack width; + case 13: // spawn train skinny attack width; attack_width = 32; spawnPool[0].Spawn(900, 1800, 2, 0, 0); break; - case 10: // evil fast split spawner + case 14: // evil fast split spawner spawnPool[0].Spawn(550, 1500, 2, 0, 0); spawnPool[1].Spawn(550, 1500, 2, 1, 0); break; - case 11: // split spawner with exit blocking lava + case 15: // split spawner with exit blocking lava spawnPool[0].Spawn(500, 1200, 2, 0, 0); spawnPool[1].Spawn(500, 1200, 2, 1, 0); - spawnLava(900, 950, 2200, 800, 2000, Lava::OFF); + spawnLava(900, 950, 2200, 800, 2000, Lava::OFF, 0, 0); break; - case 12: + case 16: // Lava run - spawnLava(195, 300, 2000, 2000, 0, Lava::OFF); - spawnLava(400, 500, 2000, 2000, 0, Lava::OFF); - spawnLava(600, 700, 2000, 2000, 0, Lava::OFF); + spawnLava(195, 300, 2000, 2000, 0, Lava::OFF, 0, 0); + spawnLava(400, 500, 2000, 2000, 0, Lava::OFF, 0, 0); + spawnLava(600, 700, 2000, 2000, 0, Lava::OFF, 0, 0); spawnPool[0].Spawn(1000, 3800, 4, 0, 0); break; - case 13: + case 17: // Sin enemy #2 practice (slow conveyor) spawnEnemy(700, 1, 7, 275); spawnEnemy(500, 1, 5, 250); @@ -527,7 +552,7 @@ void loadLevel(){ spawnPool[1].Spawn(0, 5500, 5, 1, 10000); spawnConveyor(100, 900, -4); break; - case 14: + case 18: // Sin enemy #2 (fast conveyor) spawnEnemy(800, 1, 7, 275); spawnEnemy(700, 1, 7, 275); @@ -536,7 +561,7 @@ void loadLevel(){ spawnPool[1].Spawn(0, 5500, 5, 1, 10000); spawnConveyor(100, 900, -6); break; - case 15: // (don't edit last level) + case 19: // (don't edit last level) // Boss this should always be the last level spawnBoss(); break; @@ -577,10 +602,10 @@ void spawnEnemy(int pos, int dir, int speed, int wobble){ } } -void spawnLava(int left, int right, int ontime, int offtime, int offset, int state){ +void spawnLava(int left, int right, int ontime, int offtime, int offset, int state, float grow, float flow){ for(int i = 0; i pos) return true; + if(LP._left <= pos && LP._right > pos) return true; } } return false; diff --git a/TWANG32/config.h b/TWANG32/config.h index fa93e1e..455e26b 100644 --- a/TWANG32/config.h +++ b/TWANG32/config.h @@ -34,9 +34,9 @@ #define VIRTUAL_LED_COUNT 1000 // what type of LED Strip....uncomment to define only one of these -//#define USE_APA102 +#define USE_APA102 -.#define USE_NEOPIXEL +//#define USE_NEOPIXEL // Check to make sure LED choice was done right #if !defined(USE_NEOPIXEL) && !defined(USE_APA102) @@ -53,7 +53,7 @@ #define CONVEYOR_BRIGHTNESS 8 #define LAVA_OFF_BRIGHTNESS 4 #define MAX_LEDS VIRTUAL_LED_COUNT // these LEDS can handle the max - #define MIN_REDRAW_INTERVAL 1000.0 / 60.0 // divide by frames per second..if you tweak adjust player speed + #define MIN_REDRAW_INTERVAL 1000.0 / 60.0 // divide by frames per second..if you tweak, adjust player speed #endif #ifdef USE_NEOPIXEL diff --git a/TWANG32/wifi_ap.h b/TWANG32/wifi_ap.h index d880693..618e3bd 100644 --- a/TWANG32/wifi_ap.h +++ b/TWANG32/wifi_ap.h @@ -2,7 +2,7 @@ #include "settings.h" const char* ssid = "TWANG_AP"; -const char* passphrase = "esp32rocks"; +const char* passphrase = "12345666"; WiFiServer server(80); @@ -22,11 +22,15 @@ void ap_setup() { * @param ssid_hidden Network cloaking (0 = broadcast SSID, 1 = hide SSID) */ ret = WiFi.softAP(ssid, passphrase, 2, 0); - - //Serial.println("\r\nWiFi AP online ..."); server.begin(); - + Serial.print("\r\nWiFi SSID: "); + Serial.println(ssid); + Serial.print("WiFi Password: "); + Serial.println(passphrase); + Serial.println("Web Server Address: http://192.168.4.1"); + + } void sendStatsPage(WiFiClient client) { From 249486fe7f06559a9334b8acf6be92db3cb1e12b Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 3 Nov 2019 10:53:32 -0600 Subject: [PATCH 2/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 551dfde..9c375a9 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This was ported from the [TWANG fork](https://github.com/bdring/TWANG) by bdring - All of the Arduino version game features are functional. - The game now has a WiFi access port to get game stats. Connect a smartphone or computer to see them. - **SSID:** TWANG_AP - - **Password:** esp32rocks + - **Password:** 12345666 - **URL:** 192.168.4.1 - You can update these settings over WiFi - LED Brightness From ed28b897ffa703b2f46e30f07aeb664782082454 Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 3 Nov 2019 11:52:06 -0600 Subject: [PATCH 3/3] Update README.md --- README.md | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 9c375a9..29c4391 100644 --- a/README.md +++ b/README.md @@ -23,14 +23,13 @@ This was ported from the [TWANG fork](https://github.com/bdring/TWANG) by bdring - **Password:** 12345666 - **URL:** 192.168.4.1 - You can update these settings over WiFi + - LED Count - LED Brightness - Audio Volume - Joystick Deadzone (removes drift) - Attack Threshold (twang sensitivity) - Lives Per Level - - ![](http://www.buildlog.net/blog/wp-content/uploads/2018/03/20180328_122254.jpg) ## TO DO List: @@ -38,30 +37,15 @@ This was ported from the [TWANG fork](https://github.com/bdring/TWANG) by bdring - Wireless features~~ - 2 Player features by linking controllers. TBD ======= -- Setting - - I want to figure out a way to have the LED count be set via the web server. I often bring several length LED strings to an event because I don't know which size is most appropriate. A last minute recompile is not a good solution. -- Wireless features~~ - - 2 Player features by linking controllers. TBD +- Settings: + - Change strip type. - Digitized Audio - Currently the port uses the same square wave tones of the the Arduino version. - I want to convert to digitized high quality sound effects. - Possibly mix multiple sounds so things like lava and movement sound good at the same time. -- Custom PCB - - Make wiring easier. - - More robust. - - Integrated audio amplifier. -- Python (it might be fun to make a Python version) - -- Digitized Audio - - Currently the port uses the same square wave tones of the the Arduino version. - - I want to convert to digitized high quality sound effects. - - Possibly mix multiple sounds so things like lava and movement sound good at the same time. - - Better looking mobile web interface (looks more like a web app) -- Python (it might be fun to make a Python version) - - **BTW:** Since you have red this far... If you want to contribute, contact me and I might be able to get you some free or discounted hardware. +**BTW:** Since you have red this far... If you want to contribute, contact me and I might be able to get you some free or discounted hardware. ## Required libraries: * [FastLED](http://fastled.io/) @@ -127,6 +111,8 @@ They all call different functions and variables to setup the level. Each one is * ontime: How long (ms) the lava is ON for * offtime: How long the lava is ON for * offset: How long (ms) after the level starts before the lava turns on, use this to create patterns with multiple lavas +* grow: This specifies the rate of growth. Use 0 for no growth. Reasonable growth is 0.1 to 0.5 +* flow: This specifies the rate/direction of flow. Reasonable numbers are 0.2 to 0.8 **spawnConveyor(startPoint, endPoint, speed);** (2 conveyors max) * startPoint, endPoint: Same as lava