From e8780c9721a86eaf55bd280e4a30926dd75c88b8 Mon Sep 17 00:00:00 2001 From: Stepland <16676308+Stepland@users.noreply.github.com> Date: Sun, 8 Mar 2020 14:54:03 +0100 Subject: [PATCH] WE ARE OFFICIALY DONE WITH MUSIC SELECT FOR 0.1.0 --- CHANGELOG.md | 1 + src/Data/Song.hpp | 12 ++++++++++++ src/Main.cpp | 4 ++-- src/Screens/MusicSelect/DensityGraph.cpp | 2 +- src/Screens/MusicSelect/DensityGraph.hpp | 20 ++++---------------- src/Screens/MusicSelect/MusicSelect.cpp | 10 ++++++++-- src/Screens/MusicSelect/MusicSelect.hpp | 3 ++- src/Screens/MusicSelect/Panels/Panel.cpp | 4 ++-- src/Screens/MusicSelect/Panels/Panel.hpp | 4 ++-- 9 files changed, 34 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86508a3..04b5d7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - Options - Left / Right - Back +- Start Button Action ## Misc - Handling Resolution changes diff --git a/src/Data/Song.hpp b/src/Data/Song.hpp index 407e7c6..fee3a72 100644 --- a/src/Data/Song.hpp +++ b/src/Data/Song.hpp @@ -50,6 +50,18 @@ namespace Data { virtual ~Song() = default; }; + struct SongDifficulty { + const Data::Song& song; + const std::string& difficulty; + + bool operator==(const SongDifficulty &other) const { + return ( + song.folder == other.song.folder and + difficulty == other.difficulty + ); + } + }; + struct MemonSong : public Song { explicit MemonSong(const fs::path& memon_path); std::optional get_chart(const std::string& difficulty) const; diff --git a/src/Main.cpp b/src/Main.cpp index 9fe2a4f..bd2e361 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -39,7 +38,8 @@ int main(int, char const **) { preferences.screen.fullscreen ? sf::Style::Fullscreen : sf::Style::Default, settings }; - music_select.select_chart(window); + auto chart = music_select.select_chart(window); + std::cout << "Selected Chart : " << chart.song.title << " [" << chart.difficulty << "]" << std::endl; /* while (true) { diff --git a/src/Screens/MusicSelect/DensityGraph.cpp b/src/Screens/MusicSelect/DensityGraph.cpp index b58e1f9..15becba 100644 --- a/src/Screens/MusicSelect/DensityGraph.cpp +++ b/src/Screens/MusicSelect/DensityGraph.cpp @@ -43,7 +43,7 @@ namespace MusicSelect { target.draw(m_vertex_array, states); } - DensityGraph compute_density_graph_from_struct(const SongDifficulty& sd) { + DensityGraph compute_density_graph_from_struct(const Data::SongDifficulty& sd) { return compute_density_graph_from_song_difficulty(sd.song, sd.difficulty); } diff --git a/src/Screens/MusicSelect/DensityGraph.hpp b/src/Screens/MusicSelect/DensityGraph.hpp index 57d9de2..67ad06e 100644 --- a/src/Screens/MusicSelect/DensityGraph.hpp +++ b/src/Screens/MusicSelect/DensityGraph.hpp @@ -20,29 +20,17 @@ namespace MusicSelect { sf::VertexArray m_vertex_array; }; - struct SongDifficulty { - const Data::Song& song; - const std::string& difficulty; - - bool operator==(const SongDifficulty &other) const { - return ( - song.folder == other.song.folder and - difficulty == other.difficulty - ); - } - }; - - DensityGraph compute_density_graph_from_struct(const SongDifficulty& sd); + DensityGraph compute_density_graph_from_struct(const Data::SongDifficulty& sd); DensityGraph compute_density_graph_from_song_difficulty(const Data::Song& song, const std::string& difficulty); DensityGraph compute_density_graph_from_chart(const Data::Chart& chart, long start, long end); - using DensityGraphCache = Toolkit::Cache; + using DensityGraphCache = Toolkit::Cache; } namespace std { template <> - struct hash { - std::size_t operator()(const MusicSelect::SongDifficulty& sd) const { + struct hash { + std::size_t operator()(const Data::SongDifficulty& sd) const { auto song_hash = std::hash()(sd.song.folder.string()); song_hash ^= std::hash()(sd.difficulty) + 0x9e3779b9 + (song_hash<<6) + (song_hash>>2); return song_hash; diff --git a/src/Screens/MusicSelect/MusicSelect.cpp b/src/Screens/MusicSelect/MusicSelect.cpp index 500260c..58c3ca3 100644 --- a/src/Screens/MusicSelect/MusicSelect.cpp +++ b/src/Screens/MusicSelect/MusicSelect.cpp @@ -27,10 +27,9 @@ MusicSelect::Screen::Screen(const Data::SongList& t_song_list, SharedResources& std::cout << "loaded MusicSelect::Screen" << std::endl; } -void MusicSelect::Screen::select_chart(sf::RenderWindow& window) { +Data::SongDifficulty MusicSelect::Screen::select_chart(sf::RenderWindow& window) { window.setFramerateLimit(60); ImGui::SFML::Init(window); - bool chart_selected = false; sf::Clock imguiClock; ribbon.setPosition(get_ribbon_x(), get_ribbon_y()); resources.button_highlight.setPosition(get_ribbon_x(), get_ribbon_y()); @@ -95,6 +94,8 @@ void MusicSelect::Screen::select_chart(sf::RenderWindow& window) { resources.music_preview.update(); } ImGui::SFML::Shutdown(); + assert((resources.selected_panel.has_value())); + return *resources.selected_panel->obj.get_selected_difficulty(); } void MusicSelect::Screen::draw_debug() { @@ -217,6 +218,11 @@ void MusicSelect::Screen::press_button(const Data::Button& button) { } } break; + case Data::Button::B16: // Start Button + if (resources.selected_panel) { + chart_selected = true; + } + break; default: break; } diff --git a/src/Screens/MusicSelect/MusicSelect.hpp b/src/Screens/MusicSelect/MusicSelect.hpp index 5cde029..c80ecb7 100644 --- a/src/Screens/MusicSelect/MusicSelect.hpp +++ b/src/Screens/MusicSelect/MusicSelect.hpp @@ -30,7 +30,7 @@ namespace MusicSelect { const Data::SongList& t_song_list, SharedResources& t_resources ); - void select_chart(sf::RenderWindow& window); + Data::SongDifficulty select_chart(sf::RenderWindow& window); void draw_debug() override; private: const Data::SongList song_list; @@ -40,6 +40,7 @@ namespace MusicSelect { MainOptionPage main_option_page; OptionsButton options_button; StartButton start_button; + bool chart_selected = false; Drawables::BlackFrame black_frame; sf::RectangleShape panel_filter; diff --git a/src/Screens/MusicSelect/Panels/Panel.cpp b/src/Screens/MusicSelect/Panels/Panel.cpp index cae512d..cf76513 100644 --- a/src/Screens/MusicSelect/Panels/Panel.cpp +++ b/src/Screens/MusicSelect/Panels/Panel.cpp @@ -97,9 +97,9 @@ namespace MusicSelect { selected_chart.reset(); } - std::optional SongPanel::get_selected_difficulty() const { + std::optional SongPanel::get_selected_difficulty() const { if (selected_chart) { - return SongDifficulty{*m_song, *selected_chart}; + return Data::SongDifficulty{*m_song, *selected_chart}; } else { return {}; } diff --git a/src/Screens/MusicSelect/Panels/Panel.hpp b/src/Screens/MusicSelect/Panels/Panel.hpp index ec6b425..4fd3453 100644 --- a/src/Screens/MusicSelect/Panels/Panel.hpp +++ b/src/Screens/MusicSelect/Panels/Panel.hpp @@ -69,7 +69,7 @@ namespace MusicSelect { using Panel::Panel; virtual ~SelectablePanel() = default; virtual void unselect() = 0; - virtual std::optional get_selected_difficulty() const = 0; + virtual std::optional get_selected_difficulty() const = 0; }; class SongPanel final : public SelectablePanel { @@ -77,7 +77,7 @@ namespace MusicSelect { explicit SongPanel(SharedResources& t_resources, const std::shared_ptr& t_song) : SelectablePanel(t_resources), m_song(t_song) {}; void click(Ribbon& ribbon, const Data::Button& button) override; void unselect() override; - std::optional get_selected_difficulty() const override; + std::optional get_selected_difficulty() const override; private: void draw(sf::RenderTarget& target, sf::RenderStates states) const override; std::shared_ptr m_song;