From 0c4d6493ce9d1215c10d5f2942d373c4f37204b5 Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 2 May 2011 20:42:37 +0200 Subject: add eating overlay --- pacman-c++/sceneholder.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'pacman-c++/sceneholder.cpp') diff --git a/pacman-c++/sceneholder.cpp b/pacman-c++/sceneholder.cpp index f6b8145..51496ca 100644 --- a/pacman-c++/sceneholder.cpp +++ b/pacman-c++/sceneholder.cpp @@ -13,6 +13,8 @@ SceneHolder::SceneHolder(QObject *parent) setSceneRect(0, 0, Constants::map_size_pixel.width, Constants::map_size_pixel.height); setBackgroundBrush(Qt::black); + m_overlayText = new QGraphicsTextItem(); + visualMap.resize(Constants::map_size.width); for (int i = 0; i < visualMap.size(); ++i) visualMap[i].resize(Constants::map_size.height); @@ -21,6 +23,7 @@ SceneHolder::SceneHolder(QObject *parent) void SceneHolder::reset() { processDelayedItems(); + showEatingText(false); /* remove actors from scene so they don't get deleted during clear */ foreach(Actor *actor, m_actors) @@ -269,6 +272,49 @@ QList &SceneHolder::eatingOrder() return m_eatingorder; } +void SceneHolder::showEatingText(bool show) +{ + if (!show) + { + if (m_overlayText->scene() == this) + removeItem(m_overlayText); + return; + } + + m_overlayText->setDefaultTextColor(Qt::black); + QString text = QString( + "
" + "
" + ); + unsigned int lines = 1; + + text = text % QString("Your Pacman:

") + .arg(m_actors[m_color]->iconStr()); + lines += 2; + + foreach(Actor *actor, m_actors) + { + foreach(Actor *other, m_actors) + { + if (!actor->canEat(other, m_eatingorder)) + continue; + text = text % QString("  can eat
") + .arg(actor->iconStr(), other->iconStr()); + ++lines; + } + } + text = text % "
"; + m_overlayText->setHtml(text); + m_overlayText->setTextWidth(150); + m_overlayText->setOpacity(0.9); + + QFontMetrics metrics(m_overlayText->font()); + m_overlayText->setPos((width() - m_overlayText->textWidth()) / 2, (height() - metrics.height() * lines) / 2); + m_overlayText->setZValue(100); + + addItem(m_overlayText); +} + QPoint SceneHolder::mapPositionToCoord(unsigned int x, unsigned int y) { return QPoint(x * Constants::field_size.width, y * Constants::field_size.height); -- cgit v1.2.3