Skip to content

Commit

Permalink
♻️ (activity): Refactor FlashNumberCounting
Browse files Browse the repository at this point in the history
  • Loading branch information
HPezz committed Sep 20, 2022
1 parent 0967db1 commit 3aecfd2
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 42 deletions.
25 changes: 10 additions & 15 deletions libs/ActivityKit/include/activities/FlashNumberCounting.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@

// LCOV_EXCL_START

#include <random>

#include "MathUtils.h"
#include "RFIDKit.h"
#include "ReinforcerKit.h"
#include "interface/Activity.h"
Expand All @@ -27,28 +24,26 @@ class FlashNumberCounting : public interface::Activity
void stop() final;

private:
void processCard(const MagicCard &card);
void launchNextRound();

RFIDKit &_rfidkit;
interface::VideoKit &_videokit;
ReinforcerKit &_reinforcerkit;
interface::LED &_led;

static constexpr uint8_t kScoreToWin = 5;
static constexpr uint8_t kRoundsNumber = 5;
static constexpr uint8_t kSizeOfColorsTable = 5;
static constexpr uint8_t kSizeOfFlashNumberTable = 12;

static constexpr std::array<RGB, kSizeOfColorsTable> colors_table = {RGB::pure_blue, RGB::pure_green, RGB::cyan,
RGB::yellow, RGB::magenta};

uint8_t _score = 0;
uint8_t _flashes_number = 0;
MagicCard _expected_tag_number = MagicCard::none;

std::array<uint8_t, kSizeOfFlashNumberTable> flash_number_table = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6};
std::span<uint8_t> flash_number_span {flash_number_table};
static constexpr std::array<RGB, kSizeOfColorsTable> _colors = {RGB::pure_blue, RGB::pure_green, RGB::cyan,
RGB::yellow, RGB::magenta};

uint8_t _current_round = 0;
uint8_t _current_flashes_number = 0;
MagicCard _expected_tag_number = MagicCard::none;
std::function<void(const MagicCard &)> _backup_callback {};

void setNextDisplay();
std::array<uint8_t, kSizeOfFlashNumberTable> _flash_numbers = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6};
};

} // namespace leka::activity
Expand Down
56 changes: 29 additions & 27 deletions libs/ActivityKit/source/activities/FlashNumberCounting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,54 +5,56 @@
// LCOV_EXCL_START

#include "FlashNumberCounting.h"
#include <random>

namespace leka::activity {
using namespace std::chrono;

void FlashNumberCounting::start()
{
_score = 0;
_flashes_number = 0;
_expected_tag_number = MagicCard::none;
_current_round = 0;
_current_flashes_number = 0;
_expected_tag_number = MagicCard::none;

_videokit.displayImage("fs/home/img/system/robot-face-smiling-slightly.jpg");

_backup_callback = _rfidkit.getCallback();
std::shuffle(flash_number_span.begin(), flash_number_span.end(), std::mt19937(time(nullptr)));
setNextDisplay();
auto on_tag_detected_callback = [this](const MagicCard &card) {
if (card == _expected_tag_number) {
_reinforcerkit.playDefault();
rtos::ThisThread::sleep_for(1s);
std::shuffle(_flash_numbers.begin(), _flash_numbers.end(), std::mt19937(time(nullptr)));
launchNextRound();

++_score;

if (_score == kScoreToWin) {
_backup_callback(MagicCard::dice_roll);
return;
}
setNextDisplay();
} else {
_backup_callback(card);
}
};
_rfidkit.onTagActivated(on_tag_detected_callback);
_rfidkit.onTagActivated([this](const MagicCard &card) { processCard(card); });
}

void FlashNumberCounting::stop()
{
_rfidkit.onTagActivated(_backup_callback);
}

void FlashNumberCounting::setNextDisplay()
void FlashNumberCounting::processCard(const MagicCard &card)
{
srand(time(nullptr));
if (card == _expected_tag_number) {
_reinforcerkit.playDefault();
rtos::ThisThread::sleep_for(1s);

++_current_round;

if (_current_round == kRoundsNumber) {
_backup_callback(MagicCard::dice_roll);
return;
}
launchNextRound();
} else {
_backup_callback(card);
}
}

_flashes_number = flash_number_table.at(_score);
_expected_tag_number = MagicCard(MagicCard::number_0.getId() + _flashes_number);
void FlashNumberCounting::launchNextRound()
{
_current_flashes_number = _flash_numbers.at(_current_round);
_expected_tag_number = MagicCard(MagicCard::number_0.getId() + _current_flashes_number);

for (auto i = 0; i < _flashes_number; ++i) {
_led.setColor(colors_table.at(_score));
for (auto i = 0; i < _current_flashes_number; ++i) {
_led.setColor(_colors.at(_current_round));
_led.show();
rtos::ThisThread::sleep_for(400ms);
_led.setColor(RGB::black);
Expand Down

0 comments on commit 3aecfd2

Please sign in to comment.