You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
project-kyoku/src/modes/classicmode/graphics/classicgraphicsfactory.cpp

63 lines
1.5 KiB
C++

#include "classicgraphicsfactory.h"
ClassicGraphicsFactory::ClassicGraphicsFactory(
const std::shared_ptr<kku::CoreFactory> &core_factory)
: _core_factory(core_factory)
{
}
auto ClassicGraphicsFactory::generate(Type type) const -> SpriteData
{
auto shape = _core_factory->getRectangle();
auto trail = _core_factory->getRectangle();
shape->setRect(kku::Area<float>{0.f, 0.f, 20.f, 20.f});
trail->setRect(kku::Area<float>{0.f, 0.f, 20.f, 20.f});
kku::Color color;
switch (type)
{
case Type::UP:
color = kku::Color{255, 0, 0, 255};
break;
case Type::DOWN:
color = kku::Color{0, 255, 0, 255};
break;
case Type::LEFT:
color = kku::Color{0, 0, 255, 255};
break;
case Type::RIGHT:
color = kku::Color{255, 0, 255, 255};
break;
default: // yellow
color = kku::Color{255, 239, 0, 255};
}
shape->setColor(color);
trail->setColor(color);
return SpriteData{shape, trail, color};
}
std::shared_ptr<ClassicNoteGraphics>
ClassicGraphicsFactory::createSprite(Type type) const
{
const auto data = generate(type);
return std::make_shared<ClassicNoteGraphics>(
ClassicNoteGraphics::Init{data.shape, data.trail, data.color});
}
std::shared_ptr<ClassicSelectionGraphics>
ClassicGraphicsFactory::createSelection() const
{
const auto shape = _core_factory->getRectangle();
return std::make_shared<ClassicSelectionGraphics>(
ClassicSelectionGraphics::Init{
shape, kku::Color{51, 153, 255, 120}
});
}