summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-04-02 23:10:34 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-04-02 23:10:47 -0400
commitd911d9fe8bb2378070142610c8bdfe9ed505c56a (patch)
treec6e501875c8df699ee771b1d057f96be58f57149
parentbfa661013ada083d2999e06fd3c56a80afa687e6 (diff)
downloadsigen-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.ui21
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapEditor.cpp2
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapEditor.h1
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapItem.cpp29
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapItem.h5
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapScene.cpp1
-rw-r--r--sigmodr/widgets/mapeditor/WorldMapScene.h1
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;