1
0
mirror of synced 2024-11-13 18:20:53 +01:00

Song Info

This commit is contained in:
Stepland 2020-05-07 15:36:52 +02:00
parent d0368f6fbc
commit 71ac2eeda5
13 changed files with 112 additions and 14 deletions

View File

@ -46,11 +46,13 @@
- Sort out the wierdness when hitting early
- Score
- compute
- display
- Combo
- compute
- display
- Shutter
- compute
- Song Info
## Misc
- Handling Resolution changes

View File

@ -7,11 +7,10 @@
- Fullscreen handling
## Gameplay Screen
- Score
- display
- Shutter
- display
- Density Graph
- Long Notes
## Results Screen

View File

@ -82,7 +82,8 @@ sources = [
'src/Toolkit/GHCFilesystemPathHash.hpp',
'src/Toolkit/HSL.hpp',
'src/Toolkit/HSL.cpp',
'src/Toolkit/NormalizedOrigin.hpp',
'src/Toolkit/SFMLHelpers.hpp',
'src/Toolkit/SFMLHelpers.cpp',
'src/Toolkit/QuickRNG.hpp',
'src/Toolkit/QuickRNG.cpp',
'src/Main.cpp',

View File

@ -74,6 +74,8 @@ namespace Data {
float get_big_level_x() const {return preferences.layout.big_level_x*get_screen_width();};
float get_big_level_y() const {return preferences.layout.big_level_y*get_screen_width();};
float get_upper_part_height() const {return preferences.layout.upper_part_height*get_screen_width();};
// Scales a length in pixels from the original jubeat resolution of 768x1360 to the current screen resolution
float scale(float length) const {return (length*get_screen_width())/768.f;};
Preferences& preferences;
};
}

View File

