Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions worldeditor/src/screens/scenecomposer/objectcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "tools/movetool.h"
#include "tools/rotatetool.h"
#include "tools/scaletool.h"
#include "tools/resizetool.h"

#include "config.h"

Expand Down Expand Up @@ -183,7 +182,6 @@ ObjectController::ObjectController() :
new MoveTool(this),
new RotateTool(this),
new ScaleTool(this),
new ResizeTool(this),
};
}

Expand Down
55 changes: 14 additions & 41 deletions worldeditor/src/screens/scenecomposer/scenecomposer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <QWidgetAction>
#include <QFormLayout>
#include <QLineEdit>
#include <QDoubleValidator>
#include <QToolButton>

#include <json.h>
#include <bson.h>
Expand Down Expand Up @@ -65,12 +65,12 @@ class WorldObserver : public Object {
void setSceneComposer(SceneComposer *composer) {
m_sceneComposer = composer;

World *world = m_sceneComposer->currentWorld();
World *world = Engine::world();
if(m_world != world) {
if(m_world) {
disconnect(m_world, 0, 0, 0);
}
m_world = m_sceneComposer->currentWorld();
m_world = world;

connect(m_world, _SIGNAL(sceneLoaded()), this, _SLOT(onSceneUpdated()));
connect(m_world, _SIGNAL(sceneUnloaded()), this, _SLOT(onSceneUpdated()));
Expand All @@ -81,7 +81,7 @@ class WorldObserver : public Object {

private:
void onSceneUpdated() {
m_sceneComposer->worldUpdated(m_world);
m_sceneComposer->updated();
}

private:
Expand Down Expand Up @@ -131,45 +131,27 @@ SceneComposer::SceneComposer(QWidget *parent) :

m_worldObserver->setSceneComposer(this);

QDoubleValidator *validator = new QDoubleValidator(0.01f, DBL_MAX, 4, this);
validator->setLocale(QLocale("C"));

QWidget *snapWidget = new QWidget();

QFormLayout *formLayout = new QFormLayout(snapWidget);
snapWidget->setLayout(formLayout);

int index = 0;
for(auto &it : m_controller->tools()) {
QPushButton *tool = new QPushButton();
tool->setProperty("blue", true);
tool->setProperty("checkred", true);
tool->setCheckable(true);
tool->setAutoExclusive(true);
tool->setIcon(QIcon(it->icon()));
tool->setObjectName(it->name());
QString shortcut = it->shortcut();
tool->setShortcut(QKeySequence(shortcut));
tool->setToolTip(it->toolTip() + (!shortcut.isEmpty() ? (" (" + shortcut + ")") : ""));
QPushButton *tool = it->button();

ui->viewportLayout->insertWidget(index, tool);

connect(tool, SIGNAL(clicked()), m_controller, SLOT(onChangeTool()));
if(index == 0) {
tool->click();
}

float snap = it->snap();
if(snap > 0.0f) {
QLineEdit *editor = new QLineEdit(snapWidget);
editor->setValidator(validator);
editor->setObjectName(it->name());
editor->setText(QString::number((double)snap, 'f', 2));
formLayout->addRow(it->name(), editor);

m_snapSettings[it->name()] = editor;

QLineEdit *editor = it->snapWidget();
if(editor) {
connect(editor, &QLineEdit::editingFinished, this, &SceneComposer::onChangeSnap);

editor->setParent(snapWidget);
formLayout->addRow(editor->objectName(), editor);
}

index++;
Expand Down Expand Up @@ -230,7 +212,6 @@ SceneComposer::SceneComposer(QWidget *parent) :
m_sceneMenu.addSeparator();
m_sceneMenu.addAction(createAction(tr("Add New Scene"), SLOT(onNewAsset()), false));


// Add Component Button
m_componentButton->setProperty("blue", true);
m_componentButton->setPopupMode(QToolButton::InstantPopup);
Expand Down Expand Up @@ -280,7 +261,7 @@ void SceneComposer::restoreState(const VariantMap &data) {
float snap = field->second.toFloat();
it->setSnap(snap);

QLineEdit *editor = m_snapSettings.value(it->name(), nullptr);
QLineEdit *editor = it->snapWidget();
if(editor) {
editor->setText(QString::number((double)snap, 'f', 2));
}
Expand All @@ -295,14 +276,6 @@ void SceneComposer::takeScreenshot() {
result.save("MainWindow-" + QDateTime::currentDateTime().toString("ddMMyy-HHmmss") + ".png");
}

World *SceneComposer::currentWorld() const {
return Engine::world();
}

void SceneComposer::worldUpdated(World *graph) {
emit updated();
}

void SceneComposer::onDrop(QDropEvent *event) {
m_controller->onDrop(event);
}
Expand Down Expand Up @@ -547,7 +520,7 @@ void SceneComposer::onNewAsset() {
void SceneComposer::loadAsset(AssetConverterSettings *settings) {
AssetEditor::loadAsset(settings);

if(settings->typeName() == "Map") {
if(settings->typeName() == MetaType::name<Map>()) {
if(loadScene(settings->source(), false)) {
UndoManager::instance()->clear();
}
Expand Down Expand Up @@ -581,7 +554,7 @@ void SceneComposer::onCreateActor() {
Scene *scene = m_controller->isolatedActor() ? m_isolationScene : Engine::world()->activeScene();

if(scene) {
UndoManager::instance()->push(new CreateObject("Actor", scene, m_controller));
UndoManager::instance()->push(new CreateObject(MetaType::name<Actor>(), scene, m_controller));
}
}

Expand Down Expand Up @@ -753,7 +726,7 @@ bool SceneComposer::loadScene(QString path, bool additive) {
}

emit objectsHierarchyChanged(Engine::world());
worldUpdated(Engine::world());
emit updated();
return true;
}
}
Expand Down
6 changes: 0 additions & 6 deletions worldeditor/src/screens/scenecomposer/scenecomposer.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
class ObjectController;
class WorldObserver;

class QLineEdit;
class QToolButton;

namespace Ui {
Expand All @@ -30,9 +29,6 @@ class SceneComposer : public AssetEditor {

void takeScreenshot();

World *currentWorld() const;
void worldUpdated(World *graph);

QMenu *objectContextMenu(Object *object) override;

QWidget *propertiesWidget() const override;
Expand Down Expand Up @@ -119,8 +115,6 @@ private slots:

QMap<uint32_t, AssetConverterSettings *> m_sceneSettings;

QMap<QString, QLineEdit *> m_snapSettings;

QList<QAction *> m_objectActions;
QList<QAction *> m_prefabActions;
QAction *m_activeSceneAction;
Expand Down
3 changes: 0 additions & 3 deletions worldeditor/src/screens/scenecomposer/scenecomposer.ui
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,6 @@
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
Expand Down
35 changes: 34 additions & 1 deletion worldeditor/src/screens/scenecomposer/tools/movetool.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
#include "movetool.h"

#include <QLineEdit>
#include <QDoubleValidator>

#include <cfloat>

#include <components/actor.h>
#include <components/transform.h>

Expand All @@ -14,6 +19,17 @@ MoveTool::MoveTool(ObjectController *controller) :

}

void MoveTool::beginControl() {
SelectTool::beginControl();

m_positions.clear();

for(auto it : m_controller->selectList()) {
Transform *t = it.object->transform();
m_positions.push_back(t->position());
}
}

void MoveTool::update(bool center, bool local, bool snap) {
SelectTool::update(center, local, snap);

Expand All @@ -29,19 +45,36 @@ void MoveTool::update(bool center, bool local, bool snap) {
delta[i] = m_snap * int(delta[i] / m_snap);
}
}

auto posIt = m_positions.begin();
for(const auto &it : qAsConst(m_controller->selectList())) {
Vector3 dt(local ? t->worldQuaternion() * delta : delta);
Actor *a = dynamic_cast<Actor *>(it.object->parent());
if(!local && a && a->transform()) {
dt = a->transform()->worldTransform().rotation().inverse() * delta;
}
if(it.object->transform()) {
it.object->transform()->setPosition(it.position + dt);
it.object->transform()->setPosition(*posIt + dt);
}
posIt++;
}
}
}

QLineEdit *MoveTool::snapWidget() {
if(m_snapEditor == nullptr) {
QDoubleValidator *validator = new QDoubleValidator(0.01f, DBL_MAX, 4);
validator->setLocale(QLocale("C"));

m_snapEditor = new QLineEdit();
m_snapEditor->setValidator(validator);
m_snapEditor->setObjectName(name());
m_snapEditor->setText(QString::number((double)m_snap, 'f', 2));
}

return m_snapEditor;
}

QString MoveTool::icon() const {
return ":/Images/editor/Move.png";
}
Expand Down
7 changes: 7 additions & 0 deletions worldeditor/src/screens/scenecomposer/tools/movetool.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,20 @@ class MoveTool : public SelectTool {
public:
explicit MoveTool(ObjectController *controller);

void beginControl() override;

void update(bool center, bool local, bool snap) override;

QLineEdit *snapWidget() override;

QString icon() const override;
QString name() const override;

QString toolTip() const override;
QString shortcut() const override;

private:
std::list<Vector3> m_positions;
};

#endif // MOVETOOL_H
Loading
Loading