Files
muziekdoos/FW/leo_muziekdoos_esp32/src/game.cpp

239 lines
4.1 KiB
C++

#include "game.h"
//#include "math.h"
bool newState = true;
uint32_t idleTime = 0;
static const char *Gameenum_str[]
{
"stateInit",
"stateIdle",
"stateScanning",
"stateArmed",
"stateStartPlaying",
"statePlaying",
"stateStopPlaying",
"stateStopped"
};
GameStates gameState = GameStates::stateInit;
void initGame(void)
{
log_i("Game: init: done");
}
void setGameState(GameStates newstate)
{
gameState = newstate;
newState = true;
log_i("NewState = %s", StateToString(newstate).c_str());
}
void handleNewState(void)
{
if (newState)
{
log_i("ActiveState = %s" , StateToString(gameState).c_str());
newState = false;
}
}
String StateToString(GameStates gamestate)
{
try
{
return Gameenum_str[gamestate];
}
catch(const std::exception& e)
{
log_e("statestring size does not match");
return "statestringerror";
}
}
void handleGame(void)
{
switch (gameState)
{
case stateInit:
{
SetLedColor(CRGB::White);
setLedBlink(true);
if (newState)
{
// log_i("activeState = Init");
// newState = false;
handleNewState();
}
if (getSensorInitStatus() && getAudioInitStatus() && getRFIDInitStatus())
{
setGameState(stateIdle);
//log_i("nextState = idle");
}
}
break;
case stateIdle:
{
SetLedColor(CRGB::Purple);
setLedBlink(false);
if (newState)
{
handleNewState();
idleTime = millis();
}
if (getRFIDlastUID() == "")
{
setGameState(stateScanning);
//log_i("nextState = Scanning");
}
}
break;
case stateScanning:
{
SetLedColor(CRGB::Green);
setLedBlink(true);
if (newState)
{
handleNewState();
//log_i("activeState = RFID scanning");
setRFIDscanState(true);
//newState = false;
}
if (getRFIDlastUID() != "")
{
setGameState(stateArmed);
setRFIDscanState(false);
//log_i("nextState = Armed");
}
}
break;
case stateArmed:
{
SetLedColor(CRGB::Green);
setLedBlink(true);
if (newState)
{
handleNewState();
// log_i("activeState = Game Armed");
setRFIDscanState(true);
// newState = false;
idleTime = millis();
}
if (!hallIsIdle())
{
setGameState(stateStartPlaying);
//log_i("nextState = Start playing");
}
else
{
uint32_t now = millis();
if(now - idleTime > TIMEOUT_ARMED)
{
setGameState(stateIdle);
setRFIDscanState(false);
clearRFIDlastUID();
//log_i("nextState = idle");
}
}
}
break;
case stateStartPlaying:
{
SetLedColor(CRGB::Pink);
setLedBlink(true);
if (newState)
{
//log_i("activeState = startPlaying");
//newState = false;
handleNewState();
setRFIDscanState(false);
PowerKeepAlive();
}
if (hallIsIdle())
{
setGameState(stateIdle);
}
else
{
// get filefrom config
String lastUID = getRFIDlastUID();
log_i("uid=%s", lastUID.c_str());
String nextSong = getConfigSong(lastUID);
log_i("nextSong=%s", nextSong.c_str());
playSong(nextSong);
setAudioState(true);
setGameState(statePlaying);
}
}
break;
case statePlaying:
{
SetLedColor(CRGB::Pink);
setLedBlink(false);
if (newState)
{
handleNewState();
// log_i("activeState = Playing");
// newState = false;
}
if (hallIsIdle())
{
setAudioState(false);
setGameState(stateStopPlaying);
}
}
break;
case stateStopPlaying:
{
SetLedColor(CRGB::Teal);
setLedBlink(true);
if (newState)
{
handleNewState();
// log_i("activeState = stopPlaying");
// newState = false;
}
if (!getAudioState())
{
setGameState(stateStopped);
}
}
break;
case stateStopped:
{
SetLedColor(CRGB::Teal);
setLedBlink(false);
if (newState)
{
// log_i("activeState = stopped");
// newState = false;
handleNewState();
}
if (!getAudioState())
{
setGameState(stateIdle);
}
}
break;
default:
{
}
break;
}
}