project-kyoku/timelineviews/classicviewmanager.cpp

65 lines
1.5 KiB
C++

#include "classicviewmanager.h"
#include "../note.h"
#include <SFML/Graphics/RectangleShape.hpp>
static constexpr std::size_t RESERVED_SIZE = 20;
ClassicViewManager::ClassicViewManager()
{
for (std::size_t i = ARROW_UP; i < AMOUNT_OF_KINDS; ++i)
{
SpritePoll &poll = _sprite_dispatcher.at(i);
poll.resize(RESERVED_SIZE);
for (auto &sprite : poll)
{
sprite = createSprite(static_cast<Button>(i));
}
}
}
ClassicViewManager::~ClassicViewManager()
{}
std::shared_ptr<Sprite> ClassicViewManager::createSprite(Button kind_of_button) const
{
sf::RectangleShape sprite;
sprite.setSize({20.f, 20.f});
switch (kind_of_button)
{
case ARROW_UP:
sprite.setFillColor(sf::Color(255, 0, 0));
break;
case ARROW_DOWN:
sprite.setFillColor(sf::Color(0, 255, 0));
break;
case ARROW_LEFT:
sprite.setFillColor(sf::Color(0, 0, 255));
break;
case ARROW_RIGHT:
sprite.setFillColor(sf::Color(255, 0, 255));
break;
default: // yellow
sprite.setFillColor(sf::Color(255, 239, 0));
}
return std::make_shared<Sprite>(sprite);
}
void ClassicViewManager::initNoteGraphics(Note *note)
{
const auto type = note->type();
for (const auto sprite : _sprite_dispatcher.at(static_cast<int>(type)))
{
if (!sprite->isAttached())
{
sprite->setCoordinates(note->position());
note->resetSprite(sprite);
return;
}
}
}