diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-04-02 23:10:34 -0400 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-04-02 23:10:47 -0400 |
commit | d911d9fe8bb2378070142610c8bdfe9ed505c56a (patch) | |
tree | c6e501875c8df699ee771b1d057f96be58f57149 | |
parent | bfa661013ada083d2999e06fd3c56a80afa687e6 (diff) | |
download | sigen-d911d9fe8bb2378070142610c8bdfe9ed505c56a.tar.gz sigen-d911d9fe8bb2378070142610c8bdfe9ed505c56a.tar.xz sigen-d911d9fe8bb2378070142610c8bdfe9ed505c56a.zip |
Move the collision watching down into the maps
-rw-r--r-- | sigmodr/widgets/gui/worldmapeditor.ui | 21 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapEditor.cpp | 2 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapEditor.h | 1 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapItem.cpp | 29 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapItem.h | 5 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapScene.cpp | 1 | ||||
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapScene.h | 1 |
7 files changed, 19 insertions, 41 deletions
diff --git a/sigmodr/widgets/gui/worldmapeditor.ui b/sigmodr/widgets/gui/worldmapeditor.ui index 0d921bf8..58091ba3 100644 --- a/sigmodr/widgets/gui/worldmapeditor.ui +++ b/sigmodr/widgets/gui/worldmapeditor.ui @@ -44,7 +44,7 @@ </property> </widget> </item> - <item row="1" column="0"> + <item row="0" column="2"> <widget class="QCheckBox" name="varDrawMasked"> <property name="toolTip"> <string/> @@ -60,23 +60,7 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QCheckBox" name="varWatchCollisions"> - <property name="toolTip"> - <string/> - </property> - <property name="statusTip"> - <string/> - </property> - <property name="whatsThis"> - <string/> - </property> - <property name="text"> - <string>Allow collisions</string> - </property> - </widget> - </item> - <item row="2" column="0" colspan="2"> + <item row="1" column="0" colspan="3"> <widget class="QGraphicsView" name="varView"> <property name="toolTip"> <string/> @@ -107,7 +91,6 @@ <tabstop>varGridSize</tabstop> <tabstop>varZoom</tabstop> <tabstop>varDrawMasked</tabstop> - <tabstop>varWatchCollisions</tabstop> <tabstop>varView</tabstop> </tabstops> </ui> diff --git a/sigmodr/widgets/mapeditor/WorldMapEditor.cpp b/sigmodr/widgets/mapeditor/WorldMapEditor.cpp index d212e21b..e4f52f76 100644 --- a/sigmodr/widgets/mapeditor/WorldMapEditor.cpp +++ b/sigmodr/widgets/mapeditor/WorldMapEditor.cpp @@ -53,7 +53,6 @@ WorldMapEditor::WorldMapEditor(Game* game, QWidget* parent) : ui_gridSize = formWidget->findChild<KIntNumInput*>("varGridSize"); ui_zoom = formWidget->findChild<KDoubleNumInput*>("varZoom"); ui_drawMasked = formWidget->findChild<QCheckBox*>("varDrawMasked"); - ui_watchCollisions = formWidget->findChild<QCheckBox*>("varWatchCollisions"); ui_view = formWidget->findChild<QGraphicsView*>("varView"); ui_zoom->setRange(.1, 10, .1); connect(ui_gridSize, SIGNAL(valueChanged(int)), this, SLOT(setGridSize(int))); @@ -106,5 +105,4 @@ void WorldMapEditor::makeConnections() connect(m_scene, SIGNAL(changed()), this, SIGNAL(changed())); connect(m_scene, SIGNAL(sceneRectChanged(QRectF)), this, SLOT(resizeGrid(QRectF))); connect(ui_drawMasked, SIGNAL(toggled(bool)), m_scene, SIGNAL(maskTiles(bool))); - connect(ui_watchCollisions, SIGNAL(toggled(bool)), m_scene, SIGNAL(watchCollisions(bool))); } diff --git a/sigmodr/widgets/mapeditor/WorldMapEditor.h b/sigmodr/widgets/mapeditor/WorldMapEditor.h index 72e8185c..37396036 100644 --- a/sigmodr/widgets/mapeditor/WorldMapEditor.h +++ b/sigmodr/widgets/mapeditor/WorldMapEditor.h @@ -68,7 +68,6 @@ class SIGMODRWIDGETS_NO_EXPORT WorldMapEditor : public QWidget KIntNumInput* ui_gridSize; KDoubleNumInput* ui_zoom; QCheckBox* ui_drawMasked; - QCheckBox* ui_watchCollisions; QGraphicsView* ui_view; }; } diff --git a/sigmodr/widgets/mapeditor/WorldMapItem.cpp b/sigmodr/widgets/mapeditor/WorldMapItem.cpp index f0ed28ce..588cecb1 100644 --- a/sigmodr/widgets/mapeditor/WorldMapItem.cpp +++ b/sigmodr/widgets/mapeditor/WorldMapItem.cpp @@ -42,12 +42,12 @@ WorldMapItem::WorldMapItem(Game* game, Map* map, QGraphicsScene* parent) : QObject(parent), m_game(game), m_map(map), - m_watchCollisions(false), + m_locked(false), m_tag(new QGraphicsSimpleTextItem(this)), m_label(new QGraphicsSimpleTextItem(this)) { setAcceptHoverEvents(true); - setFlags(ItemIsMovable | ItemDoesntPropagateOpacityToChildren); + setFlags(ItemIsMovable | ItemIsFocusable | ItemDoesntPropagateOpacityToChildren); setOpacity(.5); m_tag->setText(QString::number(m_map->id())); m_tag->setPos(-5, -8); @@ -68,7 +68,7 @@ QRectF WorldMapItem::boundingRect() const void WorldMapItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(widget) - painter->setPen(QPen(Qt::black, 2)); + painter->setPen(QPen(m_locked ? Qt::red : Qt::black, 2)); painter->drawRect(QRect(0, 0, m_map->width(), m_map->height())); painter->setBrush(QBrush(Qt::yellow)); if (option->state & QStyle::State_MouseOver) @@ -78,14 +78,22 @@ void WorldMapItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* opti } } -int WorldMapItem::type() const +bool WorldMapItem::collidesWithItem(const QGraphicsItem* other, Qt::ItemSelectionMode mode) const { - return Type; + Q_UNUSED(mode) + const WorldMapItem* item = qgraphicsitem_cast<const WorldMapItem*>(other); + if (!item) + return false; + QRectF rect = boundingRect().adjusted(1, 1, -1, -1); + QRectF otherRect = item->boundingRect().adjusted(1, 1, -1, -1); + rect.moveTo(scenePos()); + otherRect.moveTo(item->scenePos()); + return rect.intersects(otherRect); } -void WorldMapItem::watchCollisions(const bool watch) +int WorldMapItem::type() const { - m_watchCollisions = watch; + return Type; } void WorldMapItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) @@ -104,13 +112,6 @@ void WorldMapItem::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) void WorldMapItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) { - if (m_watchCollisions) - { - qDebug("Under development"); - setPos(m_game->mapPosition(m_map->id())); - event->ignore(); - } - else { QGraphicsItem::mouseMoveEvent(event); moveTo(scenePos().toPoint()); diff --git a/sigmodr/widgets/mapeditor/WorldMapItem.h b/sigmodr/widgets/mapeditor/WorldMapItem.h index 1aef1252..e6cef81b 100644 --- a/sigmodr/widgets/mapeditor/WorldMapItem.h +++ b/sigmodr/widgets/mapeditor/WorldMapItem.h @@ -56,9 +56,9 @@ class SIGMODRWIDGETS_NO_EXPORT WorldMapItem : public QObject, public QGraphicsIt void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget); + bool collidesWithItem(const QGraphicsItem* other, const Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const; + int type() const; - public slots: - void watchCollisions(const bool watch); signals: void changed(); @@ -76,7 +76,6 @@ class SIGMODRWIDGETS_NO_EXPORT WorldMapItem : public QObject, public QGraphicsIt Sigmod::Game* m_game; Sigmod::Map* m_map; - bool m_watchCollisions; QList<TileItem*> m_tiles; QGraphicsSimpleTextItem* m_tag; QGraphicsSimpleTextItem* m_label; diff --git a/sigmodr/widgets/mapeditor/WorldMapScene.cpp b/sigmodr/widgets/mapeditor/WorldMapScene.cpp index 89502006..c3c85766 100644 --- a/sigmodr/widgets/mapeditor/WorldMapScene.cpp +++ b/sigmodr/widgets/mapeditor/WorldMapScene.cpp @@ -42,7 +42,6 @@ WorldMapScene::WorldMapScene(Game* game, QObject* parent) : WorldMapItem* item = new WorldMapItem(m_game, map, this); connect(item, SIGNAL(changed()), this, SIGNAL(changed())); connect(this, SIGNAL(maskTiles(bool)), item, SIGNAL(maskTiles(bool))); - connect(this, SIGNAL(watchCollisions(bool)), item, SLOT(watchCollisions(bool))); m_maps.append(item); addItem(item); } diff --git a/sigmodr/widgets/mapeditor/WorldMapScene.h b/sigmodr/widgets/mapeditor/WorldMapScene.h index 860de121..916e679e 100644 --- a/sigmodr/widgets/mapeditor/WorldMapScene.h +++ b/sigmodr/widgets/mapeditor/WorldMapScene.h @@ -47,7 +47,6 @@ class SIGMODRWIDGETS_NO_EXPORT WorldMapScene : public QGraphicsScene void changed(); void maskTiles(const bool mask); - void watchCollisions(const bool watch); private: Sigmod::Game* m_game; QList<WorldMapItem*> m_maps; |