2D Particle Editor - небольшой редактор 2D частиц, написанный при помощи QtCreator. Он предназначени для редактирования партиклов из этого репозитория.
Редактор партиклов построен на системе Node.
Node - конкретное свойство системы партикла - время жизни, например. У каждой Node есть свой NodeEditor, для задания различных характеристик.
Разделено на 3 области (NodeViewer (1), Viewport (2), NodeEditor (3)).

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

CTRL + Right Mouse Button - поворот камеры CTRL + Middle Mouse Button - panning камеры
Для добавления новой Node необходимо написать NodeEditor для редактирования ее свойства.
Для добавления новой ноды необходимо добавить ее название и номер в NodeContainer.
NodeContainer::AddNodeToContainer("Life Time", 1);Имя и номер должны быть уникальными, иначе не получится добавить.
Для добавления своего NodeEditor необходимо:
- Добавить CustomEditor в папку NodeEditors;
- Добавить CustomEditor.pri в NodeEditors.pri;
- Переопределить resetEditor() (вызывается при удалении Node из NodeViewer), serialize и deserialize, а также передать сигнал об изменении параметра emit nodeEditorWidgetChanged("Life Time", value);
- В файле 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);- Разнести все по пространствам имен (namespace);
- Написать 2D Viewport (пока что только 3D подключен);
- Перейти от NodeId int -> enum class;
- Поправить фабрику создания NodeEditors;
- Нет интерполяции кривых (и они не уведомляют приложении об изименении их параметров);
- Нет Window->About (добавить о том, как пользоваться приложением приложением);
- Добавить 2D движок партиклов.