Remove ticks as a concept from Editor

This commit is contained in:
NaiJi ✨ 2021-12-13 19:52:26 +03:00
parent 0cf711db94
commit bb1bb88085
4 changed files with 12 additions and 63 deletions

View File

@ -32,7 +32,7 @@ public:
bool insertBPMSection(BPMSection&& section) bool insertBPMSection(BPMSection&& section)
{ {
return _bpm_sections.insert(std::move(section)).second; return _bpm_sections.insert(section).second;
} }
bool removeBPMSectionAt(const microsec& offset) bool removeBPMSectionAt(const microsec& offset)
@ -78,5 +78,4 @@ public:
protected: protected:
std::set<BPMSection, BPMSectionCompt> _bpm_sections; std::set<BPMSection, BPMSectionCompt> _bpm_sections;
std::set<microsec> _ticks;
}; };

View File

@ -8,69 +8,17 @@ ClassicEditor::ClassicEditor(std::shared_ptr<ClassicGraphicsManager>&& manager)
{ {
_context.graphics_manager = _graphics_manager; _context.graphics_manager = _graphics_manager;
int basic_offset = 500000 * 6; std::set<MockClassicNote*, NotePtrCompt> set = {};
std::set<MockClassicNote*, NotePtrCompt> _set = {}; _timeline.setNotes(set, 1648648);
NoteInitializer init;
init.context = &_context;
init.intervals = {};
init.perfect_offset = basic_offset + (500000 * 20);
ElementInitializer elem_init;
elem_init.type = _selected_type;
elem_init.coordinates = Coordinates{ 700 - (5 * 120), 550 };
elem_init.falling_curve_interpolation = {};
MockArrowNoteInitializer mock_init;
mock_init.elements = {elem_init};
mock_init.initializer = init;
_set.insert(new MockClassicNote(std::move(mock_init)));
_timeline.setNotes(_set, 1648648);
} }
microsec ClassicEditor::adjustOffset(microsec offset) const noexcept microsec ClassicEditor::adjustOffset(microsec offset) const noexcept
{ {
microsec left = -1; const auto& section = getBPMSectionAt(offset);
microsec right = -1; const microsec actual_offset = offset - section.offset_start;
std::set<microsec>::iterator i; return actual_offset + (actual_offset % section.interval);
for (i = _ticks.begin(); i != _ticks.end(); ++i)
{
if (*i >= offset)
{
right = *i;
break;
}
}
for (; i != _ticks.end(); --i)
{
if (*i <= offset)
{
left = *i;
break;
}
}
if (right == -1)
offset = left;
else if (left == -1)
offset = right;
else
{
const microsec right_distance = right - offset;
const microsec left_distance = offset - left;
offset = (right_distance > left_distance)
? left_distance
: right_distance;
}
return offset;
} }
void ClassicEditor::input(PlayerInput&& inputdata) void ClassicEditor::input(PlayerInput&& inputdata)
@ -87,7 +35,7 @@ void ClassicEditor::input(PlayerInput&& inputdata)
case sf::Event::MouseButtonPressed: case sf::Event::MouseButtonPressed:
{ {
const auto note = _timeline.getNoteBy(_current_time); const auto note = _timeline.getNoteBy(_current_time);
if (_timeline.isExpired(note) && !_ticks.empty()) if (_timeline.isExpired(note) && !_bpm_sections.empty() && _current_time >= (*_bpm_sections.begin()).offset_start)
{ {
NoteInitializer init; NoteInitializer init;
init.context = &_context; init.context = &_context;

View File

@ -38,7 +38,7 @@ void EditorState::draw() const
void EditorState::enter() void EditorState::enter()
{ {
_music.openFromFile("Uta-test.flac"); _music.openFromFile("METEOR.flac");
_music.setVolume(5); _music.setVolume(5);
auto& group = _group; auto& group = _group;
@ -72,7 +72,9 @@ void EditorState::enter()
button_apply->setCallback([&editor, bpm_calculator]() button_apply->setCallback([&editor, bpm_calculator]()
{ {
BPMSection section; BPMSection section;
section.bpm = bpm_calculator->fetchApproximatedInfo().BPM; const auto& info = bpm_calculator->fetchApproximatedInfo();
section.bpm = info.BPM;
section.interval = info.interval;
section.fraction = 2; section.fraction = 2;
section.offset_start = bpm_calculator->getStartingOffset(); section.offset_start = bpm_calculator->getStartingOffset();

View File

@ -92,7 +92,7 @@ void BPMCalculatorWidget::setRect(const sf::FloatRect& rect)
_window_content.getGlobalBounds().top + _window_content.getGlobalBounds().height - 40}); _window_content.getGlobalBounds().top + _window_content.getGlobalBounds().height - 40});
_button_apply->setRect(sf::FloatRect{0, 0, rect.width / 10 * 3, 30}); _button_apply->setRect(sf::FloatRect{0, 0, rect.width / 10 * 3, 30});
_button_apply->setPosition({_window_content.getGlobalBounds().left + 20 + (2 * (rect.width / 7)), _button_apply->setPosition({_window_content.getGlobalBounds().left + 50 + (2 * (rect.width / 7)),
_window_content.getGlobalBounds().top + _window_content.getGlobalBounds().height - 40}); _window_content.getGlobalBounds().top + _window_content.getGlobalBounds().height - 40});
_bpm_value.setPosition({_window_content.getGlobalBounds().left + rect.width / 8, _bpm_value.setPosition({_window_content.getGlobalBounds().left + rect.width / 8,