@ -8,7 +8,7 @@
#include "../Data/Chart.hpp"
#include "../Data/Song.hpp"
#include "../Toolkit/Cache.hpp"
#include "../Toolkit/NormalizedOrigin.hpp"
#include "../Toolkit/SFMLHelpers.hpp"
namespace Drawables {
class DensityGraph : public sf::Drawable, public sf::Transformable {

View File

@ -11,7 +11,7 @@
#include <SFML/Graphics.hpp>
#include "../../Input/Buttons.hpp"
#include "../../Toolkit/NormalizedOrigin.hpp"
#include "../../Toolkit/SFMLHelpers.hpp"
#include "PreciseMusic.hpp"
#include "Silence.hpp"
@ -58,6 +58,9 @@ namespace Gameplay {
case sf::Event::Resized:
// update the view to the new size of the window
window.setView(sf::View({0, 0, static_cast<float>(event.size.width), static_cast<float>(event.size.height)}));
shared.preferences.screen.height = event.size.height;
shared.preferences.screen.width = event.size.width;
shared.button_highlight.setPosition(get_ribbon_x(), get_ribbon_y());
break;
default:
break;
@ -80,6 +83,24 @@ namespace Gameplay {
auto music_time = music->getPlayingOffset();
update_note_index(music_time);
window.clear(sf::Color(7, 23, 53));
// Draw song info
// Cover is 40x40 @ (384,20)
if (song_selection.song.cover) {
auto cover = shared.covers.get(*song_selection.song.full_cover_path());
if (cover) {
sf::Sprite cover_sprite{*cover->texture};
auto cover_size = 40.f/768.f*get_screen_width();
Toolkit::set_size_from_local_bounds(cover_sprite, cover_size, cover_size);
cover_sprite.setPosition(
384.f/768.f*get_screen_width(),
20.f/768.f*get_screen_width()
);
window.draw(cover_sprite);
}
}
// Draw Combo
auto current_combo = combo.load();
if (current_combo >= 4) {
@ -95,6 +116,8 @@ namespace Gameplay {
);
window.draw(combo_text);
}
// Draw score
auto current_score = score.get_score();
sf::Text score_text;
score_text.setFont(shared.fallback_font.black);
@ -108,6 +131,69 @@ namespace Gameplay {
);
window.draw(score_text);
// Draw song info
auto song_title = song_selection.song.title;
if (not song_title.empty()) {
sf::Text song_title_label{
sf::String::fromUtf8(song_title.begin(), song_title.end()),
shared.fallback_font.medium,
static_cast<unsigned int>(scale(20.f))
};
Toolkit::set_local_origin_normalized(song_title_label, 0.f, 1.f);
song_title_label.setFillColor(sf::Color::White);
song_title_label.setPosition(scale(440.f), scale(40.f));
window.draw(song_title_label);
}
auto song_artist = song_selection.song.artist;
if (not song_artist.empty()) {
sf::Text song_artist_label{
sf::String::fromUtf8(song_artist.begin(), song_artist.end()),
shared.fallback_font.medium,
static_cast<unsigned int>(scale(12.f))
};
song_artist_label.setStyle(sf::Text::Italic);
song_artist_label.setFillColor(sf::Color::White);
song_artist_label.setPosition(scale(440.f), scale(45.f));
window.draw(song_artist_label);
}
sf::Text level_label{
"LEVEL:",
shared.fallback_font.medium,
static_cast<unsigned int>(scale(10.f))
};
Toolkit::set_origin_normalized(level_label, 1.f, 1.f);
level_label.setPosition(scale(322.f), scale(35.f));
level_label.setFillColor(sf::Color::White);
window.draw(level_label);
sf::Text level_number_label{
std::to_string(chart.level),
shared.fallback_font.black,
static_cast<unsigned int>(scale(35.f))
};
Toolkit::set_origin_normalized(level_number_label, 0.5f, 0.f);
level_number_label.setPosition(scale(351.f), scale(24.f));
level_number_label.setFillColor(sf::Color::White);
window.draw(level_number_label);
std::string full_difficulty = song_selection.difficulty;
if (full_difficulty == "BSC") {
full_difficulty = "BASIC";
} else if (full_difficulty == "ADV") {
full_difficulty = "ADVANCED";
} else if (full_difficulty == "EXT") {
full_difficulty = "EXTREME";
}
sf::Text chart_label{
sf::String::fromUtf8(full_difficulty.begin(), full_difficulty.end()),
shared.fallback_font.medium,
static_cast<unsigned int>(scale(16.f))
};
Toolkit::set_local_origin_normalized(chart_label, 1.f, 1.f);
chart_label.setPosition(scale(322.f), scale(55.f));
chart_label.setFillColor(shared.get_chart_color(song_selection.difficulty));
window.draw(chart_label);
// Draw Notes
for (auto i = note_index.load(); i < notes.size(); ++i) {
@ -125,8 +211,7 @@ namespace Gameplay {
);
}
if (sprite) {
auto rect = sprite->getLocalBounds();
sprite->setScale(get_panel_size()/rect.width, get_panel_size()/rect.height);
Toolkit::set_size_from_local_bounds(*sprite, get_panel_size(), get_panel_size());
auto pos = Input::button_to_coords(note.position);
sprite->setPosition(
get_ribbon_x()+get_panel_step()*pos.x,

View File

@ -1,6 +1,6 @@
#include "ControlPanels.hpp"
#include "../../../Toolkit/NormalizedOrigin.hpp"
#include "../../../Toolkit/SFMLHelpers.hpp"
namespace MusicSelect {
void LeftButton::draw(sf::RenderTarget& target, sf::RenderStates states) const {

View File

@ -9,7 +9,7 @@
#include "../../Input/Buttons.hpp"
#include "../../Input/KeyMapping.hpp"
#include "../../Toolkit/NormalizedOrigin.hpp"
#include "../../Toolkit/SFMLHelpers.hpp"
#include "Panels/Panel.hpp"
#include "PanelLayout.hpp"

View File

@ -6,7 +6,7 @@
#include <SFML/Graphics.hpp>
#include "../../../Toolkit/HSL.hpp"
#include "../../../Toolkit/NormalizedOrigin.hpp"
#include "../../../Toolkit/SFMLHelpers.hpp"
namespace MusicSelect {

View File

@ -5,7 +5,7 @@
#include <SFML/Graphics.hpp>
#include "../../../Toolkit/HSL.hpp"
#include "../../../Toolkit/NormalizedOrigin.hpp"
#include "../../../Toolkit/SFMLHelpers.hpp"
#include "../Ribbon.hpp"
#include "../Resources.hpp"

View File

@ -6,7 +6,7 @@
#include <SFML/Graphics/Sprite.hpp>
#include "../../Toolkit/EasingFunctions.hpp"
#include "../../Toolkit/NormalizedOrigin.hpp"
#include "../../Toolkit/SFMLHelpers.hpp"
#include "Panels/Panel.hpp"
@ -112,7 +112,6 @@ namespace MusicSelect {
song_artist_label.setScale(m_big_cover.get_size() / song_artist_bounds.width, 1.0f);
}
song_artist_label.setFillColor(sf::Color::White);
song_artist_label.setFillColor(sf::Color::White);
song_artist_label.setPosition(
get_big_cover_x() - m_big_cover.get_size()/2.f,
get_big_cover_y() + m_big_cover.get_size() + 0.04f*get_screen_width()

View File

@ -0,0 +1,8 @@
#include "SFMLHelpers.hpp"
namespace Toolkit {
void set_size_from_local_bounds(sf::Sprite& s, float x, float y) {
auto const bounds = s.getLocalBounds();
s.setScale(x/bounds.width,y/bounds.height);
}
}

View File

@ -1,6 +1,6 @@
#pragma once
#include <SFML/Graphics.hpp>
#include <SFML/Graphics/Sprite.hpp>
namespace Toolkit {
template<class T>
@ -20,4 +20,6 @@ namespace Toolkit {
auto bounds = s.getGlobalBounds();
s.setOrigin(x*bounds.width, y*bounds.height);
}
void set_size_from_local_bounds(sf::Sprite& s, float x, float y);
}