fixes audiofiles and adds screentext

This commit is contained in:
Marcel 2024-06-03 04:50:54 +02:00
parent 47195d9445
commit c8346ded11
12 changed files with 184 additions and 83 deletions

BIN
assets/0007PickupStationMagie.mp3 (Stored with Git LFS)

Binary file not shown.

BIN
assets/0008AfterSationMagie.mp3 (Stored with Git LFS)

Binary file not shown.

BIN
assets/0008ObjektvonderNebenstationentfernt.mp3 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/0017AfterStationMagie.mp3 (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -143,7 +143,7 @@ void loop(void)
} }
stateMachine.update(Context(stations, sizeof(stations) / sizeof(stations[0]), deltaTime, &dfPlayer)); stateMachine.update(Context(stations, sizeof(stations) / sizeof(stations[0]), deltaTime, &dfPlayer));
String newContent = stateMachine.updateDisplay(); String newContent = stateMachine.updateDisplay(Context(stations, sizeof(stations) / sizeof(stations[0]), deltaTime, &dfPlayer));
if (previousDisplayContent != newContent) if (previousDisplayContent != newContent)
{ {
lcd.clear(); lcd.clear();
@ -182,5 +182,5 @@ void setup(void)
} }
} }
dfPlayer.volume(18); dfPlayer.volume(15);
} }

View file

@ -10,7 +10,7 @@
#define HACKING_STATION_MAGIE 6 #define HACKING_STATION_MAGIE 6
#define PICKUP_STATION_MAGIE 7 #define PICKUP_STATION_MAGIE 7
#define AFTER_MAGIE 8 #define AFTER_MAGIE 17 // weird hack because file 8 does not seem to work...
#define HACKING_STATION_BICOLA 9 #define HACKING_STATION_BICOLA 9
#define PICKUP_STATION_BICOLA 10 #define PICKUP_STATION_BICOLA 10

View file

@ -21,6 +21,6 @@ public:
{ {
} }
virtual String updateDisplay() { return ""; } virtual String updateDisplay(const Context& context) { return ""; }
}; };

View file

@ -3,36 +3,44 @@
#include "context.h" #include "context.h"
StateMachine::StateMachine(State* initialState) StateMachine::StateMachine(State* initialState)
: currentState(initialState) {} : currentState(initialState)
{
}
StateMachine::~StateMachine() { StateMachine::~StateMachine()
{
delete currentState; delete currentState;
} }
void StateMachine::updateState(State* newState, const Context& context) { void StateMachine::updateState(State* newState, const Context& context)
if (newState != currentState) { {
if (newState != currentState)
{
delete currentState; delete currentState;
currentState = newState; currentState = newState;
currentState->activated(context); currentState->activated(context);
} }
} }
void StateMachine::pickedUp(const Context& context) { void StateMachine::pickedUp(const Context& context)
{
State* newState = currentState->pickedUp(context); State* newState = currentState->pickedUp(context);
updateState(newState, context); updateState(newState, context);
} }
void StateMachine::putDown(const Context& context, Station* newStation) { void StateMachine::putDown(const Context& context, Station* newStation)
{
State* newState = currentState->putDown(context, newStation); State* newState = currentState->putDown(context, newStation);
updateState(newState, context); updateState(newState, context);
} }
void StateMachine::update(const Context& context) { void StateMachine::update(const Context& context)
{
State* newState = currentState->update(context); State* newState = currentState->update(context);
updateState(newState, context); updateState(newState, context);
} }
String StateMachine::updateDisplay() const String StateMachine::updateDisplay(const Context& context) const
{ {
return currentState->updateDisplay(); return currentState->updateDisplay(context);
} }

View file

@ -17,5 +17,5 @@ public:
void putDown(const Context& context, Station* newStation); void putDown(const Context& context, Station* newStation);
void update(const Context& context); void update(const Context& context);
String updateDisplay() const; String updateDisplay(const Context& context) const;
}; };

View file

