Add Editor interface

This commit is contained in:
NaiJi ✨ 2021-10-05 21:48:28 +03:00
parent 8579dc5507
commit c097ac0da5
11 changed files with 185 additions and 16 deletions

View File

@ -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;
}
};

55
core/shared/core/editor.h Normal file
View File

@ -0,0 +1,55 @@
#pragma once
#include <set>
#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<BPMSection>& sections)
{
_bpm_sections = sections;
}
inline void setBPMSections(std::set<BPMSection>&& 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<BPMSection> _bpm_sections;
};

View File

@ -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

View File

@ -0,0 +1,6 @@
#include "classiceditor.h"
ClassicEditor::ClassicEditor()
{
}

View File

@ -0,0 +1,6 @@
#include "classiceditor.h"
ClassicEditor::ClassicEditor(std::shared_ptr<ClassicGraphicsManager>&& manager)
{
}

View File

@ -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;
};

View File

@ -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<MainMenu>(_game_window, std::move(callbacks), _font_holder);
const auto game_state = std::make_shared<GameState>(_game_window, _game, GameState::Callbacks());
const auto editor = std::make_shared<Editor>(_game_window, std::move(editor_callbacks), std::make_unique<Music>(), _font_holder);
const auto editor = std::make_shared<EditorState>(_game_window, std::move(editor_callbacks), std::make_unique<Music>(), _font_holder);
_states[GUIState::Tag::MAIN_MENU] = main_menu;
_states[GUIState::Tag::GAME] = game_state;

View File

@ -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 <iostream>
Editor::Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr<Music>&& music, const FontHolder& font_holder) :
EditorState::EditorState(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr<Music>&& 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();

View File

@ -8,7 +8,7 @@
class BPMCalculator;
class Group;
class Editor : public GUIState
class EditorState : public GUIState
{
public:
@ -17,7 +17,7 @@ public:
std::function<void(void)> onLeaveEditorState;
};
explicit Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr<Music>&& music, const FontHolder& font_holder);
explicit EditorState(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr<Music>&& 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;

View File

@ -0,0 +1,50 @@
#include "editorwidget.h"
EditorWidget::EditorWidget(const std::shared_ptr<Editor>& 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
{
}

View File

@ -0,0 +1,27 @@
#pragma once
#include "widget.h"
class Editor;
class EditorWidget : public Widget
{
public:
explicit EditorWidget(const std::shared_ptr<Editor>& 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> _editor;
};