F.E.I.S/src/marker.hpp

58 lines
1.3 KiB
C++
Raw Normal View History

#pragma once
2017-08-17 19:10:53 +02:00
#include <SFML/Graphics.hpp>
#include <cmath>
#include <filesystem>
#include <functional>
2021-12-31 14:59:39 +01:00
#include <iomanip>
#include <iostream>
#include <map>
#include <sstream>
2017-08-17 19:10:53 +02:00
2022-04-09 00:54:06 +02:00
enum class Judgement {
Perfect,
Great,
Good,
Early,
Miss
2017-08-17 19:10:53 +02:00
};
struct MarkerStatePreview {
2022-04-09 00:54:06 +02:00
Judgement state;
std::string name;
};
2022-04-09 00:54:06 +02:00
const static std::vector<MarkerStatePreview> marker_state_previews {
{Judgement::Perfect, "PERFECT"},
{Judgement::Great, "GREAT"},
{Judgement::Good, "GOOD"},
{Judgement::Early, "EARLY / LATE"},
{Judgement::Miss, "MISS"}
};
using ref_tex = std::reference_wrapper<sf::Texture>;
using opt_ref_tex = std::optional<ref_tex>;
/*
2021-12-31 14:59:39 +01:00
* Holds the textures associated with a given marker folder from the assets
* folder
*/
2017-08-17 19:10:53 +02:00
class Marker {
public:
2022-04-09 00:54:06 +02:00
explicit Marker(const std::filesystem::path& folder);
opt_ref_tex at(Judgement state, sf::Time offset);
ref_tex preview(Judgement state);
2017-08-17 19:10:53 +02:00
private:
2022-04-09 00:54:06 +02:00
unsigned int fps = 30;
std::vector<sf::Texture> approach;
std::vector<sf::Texture> perfect;
std::vector<sf::Texture> great;
std::vector<sf::Texture> good;
std::vector<sf::Texture> early;
std::vector<sf::Texture> miss;
std::vector<sf::Texture>& texture_vector_of(Judgement state);
2017-08-17 19:10:53 +02:00
};
2022-04-09 00:54:06 +02:00
Marker first_available_marker_from_folder(const std::filesystem::path& assets_folder);