- some bug fixes

- added race details
This commit is contained in:
Dorian Zedler 2020-10-02 19:53:07 +02:00
parent 9a81d87451
commit ef8ceff27e
Signed by: dorian
GPG key ID: D3B255CB8BC7CD37
4 changed files with 37 additions and 21 deletions

View file

@ -62,7 +62,8 @@ public:
TimersChanged = 9001, TimersChanged = 9001,
ExtensionsChanged = 9002, ExtensionsChanged = 9002,
CurrentStartDelayChanged = 9003, /*, ProfilesChanged*/ CurrentStartDelayChanged = 9003, /*, ProfilesChanged*/
SettingChanged = 9004 SettingChanged = 9004,
RaceDetailsChanged = 9005
}; };
Q_ENUM(SignalKey) Q_ENUM(SignalKey)
@ -82,7 +83,7 @@ public:
CancelRaceCommand = 1003, CancelRaceCommand = 1003,
GetRaceStateCommand = 2000, GetRaceStateCommand = 2000,
GetNextStartActionCommand = 2005, GetRaceDetailsCommand = 2001,
GetExtensionsCommand = 2006, GetExtensionsCommand = 2006,
GetTimersCommand = 2007, GetTimersCommand = 2007,
GetCurrentStartDelayCommand = 2009, GetCurrentStartDelayCommand = 2009,

View file

@ -52,6 +52,7 @@ class ScStwRace : public QObject
Q_PROPERTY(RaceState state READ getState NOTIFY stateChanged) Q_PROPERTY(RaceState state READ getState NOTIFY stateChanged)
Q_PROPERTY(QVariantList timers READ getTimerDetailList NOTIFY timersChanged) Q_PROPERTY(QVariantList timers READ getTimerDetailList NOTIFY timersChanged)
Q_PROPERTY(QVariantList currentStartDelay READ getCurrentStartDelay NOTIFY currentStartDelayChanged) Q_PROPERTY(QVariantList currentStartDelay READ getCurrentStartDelay NOTIFY currentStartDelayChanged)
Q_PROPERTY(QVariantMap details READ getDetails NOTIFY detailsChanged)
public: public:
explicit ScStwRace(QObject *parent = nullptr); explicit ScStwRace(QObject *parent = nullptr);
@ -133,6 +134,7 @@ public slots:
virtual QVariantList getCurrentStartDelay(); virtual QVariantList getCurrentStartDelay();
QList<ScStwTimer*> getTimers(); QList<ScStwTimer*> getTimers();
QVariantList getTimerDetailList(); QVariantList getTimerDetailList();
QVariantMap getDetails();
protected slots: protected slots:
@ -152,6 +154,7 @@ private slots:
bool isStarting(); bool isStarting();
bool isReadyForNextState(); bool isReadyForNextState();
void handleTimerReadyStateChange(ScStwTimer::ReadyState readyState);
signals: signals:
void startTimers(); void startTimers();
@ -160,6 +163,7 @@ signals:
void stateChanged(RaceState state); void stateChanged(RaceState state);
void currentStartDelayChanged(); void currentStartDelayChanged();
void timersChanged(); void timersChanged();
void detailsChanged();
}; };

View file

