24 #include <QGraphicsView>
25 #include <QGraphicsScene>
26 #include <QGraphicsRectItem>
28 #include <KGameRenderer>
29 #include <KGameRenderedItem>
34 m_gameScene = p_scene;
38 QList <Player*> playerList = m_game->
getPlayers();
40 KGameRenderer* renderer;
44 for(
int i = 0; i < playerList.count(); i++)
46 QList <KGameRenderedItem*> svgItemList;
47 QGraphicsTextItem* playerName =
new QGraphicsTextItem(playerList[i]->getPlayerName());
49 playerName->setDefaultTextColor(QColor(
"#FFFF00"));
50 playerName->setZValue(2001);
52 for(
int j = 0; j < nWinPoints; j++)
55 score->setZValue(2001);
56 svgItemList.append(score);
58 m_mapScore.insert(playerList[i], svgItemList);
59 m_mapPlayerNames.insert(playerList[i], playerName);
62 QString strContinue (i18n(
"Press Space to continue"));
64 m_continueLabel =
new QGraphicsTextItem(strContinue);
65 m_continueLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
66 m_continueLabel->setDefaultTextColor(QColor(
"#FFFF00"));
67 m_continueLabel->setZValue(2001);
69 m_newGameLabel =
new QGraphicsTextItem(i18n(
"Press Space to start a new Game"));
70 m_newGameLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
71 m_newGameLabel->setDefaultTextColor(QColor(
"#FFFF00"));
72 m_newGameLabel->setZValue(2001);
74 m_gameOverLabel =
new QGraphicsTextItem;;
75 m_gameOverLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.5, QFont::Bold,
false));
76 m_gameOverLabel->setDefaultTextColor(QColor(
"#FFFF00"));
77 m_gameOverLabel->setZValue(2001);
79 m_getReadyLabel =
new QGraphicsTextItem(i18n(
"GET READY !!!"));
80 m_getReadyLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.6, QFont::Bold,
false));
81 m_getReadyLabel->setDefaultTextColor(QColor(
"#FFFF00"));
82 m_getReadyLabel->setZValue(2001);
84 m_startGameLabel =
new QGraphicsTextItem(i18n(
"Press Space to start"));
85 m_startGameLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
86 m_startGameLabel->setDefaultTextColor(QColor(
"#FFFF00"));
87 m_startGameLabel->setZValue(2001);
89 m_pauseLabel =
new QGraphicsTextItem(i18n(
"PAUSED"));
91 m_pauseLabel->setDefaultTextColor(QColor(
"#FFFF00"));
92 m_pauseLabel->setZValue(2001);
94 m_continueAfterPauseLabel =
new QGraphicsTextItem(strContinue);
95 m_continueAfterPauseLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
96 m_continueAfterPauseLabel->setDefaultTextColor(QColor(
"#FFFF00"));
97 m_continueAfterPauseLabel->setZValue(2001);
99 m_dimmOverlay =
new QGraphicsRectItem();
100 m_dimmOverlay->setBrush(QBrush(QColor(0,0,0,175)));
103 m_dimmOverlay->setBrush(QBrush(QColor(0,0,0,0)));
105 m_dimmOverlay->setZValue(2000);
106 m_dimmOverlay->setRect(m_gameScene->sceneRect().x(), m_gameScene->sceneRect().y(),
107 m_gameScene->width(), m_gameScene->height());
116 foreach (
const QList<KGameRenderedItem*>& scoreItems, m_mapScore)
118 qDeleteAll(scoreItems);
122 qDeleteAll(m_mapPlayerNames);
123 m_mapPlayerNames.clear();
125 delete m_continueLabel;
126 delete m_newGameLabel;
127 delete m_gameOverLabel;
128 delete m_getReadyLabel;
129 delete m_startGameLabel;
131 delete m_dimmOverlay;
132 delete m_continueAfterPauseLabel;
139 if (!m_gameScene->items().contains(m_dimmOverlay))
141 m_gameScene->addItem(m_dimmOverlay);
144 if (!m_gameScene->items().contains(m_getReadyLabel))
146 m_gameScene->addItem(m_getReadyLabel);
149 if (!m_gameScene->items().contains(m_startGameLabel))
151 m_gameScene->addItem(m_startGameLabel);
159 if (!m_gameScene->items().contains(m_dimmOverlay))
161 m_gameScene->addItem(m_dimmOverlay);
164 if (!m_gameScene->items().contains(m_pauseLabel))
166 m_gameScene->addItem(m_pauseLabel);
169 if (!m_gameScene->items().contains(m_continueAfterPauseLabel))
171 m_gameScene->addItem(m_continueAfterPauseLabel);
178 QList <Player*> players = m_game->
getPlayers();
183 if (!m_gameScene->items().contains(m_dimmOverlay))
185 m_gameScene->addItem(m_dimmOverlay);
188 for(
int i = 0; i < players.length(); i++)
190 if (!m_gameScene->items().contains(m_mapPlayerNames.value(players[i])))
193 m_gameScene->addItem(m_mapPlayerNames.value(players[i]));
196 for(
int j = 0; j < nWinPoints; j++)
198 svgItem = m_mapScore.value(players[i]).at(j);
199 if (players[i]->points() > j)
201 svgItem->setSpriteKey(
"score_star_enabled");
205 if (!m_gameScene->items().contains(svgItem))
208 m_gameScene->addItem(svgItem);
215 if (!m_gameScene->items().contains(m_continueLabel))
217 m_gameScene->addItem(m_continueLabel);
222 if (!m_gameScene->items().contains(m_newGameLabel))
224 m_gameScene->addItem(m_newGameLabel);
226 if (m_gameScene->items().contains(m_gameOverLabel))
228 m_gameScene->removeItem(m_gameOverLabel);
230 m_gameOverLabel->setPlainText(i18n(
"The winner is %1", m_game->
getWinner()));
231 m_gameOverLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_gameOverLabel->boundingRect().width())/2,
232 m_gameOverLabel->y());
233 m_gameScene->addItem(m_gameOverLabel);
240 QList <Player*> players = m_game->
getPlayers();
242 for(
int i = 0; i < players.length(); i++)
244 if (m_gameScene->items().contains(m_mapPlayerNames.value(players[i])))
247 m_gameScene->removeItem(m_mapPlayerNames.value(players[i]));
250 for(
int j = 0; j < nWinPoints; j++)
254 if (m_gameScene->items().contains(svgItem))
257 m_gameScene->removeItem(svgItem);
262 if (m_gameScene->items().contains(m_continueLabel))
264 m_gameScene->removeItem(m_continueLabel);
267 if (m_gameScene->items().contains(m_newGameLabel))
269 m_gameScene->removeItem(m_newGameLabel);
272 if (m_gameScene->items().contains(m_gameOverLabel))
274 m_gameScene->removeItem(m_gameOverLabel);
277 if (m_gameScene->items().contains(m_getReadyLabel))
279 m_gameScene->removeItem(m_getReadyLabel);
282 if (m_gameScene->items().contains(m_startGameLabel))
284 m_gameScene->removeItem(m_startGameLabel);
287 if (m_gameScene->items().contains(m_pauseLabel))
289 m_gameScene->removeItem(m_pauseLabel);
292 if (m_gameScene->items().contains(m_continueAfterPauseLabel))
294 m_gameScene->removeItem(m_continueAfterPauseLabel);
297 if (m_gameScene->items().contains(m_dimmOverlay))
299 m_gameScene->removeItem(m_dimmOverlay);
305 m_dimmOverlay->setRect(x, y, width, height);
310 if(m_gameScene->views().isEmpty())
316 QList <Player*> playerList = m_game->
getPlayers();
317 int nMaxPlayerNameLength = 0;
321 QGraphicsTextItem* playerName;
322 KGameRenderer* renderer;
324 QGraphicsTextItem em (
"M");
327 for(
int i = 0; i < playerList.count(); i++)
329 playerName = m_mapPlayerNames.value(playerList.at(i));
330 if(nMaxPlayerNameLength < playerName->boundingRect().width())
332 nMaxPlayerNameLength = playerName->boundingRect().width();
334 if(i == playerList.count() - 1)
337 nLeft = m_gameScene->sceneRect().x() + m_gameScene->width()/2 - (nMaxPlayerNameLength + em.boundingRect().width()/2 + nWinPoints * (
Granatier::CellSize * 0.6 + em.boundingRect().width()/5))/2;
338 nTop = m_gameScene->sceneRect().y() + m_gameScene->height()/2 - (playerList.count()+2)/2 * em.boundingRect().height();
343 QPoint topLeft(0, 0);
344 topLeft = m_gameScene->views().first()->mapFromScene(topLeft);
348 for(
int i = 0; i < playerList.count(); i++)
350 playerName = m_mapPlayerNames.value(playerList.at(i));
351 playerName->setPos(nLeft, nTop + i * em.boundingRect().height() * 1.1);
353 for(
int j = 0; j < nWinPoints; j++)
355 score = m_mapScore.value(playerList.at(i)).at(j);
358 bottomRight = m_gameScene->views().first()->mapFromScene(bottomRight);
360 svgSize.setHeight(bottomRight.y() - topLeft.y());
361 svgSize.setWidth(bottomRight.x() - topLeft.x());
363 score->setRenderSize(svgSize);
364 score->setScale(svgScaleFactor);
366 score->setPos(nLeft + nMaxPlayerNameLength + em.boundingRect().width()/2 + j * (
Granatier::CellSize * 0.6 + em.boundingRect().width()/5),
372 m_continueLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_continueLabel->boundingRect().width())/2,
373 nTop + (playerList.count()+1) * (m_continueLabel->boundingRect().height()));
374 m_newGameLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_newGameLabel->boundingRect().width())/2,
375 nTop + (playerList.count()+1) * (m_newGameLabel->boundingRect().height()));
376 m_gameOverLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_gameOverLabel->boundingRect().width())/2,
377 nTop - m_gameOverLabel->boundingRect().height());
378 m_getReadyLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_getReadyLabel->boundingRect().width()) / 2,
379 m_gameScene->sceneRect().y() + (m_gameScene->height() - m_getReadyLabel->boundingRect().height() - m_startGameLabel->boundingRect().height()) / 2);
380 m_startGameLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_startGameLabel->boundingRect().width()) / 2,
381 m_gameScene->sceneRect().y() + (m_gameScene->height() + m_getReadyLabel->boundingRect().height() - m_startGameLabel->boundingRect().height()) / 2);
382 m_pauseLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_pauseLabel->boundingRect().width()) / 2,
383 m_gameScene->sceneRect().y() + (m_gameScene->height() - m_pauseLabel->boundingRect().height() - m_continueAfterPauseLabel->boundingRect().height()) / 2);
384 m_continueAfterPauseLabel->setPos(m_gameScene->sceneRect().x() + (m_gameScene->width() - m_continueAfterPauseLabel->boundingRect().width()) / 2,
385 m_gameScene->sceneRect().y() + (m_gameScene->height() + m_pauseLabel->boundingRect().height() - m_continueAfterPauseLabel->boundingRect().height()) / 2);
394 QMap <Player*, QList<KGameRenderedItem*> >::iterator iteratorScore = m_mapScore.begin();
395 while (iteratorScore != m_mapScore.end())
397 QList <KGameRenderedItem*>::iterator iteratorStar = iteratorScore.value().begin();
398 while(iteratorStar != iteratorScore.value().end())
400 tempItem = *iteratorStar;
402 (*iteratorStar)->setZValue(tempItem->zValue());
403 (*iteratorStar)->setPos(tempItem->pos());
405 if(m_gameScene->items().contains(tempItem))
407 m_gameScene->removeItem(tempItem);
408 m_gameScene->addItem(*iteratorStar);
QString getWinner() const
const qreal CellSize
The Cell size.
QList< Player * > getPlayers() const
void resizeDimmOverlay(qreal x, qreal y, qreal width, qreal height)
Resize dimm overlay.
This class manages the game main loop : it regularly checks the key press events, computes the charac...
void showScore()
Shows the score info.
void hideItems()
Hides the info items.
InfoOverlay(Game *p_game, GameScene *p_scene)
Creates a new InfoOverlay instance.
void showGetReady()
Shows the get ready info.
KGameRenderer * renderer(Granatier::Element::Type type, Player *player=NULL)
Returns the renderer for the requestet Element Type.
void showPause()
Shows the pause info.
This class contains all the Game elements to be drawn on the screen by the GameView instance...
~InfoOverlay()
Deletes the InfoOverlay instance.
virtual void updateGraphics(qreal svgScaleFactor)
Updates the graphics after a resize.
void themeChanged()
Handles theme changes.