79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#include "spritecontainer.h"
|
|
#include "classicsprite.h"
|
|
|
|
#include <SFML/Graphics/RectangleShape.hpp>
|
|
#include <iostream>
|
|
|
|
static constexpr std::size_t RESERVED_SIZE = 20;
|
|
|
|
SpriteContainer::SpriteContainer()
|
|
{
|
|
for (auto kind_of_action : {Action::PRESS_UP, Action::PRESS_DOWN,
|
|
Action::PRESS_LEFT, Action::PRESS_RIGHT})
|
|
{
|
|
reallocatePoll(kind_of_action);
|
|
}
|
|
|
|
std::cout << "Sprite poll reallocated.\n";
|
|
|
|
_font.loadFromFile("VeraMono.ttf");
|
|
}
|
|
|
|
void SpriteContainer::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<ClassicSprite> SpriteContainer::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<ClassicSprite>(sprite, _font);
|
|
}
|
|
|
|
std::shared_ptr<ClassicSprite> SpriteContainer::getSprite(Action action)
|
|
{
|
|
SpritePoll& poll = _sprite_dispatcher.at(action);
|
|
|
|
if (poll.empty())
|
|
reallocatePoll(action);
|
|
|
|
std::shared_ptr<ClassicSprite> sprite = poll.top();
|
|
poll.pop();
|
|
std::cout << "Taking a sprite from poll.\n";
|
|
|
|
return sprite;
|
|
}
|
|
|
|
void SpriteContainer::resetSprite(const std::shared_ptr<ClassicSprite> &sprite, Action action)
|
|
{
|
|
_sprite_dispatcher[action].push(sprite);
|
|
std::cout << "Returning a sprite to poll.\n";
|
|
}
|