@ -32,6 +32,9 @@ ScStwRace::ScStwRace(QObject *parent) : QObject(parent)
connect(this->startDelayTimer, &QTimer::timeout, this->startWaitLoop, &QEventLoop::quit); connect(this->startDelayTimer, &QTimer::timeout, this->startWaitLoop, &QEventLoop::quit);
connect(this, &ScStwRace::currentStartDelayChanged, this, &ScStwRace::detailsChanged);
connect(this, &ScStwRace::timersChanged, this, &ScStwRace::detailsChanged);
// write default settings // write default settings
this->startSoundSettings.insert(ScStwSoundPlayer::Start, {{"Enabled", true}, {"Delay", 1}}); this->startSoundSettings.insert(ScStwSoundPlayer::Start, {{"Enabled", true}, {"Delay", 1}});
this->writeStartSoundSetting(ScStwSoundPlayer::AtYourMarks, false, 0); this->writeStartSoundSetting(ScStwSoundPlayer::AtYourMarks, false, 0);
@ -198,7 +201,8 @@ int ScStwRace::handleFalseStart() {
} }
this->setState(STOPPED); this->setState(STOPPED);
this->soundPlayer->cancel(this->soundVolume); this->soundPlayer->cancel();
this->soundPlayer->play(ScStwSoundPlayer::FalseStart, this->soundVolume);
return returnCode; return returnCode;
} }
@ -597,10 +601,11 @@ bool ScStwRace::addTimer(ScStwTimer *timer) {
this->timers.append(timer); this->timers.append(timer);
connect(timer, &ScStwTimer::stateChanged, this, &ScStwRace::refreshTimerStates); connect(timer, &ScStwTimer::stateChanged, this, &ScStwRace::refreshTimerStates);
connect(timer, &ScStwTimer::wantsToBeDisabledChanged, this, &ScStwRace::handleTimerWantsToBeDisabledChange);
connect(timer, &ScStwTimer::stateChanged, this, &ScStwRace::timersChanged); connect(timer, &ScStwTimer::stateChanged, this, &ScStwRace::timersChanged);
connect(timer, &ScStwTimer::wantsToBeDisabledChanged, this, &ScStwRace::handleTimerWantsToBeDisabledChange);
connect(timer, &ScStwTimer::reactionTimeChanged, this, &ScStwRace::timersChanged); connect(timer, &ScStwTimer::reactionTimeChanged, this, &ScStwRace::timersChanged);
connect(timer, &ScStwTimer::readyStateChanged, this->startWaitLoop, &QEventLoop::quit); connect(timer, &ScStwTimer::readyStateChanged, this->startWaitLoop, &QEventLoop::quit);
connect(timer, &ScStwTimer::readyStateChanged, this, &ScStwRace::handleTimerReadyStateChange);
if(this->competitionMode && timer->getState() == ScStwTimer::DISABLED) if(this->competitionMode && timer->getState() == ScStwTimer::DISABLED)
timer->setDisabled(false); timer->setDisabled(false);
@ -628,12 +633,35 @@ QVariantList ScStwRace::getTimerDetailList() {
tmpTimer.insert("reactionTime", timer->getReactionTime()); tmpTimer.insert("reactionTime", timer->getReactionTime());
tmpTimer.insert("text", timer->getText()); tmpTimer.insert("text", timer->getText());
tmpTimer.insert("letter", timer->getLetter()); tmpTimer.insert("letter", timer->getLetter());
tmpTimer.insert("readyState", timer->getReadyState());
tmpTimers.append(tmpTimer); tmpTimers.append(tmpTimer);
} }
return tmpTimers; return tmpTimers;
} }
QVariantMap ScStwRace::getDetails() {
QVariantMap tmpDetails;
tmpDetails.insert("timers", this->getTimerDetailList());
tmpDetails.insert("currentStartDelay", this->getCurrentStartDelay());
tmpDetails.insert("competitionMode", this->competitionMode);
tmpDetails.insert("readySoundEnabled", this->startSoundSettings[ScStwSoundPlayer::Ready]["Enabled"].toBool());
if(this->state == WAITING)
tmpDetails.insert("isReady", this->isReadyForNextState());
return tmpDetails;
}
bool ScStwRace::isStarting() { bool ScStwRace::isStarting() {
return this->state == PREPAIRING || this->state == WAITING || this->state == STARTING; return this->state == PREPAIRING || this->state == WAITING || this->state == STARTING;
} }
void ScStwRace::handleTimerReadyStateChange(ScStwTimer::ReadyState readyState) {
Q_UNUSED(readyState)
// only continue if the current state is waiting
if(this->state == WAITING)
emit this->timersChanged();
}

View file

@ -39,9 +39,6 @@ bool ScStwSoundPlayer::play(ScStwSoundPlayer::StartSound sound, double volume, d
if(!this->soundFiles.contains(sound)) if(!this->soundFiles.contains(sound))
return false; return false;
if(sound > Start || sound < AtYourMarks)
return false;
// stop playback // stop playback
if(this->soundEffect->isPlaying()) if(this->soundEffect->isPlaying())
this->soundEffect->stop(); this->soundEffect->stop();
@ -89,20 +86,6 @@ bool ScStwSoundPlayer::cancel(double volume) {
// stop playback // stop playback
this->soundEffect->stop(); this->soundEffect->stop();
this->waitLoop->quit(); this->waitLoop->quit();
if(this->currentlyPlayingSound != Start)
return true;
// update volume
this->soundEffect->setVolume(volume);
// load
this->soundEffect->setSource(this->soundFiles[FalseStart]["path"].toString());
// play
this->soundEffect->play();
return true;
} }
bool ScStwSoundPlayer::waitForSoundFinish(double *timeOfStop) { bool ScStwSoundPlayer::waitForSoundFinish(double *timeOfStop) {