• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

granatier

  • sources
  • kde-4.14
  • kdegames
  • granatier
  • src
infooverlay.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2009 Mathias Kraus <k.hias@gmx.de>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of
7  * the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include "infooverlay.h"
19 #include "game.h"
20 #include "gamescene.h"
21 #include "player.h"
22 #include "settings.h"
23 
24 #include <QGraphicsView>
25 #include <QGraphicsScene>
26 #include <QGraphicsRectItem>
27 #include <KLocale>
28 #include <KGameRenderer>
29 #include <KGameRenderedItem>
30 
31 InfoOverlay::InfoOverlay (Game* p_game, GameScene* p_scene) : QObject()
32 {
33  m_game = p_game;
34  m_gameScene = p_scene;
35  m_svgScaleFactor = 1;
36 
37  int nWinPoints = m_game->getWinPoints();
38  QList <Player*> playerList = m_game->getPlayers();
39 
40  KGameRenderer* renderer;
41  renderer = m_gameScene->renderer(Granatier::Element::SCORE);
42 
43  //create the labels
44  for(int i = 0; i < playerList.count(); i++)
45  {
46  QList <KGameRenderedItem*> svgItemList;
47  QGraphicsTextItem* playerName = new QGraphicsTextItem(playerList[i]->getPlayerName());
48  playerName->setFont(QFont("Helvetica", Granatier::CellSize * 0.35, QFont::Bold, false));
49  playerName->setDefaultTextColor(QColor("#FFFF00"));
50  playerName->setZValue(2001);
51 
52  for(int j = 0; j < nWinPoints; j++)
53  {
54  KGameRenderedItem* score = new KGameRenderedItem(renderer, "score_star_disabled");
55  score->setZValue(2001);
56  svgItemList.append(score);
57  }
58  m_mapScore.insert(playerList[i], svgItemList);
59  m_mapPlayerNames.insert(playerList[i], playerName);
60  }
61 
62  QString strContinue (i18n("Press Space to continue"));
63 
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);
68 
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);
73 
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);
78 
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);
83 
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);
88 
89  m_pauseLabel = new QGraphicsTextItem(i18n("PAUSED"));
90  m_pauseLabel->setFont(QFont("Helvetica", Granatier::CellSize * 0.8, QFont::Bold, false));
91  m_pauseLabel->setDefaultTextColor(QColor("#FFFF00"));
92  m_pauseLabel->setZValue(2001);
93 
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);
98 
99  m_dimmOverlay = new QGraphicsRectItem();
100  m_dimmOverlay->setBrush(QBrush(QColor(0,0,0,175)));
101  if(Settings::self()->showAllTiles() == 1)
102  {
103  m_dimmOverlay->setBrush(QBrush(QColor(0,0,0,0)));
104  }
105  m_dimmOverlay->setZValue(2000);
106  m_dimmOverlay->setRect(m_gameScene->sceneRect().x(), m_gameScene->sceneRect().y(),
107  m_gameScene->width(), m_gameScene->height());
108 }
109 
110 InfoOverlay::~InfoOverlay()
111 {
112  //remove the items from the scene
113  hideItems();
114 
115  // Find the score items and remove them
116  foreach (const QList<KGameRenderedItem*>& scoreItems, m_mapScore)
117  {
118  qDeleteAll(scoreItems);
119  }
120  m_mapScore.clear(); //TODO: necessary?
121  // Find the player name labels and remove them
122  qDeleteAll(m_mapPlayerNames);
123  m_mapPlayerNames.clear(); //TODO: necessary?
124 
125  delete m_continueLabel;
126  delete m_newGameLabel;
127  delete m_gameOverLabel;
128  delete m_getReadyLabel;
129  delete m_startGameLabel;
130  delete m_pauseLabel;
131  delete m_dimmOverlay;
132  delete m_continueAfterPauseLabel;
133 }
134 
135 void InfoOverlay::showGetReady ()
136 {
137  hideItems();
138 
139  if (!m_gameScene->items().contains(m_dimmOverlay))
140  {
141  m_gameScene->addItem(m_dimmOverlay);
142  }
143 
144  if (!m_gameScene->items().contains(m_getReadyLabel))
145  {
146  m_gameScene->addItem(m_getReadyLabel);
147  }
148 
149  if (!m_gameScene->items().contains(m_startGameLabel))
150  {
151  m_gameScene->addItem(m_startGameLabel);
152  }
153 }
154 
155 void InfoOverlay::showPause ()
156 {
157  hideItems();
158 
159  if (!m_gameScene->items().contains(m_dimmOverlay))
160  {
161  m_gameScene->addItem(m_dimmOverlay);
162  }
163 
164  if (!m_gameScene->items().contains(m_pauseLabel))
165  {
166  m_gameScene->addItem(m_pauseLabel);
167  }
168 
169  if (!m_gameScene->items().contains(m_continueAfterPauseLabel))
170  {
171  m_gameScene->addItem(m_continueAfterPauseLabel);
172  }
173 }
174 
175 void InfoOverlay::showScore ()
176 {
177  int nWinPoints = m_game->getWinPoints();
178  QList <Player*> players = m_game->getPlayers();
179  KGameRenderedItem* svgItem;
180 
181  hideItems();
182 
183  if (!m_gameScene->items().contains(m_dimmOverlay))
184  {
185  m_gameScene->addItem(m_dimmOverlay);
186  }
187 
188  for(int i = 0; i < players.length(); i++)
189  {
190  if (!m_gameScene->items().contains(m_mapPlayerNames.value(players[i])))
191  {
192  // display the player name
193  m_gameScene->addItem(m_mapPlayerNames.value(players[i]));
194  }
195 
196  for(int j = 0; j < nWinPoints; j++)
197  {
198  svgItem = m_mapScore.value(players[i]).at(j);
199  if (players[i]->points() > j)
200  {
201  svgItem->setSpriteKey("score_star_enabled");
202  }
203 
204  // if the score was not displayed yet
205  if (!m_gameScene->items().contains(svgItem))
206  {
207  // display the score
208  m_gameScene->addItem(svgItem);
209  }
210  }
211  }
212 
213  if(m_game->getGameOver() == false)
214  {
215  if (!m_gameScene->items().contains(m_continueLabel))
216  {
217  m_gameScene->addItem(m_continueLabel);
218  }
219  }
220  else
221  {
222  if (!m_gameScene->items().contains(m_newGameLabel))
223  {
224  m_gameScene->addItem(m_newGameLabel);
225  }
226  if (m_gameScene->items().contains(m_gameOverLabel))
227  {
228  m_gameScene->removeItem(m_gameOverLabel);
229  }
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);
234  }
235 }
236 
237 void InfoOverlay::hideItems ()
238 {
239  int nWinPoints = m_game->getWinPoints();
240  QList <Player*> players = m_game->getPlayers();
241 
242  for(int i = 0; i < players.length(); i++)
243  {
244  if (m_gameScene->items().contains(m_mapPlayerNames.value(players[i])))
245  {
246  // display the player name
247  m_gameScene->removeItem(m_mapPlayerNames.value(players[i]));
248  }
249 
250  for(int j = 0; j < nWinPoints; j++)
251  {
252  KGameRenderedItem* svgItem = m_mapScore.value(players[i]).at(j);
253  // if the score is displayed
254  if (m_gameScene->items().contains(svgItem))
255  {
256  // remove the score
257  m_gameScene->removeItem(svgItem);
258  }
259  }
260  }
261 
262  if (m_gameScene->items().contains(m_continueLabel))
263  {
264  m_gameScene->removeItem(m_continueLabel);
265  }
266 
267  if (m_gameScene->items().contains(m_newGameLabel))
268  {
269  m_gameScene->removeItem(m_newGameLabel);
270  }
271 
272  if (m_gameScene->items().contains(m_gameOverLabel))
273  {
274  m_gameScene->removeItem(m_gameOverLabel);
275  }
276 
277  if (m_gameScene->items().contains(m_getReadyLabel))
278  {
279  m_gameScene->removeItem(m_getReadyLabel);
280  }
281 
282  if (m_gameScene->items().contains(m_startGameLabel))
283  {
284  m_gameScene->removeItem(m_startGameLabel);
285  }
286 
287  if (m_gameScene->items().contains(m_pauseLabel))
288  {
289  m_gameScene->removeItem(m_pauseLabel);
290  }
291 
292  if (m_gameScene->items().contains(m_continueAfterPauseLabel))
293  {
294  m_gameScene->removeItem(m_continueAfterPauseLabel);
295  }
296 
297  if (m_gameScene->items().contains(m_dimmOverlay))
298  {
299  m_gameScene->removeItem(m_dimmOverlay);
300  }
301 }
302 
303 void InfoOverlay::resizeDimmOverlay(qreal x, qreal y, qreal width, qreal height)
304 {
305  m_dimmOverlay->setRect(x, y, width, height);
306 }
307 
308 void InfoOverlay::updateGraphics(qreal svgScaleFactor)
309 {
310  if(m_gameScene->views().isEmpty())
311  {
312  return;
313  }
314 
315  int nWinPoints = m_game->getWinPoints();
316  QList <Player*> playerList = m_game->getPlayers();
317  int nMaxPlayerNameLength = 0;
318  int nTop = 0;
319  int nLeft = 0;
320 
321  QGraphicsTextItem* playerName;
322  KGameRenderer* renderer;
323  renderer = m_gameScene->renderer(Granatier::Element::SCORE);
324  QGraphicsTextItem em ("M");
325  em.setFont(QFont("Helvetica", Granatier::CellSize * 0.35, QFont::Bold, false));
326  //calculate max player name length and top-left position
327  for(int i = 0; i < playerList.count(); i++)
328  {
329  playerName = m_mapPlayerNames.value(playerList.at(i));
330  if(nMaxPlayerNameLength < playerName->boundingRect().width())
331  {
332  nMaxPlayerNameLength = playerName->boundingRect().width();
333  }
334  if(i == playerList.count() - 1)
335  {
336  KGameRenderedItem score(renderer, "score_star_enabled");
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();
339  }
340  }
341 
342  QSize svgSize;
343  QPoint topLeft(0, 0);
344  topLeft = m_gameScene->views().first()->mapFromScene(topLeft);
345 
346  KGameRenderedItem* score;
347  renderer = m_gameScene->renderer(Granatier::Element::SCORE);
348  for(int i = 0; i < playerList.count(); i++)
349  {
350  playerName = m_mapPlayerNames.value(playerList.at(i));
351  playerName->setPos(nLeft, nTop + i * em.boundingRect().height() * 1.1);
352 
353  for(int j = 0; j < nWinPoints; j++)
354  {
355  score = m_mapScore.value(playerList.at(i)).at(j);
356 
357  QPoint bottomRight(Granatier::CellSize * 0.6, Granatier::CellSize * 0.6);
358  bottomRight = m_gameScene->views().first()->mapFromScene(bottomRight);
359 
360  svgSize.setHeight(bottomRight.y() - topLeft.y());
361  svgSize.setWidth(bottomRight.x() - topLeft.x());
362 
363  score->setRenderSize(svgSize);
364  score->setScale(svgScaleFactor);
365 
366  score->setPos(nLeft + nMaxPlayerNameLength + em.boundingRect().width()/2 + j * (Granatier::CellSize * 0.6 + em.boundingRect().width()/5),
367  playerName->pos().y() + em.boundingRect().height()/2.5 - (Granatier::CellSize * 0.6) / 2);
368 
369  }
370  }
371 
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);
386 }
387 
388 void InfoOverlay::themeChanged()
389 {
390  KGameRenderer* renderer = m_gameScene->renderer(Granatier::Element::SCORE);
391  KGameRenderedItem* tempItem;
392 
393  //update player infosidebar
394  QMap <Player*, QList<KGameRenderedItem*> >::iterator iteratorScore = m_mapScore.begin();
395  while (iteratorScore != m_mapScore.end())
396  {
397  QList <KGameRenderedItem*>::iterator iteratorStar = iteratorScore.value().begin();
398  while(iteratorStar != iteratorScore.value().end())
399  {
400  tempItem = *iteratorStar;
401  *iteratorStar = new KGameRenderedItem(renderer, tempItem->spriteKey());
402  (*iteratorStar)->setZValue(tempItem->zValue());
403  (*iteratorStar)->setPos(tempItem->pos());
404 
405  if(m_gameScene->items().contains(tempItem))
406  {
407  m_gameScene->removeItem(tempItem);
408  m_gameScene->addItem(*iteratorStar);
409  }
410  delete tempItem;
411 
412  iteratorStar++;
413  }
414 
415  iteratorScore++;
416  }
417 
418  updateGraphics(m_svgScaleFactor);
419 }
QGraphicsTextItem::setFont
void setFont(const QFont &font)
Game::getWinner
QString getWinner() const
Definition: game.cpp:321
QSize::setHeight
void setHeight(int height)
Game::getGameOver
bool getGameOver() const
Definition: game.cpp:316
QGraphicsObject::pos
pos
QList::length
int length() const
QGraphicsScene::items
QList< QGraphicsItem * > items() const
QFont
Game::getWinPoints
int getWinPoints() const
Definition: game.cpp:326
QGraphicsTextItem::boundingRect
virtual QRectF boundingRect() const
QList::at
const T & at(int i) const
QMap
QGraphicsScene::sceneRect
sceneRect
QBrush
QPoint
game.h
QGraphicsScene::height
qreal height() const
QMap::clear
void clear()
QPoint::x
int x() const
QPoint::y
int y() const
player.h
QGraphicsRectItem::setRect
void setRect(const QRectF &rectangle)
QGraphicsObject::y
y
Settings::self
static Settings * self()
Definition: settings.cpp:17
QList::count
int count(const T &value) const
Granatier::CellSize
const qreal CellSize
The Cell size.
Definition: granatierglobals.h:31
QList::append
void append(const T &value)
Game::getPlayers
QList< Player * > getPlayers() const
Definition: game.cpp:291
QGraphicsScene::removeItem
void removeItem(QGraphicsItem *item)
QObject
InfoOverlay::resizeDimmOverlay
void resizeDimmOverlay(qreal x, qreal y, qreal width, qreal height)
Resize dimm overlay.
Definition: infooverlay.cpp:303
QGraphicsItem::setPos
void setPos(const QPointF &pos)
QGraphicsScene::views
QList< QGraphicsView * > views() const
QSize::setWidth
void setWidth(int width)
Game
This class manages the game main loop : it regularly checks the key press events, computes the charac...
Definition: game.h:43
QGraphicsTextItem
QString
QList< Player * >
QMap::end
iterator end()
QColor
gamescene.h
QMap::begin
iterator begin()
InfoOverlay::showScore
void showScore()
Shows the score info.
Definition: infooverlay.cpp:175
InfoOverlay::hideItems
void hideItems()
Hides the info items.
Definition: infooverlay.cpp:237
QSize
QRectF::width
qreal width() const
settings.h
InfoOverlay::InfoOverlay
InfoOverlay(Game *p_game, GameScene *p_scene)
Creates a new InfoOverlay instance.
Definition: infooverlay.cpp:31
QGraphicsRectItem
InfoOverlay::showGetReady
void showGetReady()
Shows the get ready info.
Definition: infooverlay.cpp:135
GameScene::renderer
KGameRenderer * renderer(Granatier::Element::Type type, Player *player=NULL)
Returns the renderer for the requestet Element Type.
Definition: gamescene.cpp:638
InfoOverlay::showPause
void showPause()
Shows the pause info.
Definition: infooverlay.cpp:155
GameScene
This class contains all the Game elements to be drawn on the screen by the GameView instance...
Definition: gamescene.h:50
KGameRenderedItem
InfoOverlay::~InfoOverlay
~InfoOverlay()
Deletes the InfoOverlay instance.
Definition: infooverlay.cpp:110
QGraphicsTextItem::setPlainText
void setPlainText(const QString &text)
QRectF::height
qreal height() const
QMap::insert
iterator insert(const Key &key, const T &value)
InfoOverlay::updateGraphics
virtual void updateGraphics(qreal svgScaleFactor)
Updates the graphics after a resize.
Definition: infooverlay.cpp:308
QAbstractGraphicsShapeItem::setBrush
void setBrush(const QBrush &brush)
QGraphicsTextItem::setDefaultTextColor
void setDefaultTextColor(const QColor &col)
QGraphicsScene::addItem
void addItem(QGraphicsItem *item)
infooverlay.h
QGraphicsItem::setZValue
void setZValue(qreal z)
InfoOverlay::themeChanged
void themeChanged()
Handles theme changes.
Definition: infooverlay.cpp:388
QGraphicsScene::width
qreal width() const
QMap::value
const T value(const Key &key) const
Granatier::Element::SCORE
Definition: granatierglobals.h:96
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:10 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

granatier

Skip menu "granatier"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal