forked from NaiJi/project-kyoku
Add Editor interface
This commit is contained in:
parent
8579dc5507
commit
c097ac0da5
|
@ -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;
|
||||||
|
}
|
||||||
|
};
|
|
@ -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;
|
||||||
|
};
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef GAME_H
|
#pragma once
|
||||||
#define GAME_H
|
|
||||||
|
|
||||||
#include "core/inputtype.h"
|
#include "core/inputtype.h"
|
||||||
|
|
||||||
|
@ -14,5 +13,3 @@ public:
|
||||||
virtual void update() = 0;
|
virtual void update() = 0;
|
||||||
virtual void draw() const = 0;
|
virtual void draw() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GAME_H
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "classiceditor.h"
|
||||||
|
|
||||||
|
ClassicEditor::ClassicEditor()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include "classiceditor.h"
|
||||||
|
|
||||||
|
ClassicEditor::ClassicEditor(std::shared_ptr<ClassicGraphicsManager>&& manager)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
};
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "mainmenu.h"
|
#include "mainmenu.h"
|
||||||
#include "gamestate.h"
|
#include "gamestate.h"
|
||||||
#include "editor.h"
|
#include "editorstate.h"
|
||||||
|
|
||||||
#include "tools/music.h"
|
#include "tools/music.h"
|
||||||
#include "classicmode/classicfactory.h"
|
#include "classicmode/classicfactory.h"
|
||||||
|
@ -30,11 +30,11 @@ Application::Application() :
|
||||||
[&](){ pushState(GUIState::Tag::EDITOR); }
|
[&](){ 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 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 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::MAIN_MENU] = main_menu;
|
||||||
_states[GUIState::Tag::GAME] = game_state;
|
_states[GUIState::Tag::GAME] = game_state;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "editor.h"
|
#include "editorstate.h"
|
||||||
#include "widgets/button.h"
|
#include "widgets/button.h"
|
||||||
#include "widgets/group.h"
|
#include "widgets/group.h"
|
||||||
#include "widgets/menubar.h"
|
#include "widgets/menubar.h"
|
||||||
|
@ -8,29 +8,29 @@
|
||||||
|
|
||||||
#include <iostream>
|
#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)),
|
_font(font_holder.get(Fonts::Id::GUI)),
|
||||||
_game_window(game_window),
|
_game_window(game_window),
|
||||||
_callbacks(std::move(callbacks)),
|
_callbacks(std::move(callbacks)),
|
||||||
_music(std::move(music))
|
_music(std::move(music))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void Editor::input(const sf::Event& event)
|
void EditorState::input(const sf::Event& event)
|
||||||
{
|
{
|
||||||
_group->input(event);
|
_group->input(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::update(const sf::Time& dt)
|
void EditorState::update(const sf::Time& dt)
|
||||||
{
|
{
|
||||||
_group->update(dt);
|
_group->update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::draw() const
|
void EditorState::draw() const
|
||||||
{
|
{
|
||||||
_game_window.draw(*_group);
|
_game_window.draw(*_group);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::enter()
|
void EditorState::enter()
|
||||||
{
|
{
|
||||||
auto& group = _group;
|
auto& group = _group;
|
||||||
auto& music = _music;
|
auto& music = _music;
|
||||||
|
@ -103,7 +103,7 @@ void Editor::enter()
|
||||||
_group->addChild(bpm_widget);
|
_group->addChild(bpm_widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Editor::leave()
|
void EditorState::leave()
|
||||||
{
|
{
|
||||||
_group.reset();
|
_group.reset();
|
||||||
_bpm_calculator.reset();
|
_bpm_calculator.reset();
|
|
@ -8,7 +8,7 @@
|
||||||
class BPMCalculator;
|
class BPMCalculator;
|
||||||
class Group;
|
class Group;
|
||||||
|
|
||||||
class Editor : public GUIState
|
class EditorState : public GUIState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ public:
|
||||||
std::function<void(void)> onLeaveEditorState;
|
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 input(const sf::Event& event) override;
|
||||||
virtual void update(const sf::Time& dt) override;
|
virtual void update(const sf::Time& dt) override;
|
||||||
virtual void draw() const override;
|
virtual void draw() const override;
|
|
@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue