Add debug interface for MusicSelect::Screen
This commit is contained in:
parent
dc4c69c0cb
commit
f092804f16
@ -82,6 +82,6 @@ namespace Resources {
|
|||||||
sf::Texture m_perfect;
|
sf::Texture m_perfect;
|
||||||
};
|
};
|
||||||
|
|
||||||
using Markers = std::multimap<std::string, Marker>;
|
using Markers = std::map<std::string, Marker>;
|
||||||
Markers load_markers();
|
Markers load_markers();
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#include "MusicSelect.hpp"
|
#include "MusicSelect.hpp"
|
||||||
|
|
||||||
#include "imgui/imgui.h"
|
#include <imgui/imgui.h>
|
||||||
#include "imgui-sfml/imgui-SFML.h"
|
#include <imgui/misc/cpp/imgui_stdlib.h>
|
||||||
|
#include <imgui-sfml/imgui-SFML.h>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@ -31,6 +32,9 @@ MusicSelect::Screen::Screen(
|
|||||||
resources.m_preferences.layout.panel_step()*resources.m_preferences.screen.width*4.f
|
resources.m_preferences.layout.panel_step()*resources.m_preferences.screen.width*4.f
|
||||||
));
|
));
|
||||||
Toolkit::set_origin_normalized(panel_filter, 0.5f, 0.5f);
|
Toolkit::set_origin_normalized(panel_filter, 0.5f, 0.5f);
|
||||||
|
if (resources.m_preferences.options.marker.empty()) {
|
||||||
|
resources.m_preferences.options.marker = markers.begin()->second.m_metadata.name;
|
||||||
|
}
|
||||||
panel_filter.setFillColor(sf::Color(0,0,0,128));
|
panel_filter.setFillColor(sf::Color(0,0,0,128));
|
||||||
std::cout << "loaded MusicSelect::Screen" << std::endl;
|
std::cout << "loaded MusicSelect::Screen" << std::endl;
|
||||||
}
|
}
|
||||||
@ -114,6 +118,7 @@ void MusicSelect::Screen::select_chart(sf::RenderWindow& window) {
|
|||||||
window.draw(button_highlight);
|
window.draw(button_highlight);
|
||||||
window.draw(song_info);
|
window.draw(song_info);
|
||||||
window.draw(black_frame);
|
window.draw(black_frame);
|
||||||
|
draw_debug();
|
||||||
ImGui::SFML::Render(window);
|
ImGui::SFML::Render(window);
|
||||||
window.display();
|
window.display();
|
||||||
resources.music_preview.update();
|
resources.music_preview.update();
|
||||||
@ -121,6 +126,34 @@ void MusicSelect::Screen::select_chart(sf::RenderWindow& window) {
|
|||||||
ImGui::SFML::Shutdown();
|
ImGui::SFML::Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MusicSelect::Screen::draw_debug() {
|
||||||
|
if (debug) {
|
||||||
|
if (ImGui::Begin("MusicSelect::Screen")) {
|
||||||
|
if (ImGui::CollapsingHeader("Preferences")) {
|
||||||
|
if (ImGui::TreeNode("screen")) {
|
||||||
|
ImGui::TextUnformatted("width : "); ImGui::SameLine();
|
||||||
|
ImGui::Text("%s", std::to_string(resources.m_preferences.screen.width).c_str());
|
||||||
|
ImGui::TextUnformatted("height : "); ImGui::SameLine();
|
||||||
|
ImGui::Text("%s", std::to_string(resources.m_preferences.screen.height).c_str());
|
||||||
|
ImGui::TextUnformatted("fullscreen : "); ImGui::SameLine();
|
||||||
|
ImGui::Text("%s", resources.m_preferences.screen.fullscreen ? "true" : "false");
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
if (ImGui::TreeNode("layout")) {
|
||||||
|
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
if (ImGui::TreeNode("options")) {
|
||||||
|
ImGui::TextUnformatted("marker : "); ImGui::SameLine();
|
||||||
|
ImGui::Text("%s", resources.m_preferences.options.marker.c_str());
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MusicSelect::Screen::handle_key_press(const sf::Event::KeyEvent& key_event) {
|
void MusicSelect::Screen::handle_key_press(const sf::Event::KeyEvent& key_event) {
|
||||||
auto button = key_mapping.key_to_button(key_event.code);
|
auto button = key_mapping.key_to_button(key_event.code);
|
||||||
if (button) {
|
if (button) {
|
||||||
@ -129,6 +162,7 @@ void MusicSelect::Screen::handle_key_press(const sf::Event::KeyEvent& key_event)
|
|||||||
switch (key_event.code){
|
switch (key_event.code){
|
||||||
case sf::Keyboard::F12:
|
case sf::Keyboard::F12:
|
||||||
ribbon.debug = not ribbon.debug;
|
ribbon.debug = not ribbon.debug;
|
||||||
|
debug = not debug;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "../../Drawables/BlackFrame.hpp"
|
#include "../../Drawables/BlackFrame.hpp"
|
||||||
#include "../../Resources/Marker.hpp"
|
#include "../../Resources/Marker.hpp"
|
||||||
#include "../../Toolkit/AffineTransform.hpp"
|
#include "../../Toolkit/AffineTransform.hpp"
|
||||||
|
#include "../../Toolkit/Debuggable.hpp"
|
||||||
#include "Ribbon.hpp"
|
#include "Ribbon.hpp"
|
||||||
#include "SongInfo.hpp"
|
#include "SongInfo.hpp"
|
||||||
#include "SharedResources.hpp"
|
#include "SharedResources.hpp"
|
||||||
@ -23,7 +24,7 @@ namespace MusicSelect {
|
|||||||
class SongPanel;
|
class SongPanel;
|
||||||
// The music select screen is created only once
|
// The music select screen is created only once
|
||||||
// it loads a cache of available songs in the song_list attribute
|
// it loads a cache of available songs in the song_list attribute
|
||||||
class Screen {
|
class Screen : public Toolkit::Debuggable {
|
||||||
public:
|
public:
|
||||||
Screen(
|
Screen(
|
||||||
const Data::SongList& t_song_list,
|
const Data::SongList& t_song_list,
|
||||||
@ -31,7 +32,7 @@ namespace MusicSelect {
|
|||||||
const Resources::Markers& t_markers
|
const Resources::Markers& t_markers
|
||||||
);
|
);
|
||||||
void select_chart(sf::RenderWindow& window);
|
void select_chart(sf::RenderWindow& window);
|
||||||
|
void draw_debug() override;
|
||||||
private:
|
private:
|
||||||
// Data
|
// Data
|
||||||
const Data::SongList song_list;
|
const Data::SongList song_list;
|
||||||
|
@ -8,26 +8,43 @@ namespace MusicSelect {
|
|||||||
m_marker(marker)
|
m_marker(marker)
|
||||||
{
|
{
|
||||||
if (m_resources.m_preferences.options.marker == marker.m_metadata.name) {
|
if (m_resources.m_preferences.options.marker == marker.m_metadata.name) {
|
||||||
selected_since.emplace();
|
select();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarkerPanel::click(Ribbon&, const Data::Button&) {
|
void MarkerPanel::click(Ribbon&, const Data::Button&) {
|
||||||
if (not selected_since) {
|
if (selected) {
|
||||||
selected_since.emplace();
|
m_resources.selected_marker->last_click.restart();
|
||||||
m_resources.m_preferences.options.marker = m_marker.m_metadata.name;
|
m_resources.selected_marker->is_first_click = false;
|
||||||
|
} else {
|
||||||
|
select();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarkerPanel::draw(sf::RenderTarget& target, sf::RenderStates states) const {
|
void MarkerPanel::draw(sf::RenderTarget& target, sf::RenderStates states) const {
|
||||||
states.transform *= getTransform();
|
states.transform *= getTransform();
|
||||||
float animation_time = 0.f;
|
float animation_time = 0.f;
|
||||||
if (selected_since) {
|
if (selected) {
|
||||||
animation_time = std::fmod(selected_since->getElapsedTime().asSeconds(), 2.f) - 1.f;
|
animation_time = std::fmod(m_resources.selected_marker->last_click.getElapsedTime().asSeconds(), 2.f) - 1.f;
|
||||||
}
|
}
|
||||||
auto sprite = m_marker.get_sprite(Resources::MarkerAnimation::APPROACH, animation_time);
|
auto sprite = m_marker.get_sprite(Resources::MarkerAnimation::APPROACH, animation_time);
|
||||||
if (sprite) {
|
if (sprite) {
|
||||||
|
auto bounds = sprite->getGlobalBounds();
|
||||||
|
sprite->setScale(get_panel_size()/bounds.width, get_panel_size()/bounds.height);
|
||||||
target.draw(*sprite, states);
|
target.draw(*sprite, states);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MarkerPanel::select() {
|
||||||
|
if (m_resources.selected_marker) {
|
||||||
|
m_resources.selected_marker->obj.unselect();
|
||||||
|
}
|
||||||
|
m_resources.selected_marker.emplace(*this);
|
||||||
|
m_resources.m_preferences.options.marker == m_marker.m_metadata.name;
|
||||||
|
this->selected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MarkerPanel::unselect() {
|
||||||
|
this->selected = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,9 @@ namespace MusicSelect {
|
|||||||
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;
|
||||||
|
void select();
|
||||||
|
void unselect();
|
||||||
const Resources::Marker& m_marker;
|
const Resources::Marker& m_marker;
|
||||||
mutable std::optional<sf::Clock> selected_since;
|
bool selected = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -87,9 +87,9 @@ namespace MusicSelect {
|
|||||||
}
|
}
|
||||||
// The song was not selected before : first unselect the last one
|
// The song was not selected before : first unselect the last one
|
||||||
if (m_resources.selected_panel.has_value()) {
|
if (m_resources.selected_panel.has_value()) {
|
||||||
m_resources.selected_panel->panel.unselect();
|
m_resources.selected_panel->obj.unselect();
|
||||||
}
|
}
|
||||||
m_resources.selected_panel.emplace(TimedSelectedPanel{*this});
|
m_resources.selected_panel.emplace(*this);
|
||||||
m_resources.music_preview.play(m_song->full_audio_path(), m_song->preview);
|
m_resources.music_preview.play(m_song->full_audio_path(), m_song->preview);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
auto chart_selection = selected_panel->panel.get_selected_difficulty();
|
auto chart_selection = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not chart_selection.has_value()) {
|
if (not chart_selection.has_value()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
auto chart_selection = selected_panel->panel.get_selected_difficulty();
|
auto chart_selection = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not chart_selection.has_value()) {
|
if (not chart_selection.has_value()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,13 @@
|
|||||||
namespace MusicSelect {
|
namespace MusicSelect {
|
||||||
|
|
||||||
class SelectablePanel;
|
class SelectablePanel;
|
||||||
|
class MarkerPanel;
|
||||||
class OptionPage;
|
class OptionPage;
|
||||||
|
|
||||||
struct TimedSelectedPanel {
|
template<class Object>
|
||||||
TimedSelectedPanel(SelectablePanel& s) : panel(s), first_click(), last_click() {};
|
struct Timed {
|
||||||
SelectablePanel& panel;
|
Timed(Object& t_obj) : obj(t_obj), first_click(), last_click() {};
|
||||||
|
Object& obj;
|
||||||
sf::Clock first_click;
|
sf::Clock first_click;
|
||||||
sf::Clock last_click;
|
sf::Clock last_click;
|
||||||
bool is_first_click = true;
|
bool is_first_click = true;
|
||||||
@ -47,7 +49,7 @@ namespace MusicSelect {
|
|||||||
|
|
||||||
MusicSelect::DensityGraphCache density_graphs;
|
MusicSelect::DensityGraphCache density_graphs;
|
||||||
|
|
||||||
std::optional<TimedSelectedPanel> selected_panel;
|
std::optional<Timed<SelectablePanel>> selected_panel;
|
||||||
std::string get_last_selected_difficulty();
|
std::string get_last_selected_difficulty();
|
||||||
std::optional<std::string> get_selected_difficulty();
|
std::optional<std::string> get_selected_difficulty();
|
||||||
std::optional<std::reference_wrapper<const Data::Song>> get_selected_song();
|
std::optional<std::reference_wrapper<const Data::Song>> get_selected_song();
|
||||||
@ -62,6 +64,8 @@ namespace MusicSelect {
|
|||||||
std::stack<jbcoe::polymorphic_value<OptionPage>> options_state;
|
std::stack<jbcoe::polymorphic_value<OptionPage>> options_state;
|
||||||
|
|
||||||
const Resources::Markers& markers;
|
const Resources::Markers& markers;
|
||||||
|
|
||||||
|
std::optional<Timed<MarkerPanel>> selected_marker;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Proxy for HoldsPreferences
|
// Proxy for HoldsPreferences
|
||||||
|
@ -28,7 +28,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto selected_chart = selected_panel->panel.get_selected_difficulty();
|
auto selected_chart = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not selected_chart.has_value()) {
|
if (not selected_chart.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto selected_chart = selected_panel->panel.get_selected_difficulty();
|
auto selected_chart = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not selected_chart.has_value()) {
|
if (not selected_chart.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -126,7 +126,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto selected_chart = selected_panel->panel.get_selected_difficulty();
|
auto selected_chart = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not selected_chart.has_value()) {
|
if (not selected_chart.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -175,7 +175,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto selected_chart = selected_panel->panel.get_selected_difficulty();
|
auto selected_chart = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not selected_chart.has_value()) {
|
if (not selected_chart.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -225,7 +225,7 @@ namespace MusicSelect {
|
|||||||
if (not selected_panel.has_value()) {
|
if (not selected_panel.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto selected_difficulty = selected_panel->panel.get_selected_difficulty();
|
auto selected_difficulty = selected_panel->obj.get_selected_difficulty();
|
||||||
if (not selected_difficulty.has_value()) {
|
if (not selected_difficulty.has_value()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user