#include "classicviewmanager.h" #include "classicsprite.h" #include "classicnote.h" #include #include static constexpr std::size_t RESERVED_SIZE = 20; ClassicViewManager::ClassicViewManager() { for (auto kind_of_action : {Action::PRESS_UP, Action::PRESS_DOWN, Action::PRESS_LEFT, Action::PRESS_RIGHT}) { reallocatePoll(kind_of_action); } } void ClassicViewManager::reallocatePoll(Action kind_of_action) { SpritePoll &poll = _sprite_dispatcher[kind_of_action]; for (std::size_t i = 0; i < RESERVED_SIZE; ++i) { poll.push(createSprite(kind_of_action)); } } std::shared_ptr ClassicViewManager::createSprite(Action kind_of_action) const { sf::RectangleShape sprite; sprite.setSize({20.f, 20.f}); switch (kind_of_action) { case Action::PRESS_UP: sprite.setFillColor(sf::Color(255, 0, 0)); break; case Action::PRESS_DOWN: sprite.setFillColor(sf::Color(0, 255, 0)); break; case Action::PRESS_LEFT: sprite.setFillColor(sf::Color(0, 0, 255)); break; case Action::PRESS_RIGHT: sprite.setFillColor(sf::Color(255, 0, 255)); break; default: // yellow sprite.setFillColor(sf::Color(255, 239, 0)); } return std::make_shared(sprite); } void ClassicViewManager::initNoteSprite(ClassicNote* note) { const auto action_type = note->action(); SpritePoll& poll = _sprite_dispatcher.at(action_type); if (poll.empty()) reallocatePoll(action_type); note->setSprite(poll.top()); poll.pop(); std::cout << "Taking a sprite from poll.\n"; } void ClassicViewManager::resetNoteSprite(ClassicNote* note) { _sprite_dispatcher[note->action()].push(note->sprite()); note->setSprite(nullptr); std::cout << "Returning a sprite to poll.\n"; }