F.E.I.S/EditorState.h

100 lines
2.5 KiB
C
Raw Normal View History

//
// Created by Symeon on 23/12/2018.
//
#ifndef FEIS_EDITORSTATE_H
#define FEIS_EDITORSTATE_H
#include <optional>
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include "Fumen.h"
2019-01-13 22:29:29 +01:00
#include "Marker.h"
2019-01-14 21:43:56 +01:00
#include "Widgets.h"
class EditorState {
public:
Fumen fumen;
2019-01-14 21:43:56 +01:00
Widgets::Playfield playfield;
MarkerEndingState markerEndingState;
std::optional<sf::Music> music;
std::optional<sf::Texture> jacket;
2019-01-14 04:20:30 +01:00
std::optional<Chart> selectedChart;
sf::Time playbackPosition;
sf::Time chartRuntime; // Timing at which the playback stops
bool playing;
2019-01-14 21:43:56 +01:00
float getBeats() {return getBeatsAt(playbackPosition.asSeconds());};
float getBeatsAt(float seconds) {return ((seconds+fumen.offset)/60.f)* fumen.BPM;};
float getTicks() {return getTicksAt(playbackPosition.asSeconds());};
float getTicksAt(float seconds) {
if (selectedChart) {
return getBeatsAt(seconds)*selectedChart->getResolution();
} else {
return getBeatsAt(seconds)*240.f;
}
}
float getSecondsAt(int tick) {
if (selectedChart) {
return (60.f * tick)/(fumen.BPM * selectedChart->getResolution()) - fumen.offset;
} else {
return (60.f * tick)/(fumen.BPM * 240.f) - fumen.offset;
}
}
void reloadFromFumen();
void reloadMusic();
2019-01-14 04:20:30 +01:00
void reloadPlaybackPositionAndChartRuntime();
void reloadJacket();
2019-01-13 22:29:29 +01:00
bool showPlayfield = true;
bool showProperties;
2019-01-12 03:13:30 +01:00
bool showStatus;
bool showPlaybackStatus = true;
bool showTimeline = true;
bool showChartList;
bool showNewChartDialog;
2019-01-13 22:29:29 +01:00
void displayPlayfield();
void displayProperties();
void displayStatus();
void displayPlaybackStatus();
void displayTimeline();
void displayChartList();
void displayNewChartDialog();
2019-01-14 21:43:56 +01:00
bool playBeatTick;
bool playNoteTick;
std::vector<Note> getVisibleNotes();
2019-01-12 03:13:30 +01:00
explicit EditorState(Fumen& fumen);
};
2019-01-13 22:29:29 +01:00
namespace ESHelper {
void save(EditorState& ed);
void open(std::optional<EditorState>& ed);
void openFromFile(std::optional<EditorState>& ed, std::filesystem::path path);
class NewChartDialog {
public:
std::optional<Chart> display(EditorState& editorState);
void resetValues() {level = 1; resolution = 240; difficulty = ""; comboPreview = ""; showCustomDifName = false;};
private:
int level = 1;
int resolution = 240;
std::string difficulty;
std::string comboPreview;
bool showCustomDifName = false;
};
2019-01-13 22:29:29 +01:00
}
#endif //FEIS_EDITORSTATE_H