Mobile App
Um das Spiel zu steuern, wird eine mobile App entwickelt. Sie soll anfangs für Android verfügbar sein. Wenn die Hürden nicht zu groß sind, wird auch eine iOS-Version in Betracht gezogen. Dazu wird die Entwicklung in Flutter stattfinden.
Übersicht
Der grundsätzliche Ablauf sieht so aus:
flowchart TD
start([App-Start])
choose_mode{Modus wählen?}
choose_leader[Weg A: Leader (Spiel)]
maintenance[Weg B: Ausrüstung warten]
check_state{Leader-Status?}
lobby[2a. Lobby-Phase]
game[2b. Spiel-Phase]
evaluation[2c. Auswertungs-Phase]
start-->choose_mode
choose_mode-->|Leader / Spiel|choose_leader
choose_mode-->|Wartung|maintenance
maintenance-->|Zurück|choose_mode
choose_leader-->check_state
check_state-->|Kein Spiel läuft|lobby
check_state-->|Spiel läuft|game
check_state-->|Spiel abgeschlossen|evaluation
lobby-->|Spiel starten|game
game-->|Spiel abbrechen|lobby
game-->|Spielende|evaluation
evaluation-->|Neues Spiel|lobby
classDef phase fill:#eef4ff,stroke:#6c8be0,stroke-width:1px,color:#0d1b2a
class lobby,game,evaluation phase
1. Leader bestimmen
- Beim Start der App wird geschaut, ob der zuletzt gewählte Game-Leader über BLE erreichbar ist.
- Ist der nicht erreichbar, wird nach allen verfügbaren Leader-Knoten gescannt und zur Auswahl angeboten.
Startbildschirm: Zwei-Wege-Strategie
- Weg A (Spiel-Modus): Leader wählen, in die Lobby-Phase wechseln, Parameter verteilen und ein Spiel starten.
- Weg B (Wartungs-Modus): Waffe oder Weste direkt auswählen, um Standalone-Einstellungen vorzunehmen (Name ändern, Firmware prüfen, Batteriestand checken), ohne den Leader hochzufahren.
UI-Vorschlag Start-Screen - Oben: Spiel-Leiter finden (Primär): Fokus auf Leader-Knoten, großes Funkturm-Icon, Einstieg in den Game-Flow (Lobby -> Spiel -> Auswertung). - Unten: Meine Ausrüstung (Sekundär): Liste aller anderen gefundenen BLE-Geräte (Westen, Waffen), dezentere Darstellung, Ziel: Schnellkonfiguration einzelner Hardware-Komponenten.
2a. Lobby-Phase
In der Lobby-Phase wird das Spiel vorbereitet: Spielmodus wählen, Teams/Spieler zuordnen und Parameter konfigurieren.
Thread-Netzwerk & Provisionierung
- Thread-Parameter werden am Leader konfiguriert und über das Thread-Netzwerk an alle verbundenen Geräte verteilt
- Im Hintergrund läuft permanent ein BLE-Scan nach neuen Geräten
- Neu gefundene Geräte werden automatisch mit den Thread-Parametern provisioniert und dem Netzwerk hinzugefügt
Geräte-Discovery & Monitoring
- Die App triggert den Leader in regelmäßigen Abständen, eine "Who is there"-Multicast-Abfrage im Thread-Netzwerk auszuführen
- Zurückgemeldete Geräte werden in einer Liste erfasst
- Beim ersten Erscheinen eines Geräts werden dessen Parameter abgerufen: Name, Typ, spezifische Eigenschaften
- Geräte, die sich über einen bestimmten Zeitraum nicht mehr melden, werden ausgegraut
- Auto-Synchronisation: Meldet ein Gerät Spieler- oder Team-Zuordnungen (z.B. "Spieler 3, Team 2"), die in der App noch nicht existieren, werden diese automatisch angelegt (z.B. "Spieler 3" und "Team 2"), um Konfigurationskonflikte zu vermeiden
Benutzeroberfläche
Geräteliste:
- Zeigt alle verfügbaren Geräte an
- Antippen eines Geräts blendet zusätzliche Icons ein:
- Verbindungsstatus: Zeigt an, ob das Gerät kürzlich gesehen wurde
- Zuordnungsstatus: Ob das Gerät einem Spieler/Team zugeordnet ist
- Identifikation: Lässt das Gerät blinken (3x) oder LED atmen zur physischen Identifikation
- Entfernen: Nur aktiv bei ausgegrauten Geräten
- Einstellungen: Geräteeinstellungen bearbeiten
Teamliste:
- Zeigt alle Teams an
- Antippen erweitert die Ansicht mit den zugewiesenen Spielern
Spielerliste:
- Zeigt alle Spieler mit Teamzuordnungsstatus an
- Spieler können angelegt, gelöscht und umbenannt werden
Spielkonfiguration
- Spielkonfigurationen können gespeichert und später neu geladen werden
- Alle Spielparameter (Dauer, Respawns, etc.) sind hier einstellbar
Spielstart-Bedingungen
Das Spiel kann nur gestartet werden, wenn folgende Bedingungen erfüllt sind:
- Alle Westen und Waffen sind zugeordnet
- Jede Weste ist genau einem Spieler zugeordnet (und umgekehrt)
- Der Spielmodus ist gesetzt und konfiguriert
- Alle Basen, Power-Ups etc. sind konfiguriert
- Kein ausgegrautes Gerät ist vorhanden
- Je nach Spielmodus: Alle Spieler sind einem Team zugeordnet
Sind nicht alle Bedingungen erfüllt, werden die Gründe angezeigt.
Übergang zur Spiel-Phase
- Beim "Spiel starten" wird eine zufällige Spiel-ID generiert und an den Leader übermittelt
- Die aktuelle Spielkonfiguration wird gespeichert
- Dadurch kann das Spiel auch nach App-Neustart ausgewertet werden
2b. Spiel-Phase
- Laufendes Spiel: Status/Timer anzeigen, optional Live-Events (Treffer, Bases) und Admin-Aktionen wie "Spiel abbrechen".
- Spielende erfolgt je nach Modus (Timer, Score, Objective) und wechselt in die Auswertungs-Phase.
- Sollte die App während der Spielphase gestartet werden, wird geprüft, ob die Spiel-ID auf dem gewählten Leader-Knoten mit der gespeicherten ID zusammenpasst. Wenn ja, schaltet sich die App auf das Spiel auf. Wenn nein, meldet die App einen Fehler, dass eine Verbindung aufgrund eines laufenden Spieles nicht möglich ist. Je nach Spielmodus ist es der App möglich, in das Spielgeschehen einzugreifen (zum Beispiel Power-Ups senden etc.).
2c. Auswertungs-Phase
- Geräte auslesen, Scores sammeln, Rangliste erzeugen und anzeigen.
- Optionen: "Neues Spiel" führt zurück in die Lobby; Export/Share der Ergebnisse möglich.
- Sollte die App während der Auswertungsphase gestartet werden, wird geprüft, ob die Spiel-ID auf dem gewählten Leader-Knoten mit der gespeicherten ID zusammenpasst. Wenn ja, schaltet sich die App auf das Spiel auf. Wenn nein, meldet die App einen Fehler, dass die Spiel-ID unbekannt ist und somit eine Auswertung nicht möglich ist.
Eine Auswertung erfolgt erst, wenn alle Geräte, die zur Auswertung erforderlich sind, abgerufen werden konnten. Ist das innerhalb einer bestimmten Zeit nicht möglich, wird dem Benutzer angezeigt, welche fehlen. Er kann dann dafür sorgen, dass diese in Reichweite kommen und die Auswertung abschliessen.