F.E.I.S/EditorState.h

152 lines
4.4 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"
#include "History.h"
#include "HistoryActions.h"
#include "Widgets.h"
#include "TimeSelection.h"
#include "NotesClipboard.h"
#include "ChartWithHistory.h"
class ActionWithMessage;
class OpenChart;
/*
* The god class, holds everything there is to know about the currently open .memon file
*/
class EditorState {
public:
explicit EditorState(Fumen& fumen);
std::optional<Chart_with_History> chart;
2019-03-26 00:04:29 +01:00
Fumen fumen;
2019-03-26 00:04:29 +01:00
Widgets::Playfield playfield;
Widgets::DensityGraph densityGraph;
2019-03-26 00:04:29 +01:00
Widgets::LinearView linearView;
// the snap but divided by 4 because you can't set a snap to anything lower than 4ths
int snap = 1;
2019-01-16 22:10:20 +01:00
std::optional<sf::Music> music;
int musicVolume = 10; // 0 -> 10
void setMusicVolume(int newMusicVolume);
void musicVolumeUp() {setMusicVolume(musicVolume+1);};
void musicVolumeDown() {setMusicVolume(musicVolume-1);};
int musicSpeed = 10; // 1 -> 20
void setMusicSpeed(int newMusicSpeed);
void musicSpeedUp() {setMusicSpeed(musicSpeed+1);};
void musicSpeedDown() {setMusicSpeed(musicSpeed-1);};
2019-01-16 22:10:20 +01:00
std::optional<sf::Texture> albumCover;
bool playing;
2019-01-17 03:02:37 +01:00
sf::Time previousPos;
sf::Time playbackPosition;
sf::Time previewEnd; // sf::Time at which the chart preview stops, can be after the end of the audio
void setPlaybackAndMusicPosition(sf::Time newPosition);
float getBeats () {return getBeatsAt(playbackPosition.asSeconds());};
float getBeatsAt (float seconds) {return ((seconds+fumen.offset)/60.f)* fumen.BPM;};
float getCurrentTick () {return getTicksAt(playbackPosition.asSeconds());};
float getTicksAt (float seconds) {return getBeatsAt(seconds) * getResolution();}
float getSecondsAt (int tick) {return (60.f * tick)/(fumen.BPM * getResolution()) - fumen.offset;};
int getResolution () {return chart ? chart->ref.getResolution() : 240;};
int getSnapStep () {return getResolution() / snap;};
2019-02-09 16:05:46 +01:00
float ticksToSeconds (int ticks) {return (60.f * ticks)/(fumen.BPM * getResolution());};
float getChartRuntime () {return previewEnd.asSeconds() + fumen.offset;};
void reloadFromFumen();
void reloadMusic();
void reloadPlaybackPositionAndPreviewEnd();
void reloadAlbumCover();
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;
bool showChartProperties;
bool showHistory;
bool showSoundSettings;
2019-03-26 00:04:29 +01:00
bool showLinearView;
void displayPlayfield(Marker& marker, MarkerEndingState markerEndingState);
void displayLongNote(const Note& note, int& ImGuiIndex, Marker& marker, MarkerEndingState& markerEndingState);
void displayProperties();
void displayStatus();
void displayPlaybackStatus();
void displayTimeline();
void displayChartList();
2019-03-26 00:04:29 +01:00
void displayLinearView();
2019-01-14 21:43:56 +01:00
void alertSaveChanges(sf::Window& window);
void updateVisibleNotes();
std::set<Note> visibleNotes;
void toggleNoteAtCurrentTime(int pos);
};
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;
};
class ChartPropertiesDialog {
public:
void display(EditorState& editorState);
bool shouldRefreshValues = true;
private:
int level;
std::string difficulty_name;
std::string comboPreview;
std::set<std::string> difNamesInUse;
bool showCustomDifName = false;
};
2019-01-13 22:29:29 +01:00
}
#endif //FEIS_EDITORSTATE_H