1
0
mirror of synced 2025-02-13 08:52:33 +01:00

Marker backend

This commit is contained in:
Stepland 2020-03-02 17:14:53 +01:00
parent 87c8eccd99
commit d7427bcf51
6 changed files with 40 additions and 7 deletions

View File

@ -53,6 +53,8 @@ sources = [
'src/Screens/MusicSelect/MusicSelect.cpp', 'src/Screens/MusicSelect/MusicSelect.cpp',
'src/Screens/MusicSelect/OptionPage.hpp', 'src/Screens/MusicSelect/OptionPage.hpp',
'src/Screens/MusicSelect/OptionPage.cpp', 'src/Screens/MusicSelect/OptionPage.cpp',
'src/Screens/MusicSelect/Panels/MarkerPanel.hpp',
'src/Screens/MusicSelect/Panels/MarkerPanel.cpp',
'src/Screens/MusicSelect/Panels/Panel.hpp', 'src/Screens/MusicSelect/Panels/Panel.hpp',
'src/Screens/MusicSelect/Panels/Panel.cpp', 'src/Screens/MusicSelect/Panels/Panel.cpp',
'src/Screens/MusicSelect/Panels/SubpagePanel.hpp', 'src/Screens/MusicSelect/Panels/SubpagePanel.hpp',

View File

@ -4,6 +4,7 @@
#include "Ribbon.hpp" #include "Ribbon.hpp"
#include "Panels/SubpagePanel.hpp" #include "Panels/SubpagePanel.hpp"
#include "Panels/MarkerPanel.hpp"
namespace MusicSelect { namespace MusicSelect {
MainOptionPage::MainOptionPage(SharedResources& resources) : MainOptionPage::MainOptionPage(SharedResources& resources) :
@ -17,6 +18,10 @@ namespace MusicSelect {
click_on(button); click_on(button);
} }
void MainOptionPage::draw(sf::RenderTarget& target, sf::RenderStates states) const {
this->Ribbon::draw(target, states);
}
PanelLayout MainOptionPage::create_layout(SharedResources& resources) { PanelLayout MainOptionPage::create_layout(SharedResources& resources) {
std::vector<jbcoe::polymorphic_value<Panel>> subpages; std::vector<jbcoe::polymorphic_value<Panel>> subpages;
jbcoe::polymorphic_value<OptionPage> marker_select{MarkerSelect{resources}}; jbcoe::polymorphic_value<OptionPage> marker_select{MarkerSelect{resources}};
@ -24,5 +29,27 @@ namespace MusicSelect {
return PanelLayout{subpages, resources}; return PanelLayout{subpages, resources};
} }
MarkerSelect::MarkerSelect(SharedResources& resources) :
OptionPage(resources),
Ribbon(MarkerSelect::create_layout(resources), resources)
{
}
void MarkerSelect::click(const Data::Button& button) {
click_on(button);
}
void MarkerSelect::draw(sf::RenderTarget& target, sf::RenderStates states) const {
this->Ribbon::draw(target, states);
}
PanelLayout MarkerSelect::create_layout(SharedResources& resources) {
std::vector<jbcoe::polymorphic_value<Panel>> markers;
for (const auto &[name, marker] : resources.markers) {
markers.emplace_back(MarkerPanel{resources, marker});
}
return PanelLayout{markers, resources};
}
} }

View File

@ -17,9 +17,11 @@ namespace MusicSelect {
OptionPage(SharedResources& resources) : HoldsSharedResources(resources) {}; OptionPage(SharedResources& resources) : HoldsSharedResources(resources) {};
virtual void click(const Data::Button& button) = 0; virtual void click(const Data::Button& button) = 0;
virtual ~OptionPage() = default; virtual ~OptionPage() = default;
private:
}; };
class MainOptionPage final : public OptionPage, public Ribbon { class MainOptionPage final : virtual public OptionPage, public Ribbon {
public: public:
MainOptionPage(SharedResources& resources); MainOptionPage(SharedResources& resources);
void click(const Data::Button& button) override; void click(const Data::Button& button) override;
@ -28,7 +30,7 @@ namespace MusicSelect {
static PanelLayout create_layout(SharedResources& resources); static PanelLayout create_layout(SharedResources& resources);
}; };
class MarkerSelect final : public OptionPage, public Ribbon { class MarkerSelect final : virtual public OptionPage, public Ribbon {
public: public:
MarkerSelect(SharedResources& resources); MarkerSelect(SharedResources& resources);
void click(const Data::Button& button) override; void click(const Data::Button& button) override;

View File

@ -23,9 +23,9 @@ namespace MusicSelect {
states.transform *= getTransform(); states.transform *= getTransform();
float animation_time = 0.f; float animation_time = 0.f;
if (selected_since) { if (selected_since) {
auto animation_time = std::fmodf(selected_since->getElapsedTime().asSeconds(), 2.f) - 1.f; animation_time = std::fmodf(selected_since->getElapsedTime().asSeconds(), 2.f) - 1.f;
} }
auto sprite = m_marker.get_sprite(Resources::MarkerAnimation::APPROACH, 0.f); auto sprite = m_marker.get_sprite(Resources::MarkerAnimation::APPROACH, animation_time);
if (sprite) { if (sprite) {
target.draw(*sprite, states); target.draw(*sprite, states);
} }

View File

@ -10,7 +10,7 @@
namespace MusicSelect { namespace MusicSelect {
class MarkerPanel final : public Panel { class MarkerPanel final : public Panel {
public: public:
MarkerPanel(SharedResources& resources, const Resources::Marker& marker) : Panel(resources), m_marker(marker) {}; MarkerPanel(SharedResources& resources, const Resources::Marker& marker);
void click(Ribbon&, const Data::Button&) override; void click(Ribbon&, const Data::Button&) override;
private: private:
void draw(sf::RenderTarget& target, sf::RenderStates states) const override; void draw(sf::RenderTarget& target, sf::RenderStates states) const override;

View File

@ -47,8 +47,10 @@ namespace MusicSelect {
void move_left(); void move_left();
void move_to_next_category(const Data::Button& button); void move_to_next_category(const Data::Button& button);
void draw_debug() override; void draw_debug() override;
private: virtual ~Ribbon() = default;
protected:
void draw(sf::RenderTarget& target, sf::RenderStates states) const override; void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
private:
void draw_with_animation(sf::RenderTarget& target, sf::RenderStates states) const; void draw_with_animation(sf::RenderTarget& target, sf::RenderStates states) const;
void draw_without_animation(sf::RenderTarget& target, sf::RenderStates states) const; void draw_without_animation(sf::RenderTarget& target, sf::RenderStates states) const;
std::size_t get_layout_column(const Data::Button& button) const; std::size_t get_layout_column(const Data::Button& button) const;