@ -1,10 +1,9 @@
#include "states.h" #include "states.h"
#include <sequences.h>
#include "state.h" #include "state.h"
#include "station.h" #include "station.h"
#include "sounds.h" #include "sounds.h"
#include "text.h"
Startup::Startup() = default; Startup::Startup() = default;
@ -24,10 +23,9 @@ State* Startup::update(const Context context)
return this; return this;
} }
String Startup::updateDisplay() String Startup::updateDisplay(const Context& context)
{ {
return "Initializing:Put" return "Legg mi uf die ersti Station!";
"on first station";
} }
void Startup::activated(Context context) void Startup::activated(Context context)
@ -42,7 +40,7 @@ WaitingForGameStart::WaitingForGameStart() = default;
State* WaitingForGameStart::pickedUp(const Context context) State* WaitingForGameStart::pickedUp(const Context context)
{ {
return new OnTheMove(context.stations + 1); // first element of the array return new OnTheMove(context.stations + 1, context.stations); // first element of the array
} }
State* WaitingForGameStart::update(const Context context) State* WaitingForGameStart::update(const Context context)
@ -50,10 +48,9 @@ State* WaitingForGameStart::update(const Context context)
return this; return this;
} }
String WaitingForGameStart::updateDisplay() String WaitingForGameStart::updateDisplay(const Context& context)
{ {
return "Waiting for Game" return WAITING_FOR_START_TEXT;
"Start...";
} }
void WaitingForGameStart::activated(const Context context) void WaitingForGameStart::activated(const Context context)
@ -65,9 +62,10 @@ void WaitingForGameStart::activated(const Context context)
//------------------------------------ //------------------------------------
OnTheMove::OnTheMove(Station* targetStation) OnTheMove::OnTheMove(Station* targetStation, Station* previousStation)
{ {
this->targetStation = targetStation; this->targetStation = targetStation;
this->previousStation = previousStation;
} }
State* OnTheMove::putDown(const Context context, Station* newStation) State* OnTheMove::putDown(const Context context, Station* newStation)
@ -81,7 +79,7 @@ State* OnTheMove::putDown(const Context context, Station* newStation)
return new Hacking(this->targetStation); return new Hacking(this->targetStation);
} }
return new IncorrectStation(targetStation); return new IncorrectStation(targetStation, previousStation);
} }
State* OnTheMove::update(const Context context) State* OnTheMove::update(const Context context)
@ -89,15 +87,41 @@ State* OnTheMove::update(const Context context)
return this; return this;
} }
String OnTheMove::updateDisplay() String OnTheMove::updateDisplay(const Context& context)
{ {
return "On the Move... "; const int index = context.getStationIndex(this->targetStation);
if (index == 0)
{
return TOBIONE_AFTER_TEXT;
}
else if (index == 1)
{
return MAIN_AFTER_PICKUP_TEXT;
}
else if (index == 2)
{
return MUHVELLA_AFTER_TEXT;
}
else if (index == 3)
{
return MAGIE_AFTER_TEXT;
}
else if (index == 4)
{
return BICOLA_AFTER_TEXT;
}
return "UNDEFINED";
} }
void OnTheMove::activated(const Context context) void OnTheMove::activated(const Context context)
{ {
const int index = context.getStationIndex(this->targetStation); const int index = context.getStationIndex(this->targetStation);
if (index == 1) if (index == 0)
{
context.dfPlayer->play(AFTER_TOBIONE);
}
else if (index == 1)
{ {
context.dfPlayer->play(AFTER_MAIN_STATION); context.dfPlayer->play(AFTER_MAIN_STATION);
} }
@ -119,14 +143,15 @@ void OnTheMove::activated(const Context context)
//------------------------------------ //------------------------------------
IncorrectStation::IncorrectStation(Station* targetStation) IncorrectStation::IncorrectStation(Station* targetStation, Station* previousStation)
{ {
this->targetStation = targetStation; this->targetStation = targetStation;
this->previousStation = previousStation;
} }
State* IncorrectStation::pickedUp(const Context context) State* IncorrectStation::pickedUp(const Context context)
{ {
return new OnTheMove(this->targetStation); // todo fix nullptr return new OnTheMove(this->targetStation, previousStation);
} }
State* IncorrectStation::update(const Context context) State* IncorrectStation::update(const Context context)
@ -134,9 +159,9 @@ State* IncorrectStation::update(const Context context)
return this; return this;
} }
String IncorrectStation::updateDisplay() String IncorrectStation::updateDisplay(const Context& context)
{ {
return "Wrong Station! "; return WRONG_STATION_TEXT;
} }
void IncorrectStation::activated(const Context context) void IncorrectStation::activated(const Context context)
@ -174,9 +199,26 @@ State* Hacking::update(const Context context)
return this; return this;
} }
String Hacking::updateDisplay() String Hacking::updateDisplay(const Context& context)
{ {
return "Hacking B)"; auto currentStationIndex = context.getStationIndex(this->currentStation);
if (currentStationIndex == 1)
{
return MUHVELLA_HACKING_TEXT;
}
if (currentStationIndex == 2)
{
return MAGIE_HACKING_TEXT;
}
if (currentStationIndex == 3)
{
return BICOLA_HACKING_TEXT;
}
if (currentStationIndex == 4)
{
return TOBIONE_HACKING_TEXT;
}
return "UNDEFINED";
} }
void Hacking::activated(const Context context) void Hacking::activated(const Context context)
@ -199,7 +241,7 @@ void Hacking::activated(const Context context)
} }
if (currentStationIndex == 4) if (currentStationIndex == 4)
{ {
timer = Timer(39000, false); timer = Timer(40000, false);
context.dfPlayer->play(HACKING_STATION_TOBIONE); context.dfPlayer->play(HACKING_STATION_TOBIONE);
} }
timer.start(); timer.start();
@ -228,9 +270,9 @@ State* Complain::update(Context context)
return this; return this;
} }
String Complain::updateDisplay() String Complain::updateDisplay(const Context& context)
{ {
return "Put me back!!"; return COMPLAIN_TEXT;
} }
void Complain::activated(Context context) void Complain::activated(Context context)
@ -249,7 +291,7 @@ WaitingForPickup::WaitingForPickup(Station* currentStation, Station* targetStati
State* WaitingForPickup::pickedUp(Context context) State* WaitingForPickup::pickedUp(Context context)
{ {
return new OnTheMove(targetStation); return new OnTheMove(targetStation, currentStation);
} }
State* WaitingForPickup::update(Context context) State* WaitingForPickup::update(Context context)
@ -257,9 +299,25 @@ State* WaitingForPickup::update(Context context)
return this; return this;
} }
String WaitingForPickup::updateDisplay() String WaitingForPickup::updateDisplay(const Context& context)
{ {
return "Pick me up "; auto currentStationIndex = context.getStationIndex(this->currentStation);
if (currentStationIndex == 1)
{
return MUHVELLA_PICKUP_TEXT;
}
if (currentStationIndex == 2)
{
return MAGIE_PICKUP_TEXT;
}
if (currentStationIndex == 3)
{
return BICOLA_PICKUP_TEXT;
}
if (currentStationIndex == 4)
{
return TOBIONE_PICKUP_TEXT;
}
} }
void WaitingForPickup::activated(Context context) void WaitingForPickup::activated(Context context)
@ -293,13 +351,13 @@ End::End(): timer(Timer(0, false))
State* End::pickedUp(const Context context) State* End::pickedUp(const Context context)
{ {
// todo to be discussed if this is the expected outcome... // todo complain
return new OnTheMove(context.stations + 1); // starting game early return new Complain(context.stations);
} }
State* End::update(const Context context) State* End::update(const Context context)
{ {
bool done = timer.update(context.delta); const bool done = timer.update(context.delta);
if (done) if (done)
{ {
return new WaitingForGameStart(); return new WaitingForGameStart();
@ -307,13 +365,14 @@ State* End::update(const Context context)
return this; return this;
} }
String End::updateDisplay() String End::updateDisplay(const Context& context)
{ {
return "END..."; return END_TEXT;
} }
void End::activated(const Context context) void End::activated(const Context context)
{ {
context.dfPlayer->play(END); context.dfPlayer->play(END);
timer = Timer(27000, false); timer = Timer(38000, false);
timer.start();
} }

View file

@ -12,7 +12,7 @@ public:
Startup(); Startup();
State* putDown(Context context, Station* newStation) override; State* putDown(Context context, Station* newStation) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -23,7 +23,7 @@ public:
WaitingForGameStart(); WaitingForGameStart();
State* pickedUp(Context context) override; State* pickedUp(Context context) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -31,12 +31,13 @@ class OnTheMove final : public State
{ {
private: private:
Station* targetStation; Station* targetStation;
Station* previousStation;
public: public:
explicit OnTheMove(Station* targetStation); explicit OnTheMove(Station* targetStation, Station* previousStation);
State* putDown(Context context, Station* newStation) override; State* putDown(Context context, Station* newStation) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -44,12 +45,13 @@ class IncorrectStation final : public State
{ {
private: private:
Station* targetStation; Station* targetStation;
Station* previousStation;
public: public:
explicit IncorrectStation(Station* targetStation); explicit IncorrectStation(Station* targetStation, Station* previousStation);
State* pickedUp(Context context) override; State* pickedUp(Context context) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -64,7 +66,7 @@ public:
explicit Hacking(Station* currentStation); explicit Hacking(Station* currentStation);
State* pickedUp(Context context) override; State* pickedUp(Context context) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -77,7 +79,7 @@ public:
explicit Complain(Station* currentStation); explicit Complain(Station* currentStation);
State* putDown(Context context, Station* newStation) override; State* putDown(Context context, Station* newStation) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -91,7 +93,7 @@ public:
WaitingForPickup(Station* currentStation, Station* targetStation); WaitingForPickup(Station* currentStation, Station* targetStation);
State* pickedUp(Context context) override; State* pickedUp(Context context) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };
@ -103,6 +105,6 @@ public:
End(); End();
State* pickedUp(Context context) override; State* pickedUp(Context context) override;
State* update(Context context) override; State* update(Context context) override;
String updateDisplay() override; String updateDisplay(const Context& context) override;
void activated(Context context) override; void activated(Context context) override;
}; };

29
src/text.h Normal file
View file

@ -0,0 +1,29 @@
#pragma once
#define WAITING_FOR_START_TEXT "Lupf mich uf"
#define MAIN_AFTER_PICKUP_TEXT "Danke :D <3 Lueg chli ume"
#define MUHVELLA_HACKING_TEXT "Eifach ligge lahBitte warte"
#define MUHVELLA_PICKUP_TEXT "Los! Witer =O"
#define MUHVELLA_AFTER_TEXT "Ufd Suechi! Gids Suppe? :P"
#define MAGIE_HACKING_TEXT "Wart rasch ^^ "
#define MAGIE_PICKUP_TEXT "Und witer gahts "
#define MAGIE_AFTER_TEXT "Yoga und Chrueter? :/"
#define BICOLA_HACKING_TEXT "Mues chli sueche"
#define BICOLA_PICKUP_TEXT "Und witer!"
#define BICOLA_AFTER_TEXT "Fast gschafft :,)"
#define TOBIONE_HACKING_TEXT "So nah und doch so fern -.-"
#define TOBIONE_PICKUP_TEXT "Endspurt!"
#define TOBIONE_AFTER_TEXT "goi mer wieder hei"
#define WRONG_STATION_TEXT "falschi Station"
#define COMPLAIN_TEXT "Wieder zrug stelle"
#define END_TEXT "DU HESCH ES GSCHAFFT!!!"