diff --git a/core/shared/core/bpmsection.h b/core/shared/core/bpmsection.h new file mode 100644 index 0000000..195edd3 --- /dev/null +++ b/core/shared/core/bpmsection.h @@ -0,0 +1,15 @@ +#pragma once + +#include "tools/mathutils.h" + +struct BPMSection +{ + int bpm = 0; + int fraction = 1; + microsec offset_start = 0; + + inline bool operator<(const BPMSection& right) + { + return offset_start < right.offset_start; + } +}; diff --git a/core/shared/core/editor.h b/core/shared/core/editor.h new file mode 100644 index 0000000..5a58c23 --- /dev/null +++ b/core/shared/core/editor.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include "core/inputtype.h" +#include "core/bpmsection.h" + +class Editor +{ +public: + virtual ~Editor() = default; + + virtual void input(PlayerInput&& inputdata) = 0; + virtual void update() = 0; + virtual void draw() const = 0; + + inline void setBPMSections(const std::set& sections) + { + _bpm_sections = sections; + } + + inline void setBPMSections(std::set&& sections) + { + _bpm_sections = std::move(sections); + } + + inline void insertBPMSection(const BPMSection& section) + { + _bpm_sections.insert(section); + } + + inline void insertBPMSection(BPMSection&& section) + { + _bpm_sections.insert(std::move(section)); + } + + void removeBPMSectionAt(const microsec& offset) + { + const auto section_it = std::find_if(_bpm_sections.rbegin(), _bpm_sections.rend(), + [offset](const auto& section) + { + return section.start_offset < offset; + }); + + if (section_it != _bpm_sections.rend()) + _bpm_sections.erase((section_it + 1).base()); + } + + inline void clearBPMSections() + { + _bpm_sections.clear(); + } + +protected: + std::set _bpm_sections; +}; diff --git a/core/shared/core/game.h b/core/shared/core/game.h index 98c1ac3..ce125d8 100644 --- a/core/shared/core/game.h +++ b/core/shared/core/game.h @@ -1,5 +1,4 @@ -#ifndef GAME_H -#define GAME_H +#pragma once #include "core/inputtype.h" @@ -14,5 +13,3 @@ public: virtual void update() = 0; virtual void draw() const = 0; }; - -#endif // GAME_H diff --git a/modes/classicmode/editor/classiceditor.cpp b/modes/classicmode/editor/classiceditor.cpp new file mode 100644 index 0000000..abeb119 --- /dev/null +++ b/modes/classicmode/editor/classiceditor.cpp @@ -0,0 +1,6 @@ +#include "classiceditor.h" + +ClassicEditor::ClassicEditor() +{ + +} diff --git a/modes/classicmode/editor/classiceditor.cpp.autosave b/modes/classicmode/editor/classiceditor.cpp.autosave new file mode 100644 index 0000000..45665fd --- /dev/null +++ b/modes/classicmode/editor/classiceditor.cpp.autosave @@ -0,0 +1,6 @@ +#include "classiceditor.h" + +ClassicEditor::ClassicEditor(std::shared_ptr&& manager) +{ + +} diff --git a/modes/classicmode/editor/classiceditor.h b/modes/classicmode/editor/classiceditor.h new file mode 100644 index 0000000..ce65d04 --- /dev/null +++ b/modes/classicmode/editor/classiceditor.h @@ -0,0 +1,13 @@ +#pragma once + +#include "core/editor.h" + +class ClassicEditor : public Editor +{ +public: + explicit ClassicEditor(); + + virtual void input(PlayerInput&& inputdata) = 0; + virtual void update() = 0; + virtual void draw() const = 0; +}; diff --git a/src/application/application.cpp b/src/application/application.cpp index d0f7837..3e575ec 100644 --- a/src/application/application.cpp +++ b/src/application/application.cpp @@ -3,7 +3,7 @@ #include "mainmenu.h" #include "gamestate.h" -#include "editor.h" +#include "editorstate.h" #include "tools/music.h" #include "classicmode/classicfactory.h" @@ -30,11 +30,11 @@ Application::Application() : [&](){ pushState(GUIState::Tag::EDITOR); } }; - Editor::Callbacks editor_callbacks = {[&](){ popState(); }}; + EditorState::Callbacks editor_callbacks = {[&](){ popState(); }}; const auto main_menu = std::make_shared(_game_window, std::move(callbacks), _font_holder); const auto game_state = std::make_shared(_game_window, _game, GameState::Callbacks()); - const auto editor = std::make_shared(_game_window, std::move(editor_callbacks), std::make_unique(), _font_holder); + const auto editor = std::make_shared(_game_window, std::move(editor_callbacks), std::make_unique(), _font_holder); _states[GUIState::Tag::MAIN_MENU] = main_menu; _states[GUIState::Tag::GAME] = game_state; diff --git a/src/application/editor.cpp b/src/application/editorstate.cpp similarity index 89% rename from src/application/editor.cpp rename to src/application/editorstate.cpp index 0f678e2..744a461 100644 --- a/src/application/editor.cpp +++ b/src/application/editorstate.cpp @@ -1,4 +1,4 @@ -#include "editor.h" +#include "editorstate.h" #include "widgets/button.h" #include "widgets/group.h" #include "widgets/menubar.h" @@ -8,29 +8,29 @@ #include -Editor::Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr&& music, const FontHolder& font_holder) : +EditorState::EditorState(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr&& music, const FontHolder& font_holder) : _font(font_holder.get(Fonts::Id::GUI)), _game_window(game_window), _callbacks(std::move(callbacks)), _music(std::move(music)) {} -void Editor::input(const sf::Event& event) +void EditorState::input(const sf::Event& event) { _group->input(event); } -void Editor::update(const sf::Time& dt) +void EditorState::update(const sf::Time& dt) { _group->update(dt); } -void Editor::draw() const +void EditorState::draw() const { _game_window.draw(*_group); } -void Editor::enter() +void EditorState::enter() { auto& group = _group; auto& music = _music; @@ -103,7 +103,7 @@ void Editor::enter() _group->addChild(bpm_widget); } -void Editor::leave() +void EditorState::leave() { _group.reset(); _bpm_calculator.reset(); diff --git a/src/application/editor.h b/src/application/editorstate.h similarity index 80% rename from src/application/editor.h rename to src/application/editorstate.h index 7238319..bad9761 100644 --- a/src/application/editor.h +++ b/src/application/editorstate.h @@ -8,7 +8,7 @@ class BPMCalculator; class Group; -class Editor : public GUIState +class EditorState : public GUIState { public: @@ -17,7 +17,7 @@ public: std::function onLeaveEditorState; }; - explicit Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr&& music, const FontHolder& font_holder); + explicit EditorState(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr&& music, const FontHolder& font_holder); virtual void input(const sf::Event& event) override; virtual void update(const sf::Time& dt) override; virtual void draw() const override; diff --git a/src/application/widgets/editorwidget.cpp b/src/application/widgets/editorwidget.cpp new file mode 100644 index 0000000..4914201 --- /dev/null +++ b/src/application/widgets/editorwidget.cpp @@ -0,0 +1,50 @@ +#include "editorwidget.h" + +EditorWidget::EditorWidget(const std::shared_ptr& editor) : + _editor(editor) +{} + +void EditorWidget::input(const sf::Event& event) +{ + +} + +void EditorWidget::update(const sf::Time& dt) +{ + +} + +void EditorWidget::draw(sf::RenderTarget& target, sf::RenderStates states) const +{ + +} + +void EditorWidget::move(const sf::Vector2f& delta) +{ + +} + +bool EditorWidget::isUnderMouse(int mouse_x, int mouse_y) const +{ + +} + +void EditorWidget::setRect(const sf::FloatRect& rect) +{ + +} + +sf::FloatRect EditorWidget::rect() const +{ + +} + +void EditorWidget::setPosition(const sf::Vector2f& position) +{ + +} + +sf::Vector2f EditorWidget::position() const +{ + +} diff --git a/src/application/widgets/editorwidget.h b/src/application/widgets/editorwidget.h new file mode 100644 index 0000000..fbb9aa3 --- /dev/null +++ b/src/application/widgets/editorwidget.h @@ -0,0 +1,27 @@ +#pragma once + +#include "widget.h" + +class Editor; + +class EditorWidget : public Widget +{ +public: + explicit EditorWidget(const std::shared_ptr& editor); + + virtual void input(const sf::Event& event) override; + virtual void update(const sf::Time& dt) override; + virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override; + virtual void move(const sf::Vector2f& delta) override; + virtual bool isUnderMouse(int mouse_x, int mouse_y) const override; + + virtual void setRect(const sf::FloatRect& rect) override; + virtual sf::FloatRect rect() const override; + + virtual void setPosition(const sf::Vector2f& position) override; + virtual sf::Vector2f position() const override; + +private: + std::shared_ptr _editor; +}; +