Skip to content

AlexPrime2023/2D-Particle-Editor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 

Repository files navigation

2D Particle Editor

2D Particle Editor - небольшой редактор 2D частиц, написанный при помощи QtCreator. Он предназначени для редактирования партиклов из этого репозитория.

Видео демонстрация работы

Редактор партиклов построен на системе Node.

Node - конкретное свойство системы партикла - время жизни, например. У каждой Node есть свой NodeEditor, для задания различных характеристик.

Описание GUI

Разделено на 3 области (NodeViewer (1), Viewport (2), NodeEditor (3)). Главное окно работы

NodeViewer - виджет для управления нодами (добавление, выделение, удаление). NodeViewer

Описание Viewport

CTRL + Right Mouse Button - поворот камеры CTRL + Middle Mouse Button - panning камеры

Добавление новой функциональности

Для добавления новой Node необходимо написать NodeEditor для редактирования ее свойства.

Для добавления новой ноды необходимо добавить ее название и номер в NodeContainer.

NodeContainer::AddNodeToContainer("Life Time", 1);

Имя и номер должны быть уникальными, иначе не получится добавить.

Для добавления своего NodeEditor необходимо:

  1. Добавить CustomEditor в папку NodeEditors;
  2. Добавить CustomEditor.pri в NodeEditors.pri;
  3. Переопределить resetEditor() (вызывается при удалении Node из NodeViewer), serialize и deserialize, а также передать сигнал об изменении параметра emit nodeEditorWidgetChanged("Life Time", value);
  4. В файле NodeFacroty.h добавить в switch-case блок;

Node и NodeEditors готовы к использованию.

class CustomNodeEditor : public NodeEditor
{
    Q_OBJECT
public:
    explicit CustomNodeEditor(QWidget *parent = nullptr);
    void resetEditor() override;

public:
    QJsonObject serialize() const override;
    void deserialize(const QJsonObject& object) override;
};
class CustomNodeEditor : public NodeEditor
{
    Q_OBJECT
public:
    explicit CustomNodeEditor(QWidget *parent = nullptr);
    void resetEditor() override;

public:
    QJsonObject serialize() const override;
    void deserialize(const QJsonObject& object) override;
};
CustomNodeEditor::CustomNodeEditor(QWidget *parent) :
    NodeEditor(parent)
{
    m_floatEdit = new FloatEdit;
    m_floatEdit->setRange(0.0f, 5.0f);
    addItem(QString("Custom Param:"), m_floatEdit);

    QObject::connect(m_floatEdit, &FloatEdit::valueChanged, this, &NodeEditorLifeTime::onValueFloatEditChanged);
}

void CustomNodeEditor::resetEditor()
{
    m_floatEdit->setRange(0.0f, 5.0f);
    m_floatEdit->setValue(0.0f);
}

void CustomNodeEditor::onValueFloatEditChanged(float value)
{
    emit nodeEditorWidgetChanged("Custom Param", value);
}
    #include "nodeeditortcustom.h"

    case 12:
        return new CustomNode(parent);

Недоработки (TODO)

  • Разнести все по пространствам имен (namespace);
  • Написать 2D Viewport (пока что только 3D подключен);
  • Перейти от NodeId int -> enum class;
  • Поправить фабрику создания NodeEditors;
  • Нет интерполяции кривых (и они не уведомляют приложении об изименении их параметров);
  • Нет Window->About (добавить о том, как пользоваться приложением приложением);
  • Добавить 2D движок партиклов.

About

Небольшой редактор 2D частиц, написанный при помощи QtCreator

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages