From 71b25d2465c4ea1f98297436ad4c50e44e4b196d Mon Sep 17 00:00:00 2001
From: Malte Schmitz <malte@schmitz-sh.de>
Date: Sun, 29 May 2022 18:08:15 +0200
Subject: [PATCH] Add single player

---
 src/main.cpp | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/main.cpp b/src/main.cpp
index f5e556b..f5ce140 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -59,6 +59,7 @@ void loop() {
 
 int position = 0;
 int greenLength = 10;
+bool singlePlayer = true;
 
 #define STATE_PAUSE 0
 #define STATE_FORWARD 1
@@ -74,8 +75,14 @@ void show() {
     for (int i = 0; i < greenLength; i++) {
       pixels.setPixelColor(i, 0x00FF00);
     }
-    for (int i = NEOPIXEL_LEN - greenLength - 1; i < NEOPIXEL_LEN; i++) {
-      pixels.setPixelColor(i, 0x00FF00);
+    if (singlePlayer) {
+      for (int i = NEOPIXEL_LEN / 2; i < NEOPIXEL_LEN; i++) {
+        pixels.setPixelColor(i, 0x0000FF);
+      }
+    } else {
+      for (int i = NEOPIXEL_LEN - greenLength - 1; i < NEOPIXEL_LEN; i++) {
+        pixels.setPixelColor(i, 0x00FF00);
+      }
     }
     pixels.setPixelColor(position, 0xFFFFFF);
   }
@@ -149,6 +156,8 @@ void handleButton() {
 
   last_internal_button_state = current_internal_button_state;
   last_external_button_state = current_external_button_state;
+
+  singlePlayer = digitalRead(EXTERNAL_BUTTON_PIN_NO) == LOW;
 }
 
 void handleExternalLostAnimation() {
@@ -195,10 +204,18 @@ void handleStep() {
       break;
     case STATE_FORWARD:
       position = position + 1;
-      if (position > NEOPIXEL_LEN - 1) {
-        externalMissed();
-      } else {
+      if (singlePlayer) {
+        if (position > NEOPIXEL_LEN / 2 - 1) {
+          position = NEOPIXEL_LEN / 2 - 2;
+          state = STATE_BACKWARD;
+        }
         show();
+      } else {
+        if (position > NEOPIXEL_LEN - 1) {
+          externalMissed();
+        } else {
+          show();
+        }
       }
       break;
     case STATE_BACKWARD:
-- 
GitLab