39 #include <KgThemeProvider>
41 #include <KStandardDirs>
43 #include <QGraphicsView>
46 #include <KGameRenderer>
47 #include <KGameRenderedItem>
53 connect(p_game, SIGNAL(gameStarted()),
this, SLOT(start()));
54 connect(p_game, SIGNAL(pauseChanged(
bool,
bool)),
this, SLOT(setPaused(
bool,
bool)));
55 connect(p_game, SIGNAL(bombCreated(
Bomb*)),
this, SLOT(createBombItem(
Bomb*)));
60 m_backgroundResizeTimer =
new QTimer();
61 m_backgroundResizeTimer->setSingleShot(
true);
62 connect(m_backgroundResizeTimer, SIGNAL(timeout()),
this, SLOT(resizeBackground()));
65 QList <Player*> players = p_game->
getPlayers();
68 for(
int i = 0; i < players.size(); i++)
70 const QString desktopPath = players[i]->getDesktopFilePath();
71 KgTheme* theme =
new KgTheme(desktopPath.toUtf8());
72 theme->readFromDesktopFile(KStandardDirs::locate(
"appdata", desktopPath));
73 KGameRenderer* playerRenderer =
new KGameRenderer(theme);
74 m_mapRendererPlayerItems.insert(players[i], playerRenderer);
75 playerItem =
new PlayerItem(players[i], playerRenderer);
77 playerItem->
update(players[i]->getX(), players[i]->getY());
81 m_playerItems.append(playerItem);
83 connect(
this, SIGNAL(
resizeGraphics(qreal)), playerItem, SLOT(updateGraphics(qreal)));
84 connect (playerItem, SIGNAL(bonusItemTaken(
BonusItem*)),
this, SLOT(removeBonusItem(
BonusItem*)));
88 m_remainingTimeLabel =
new QGraphicsTextItem(i18n(
"0:00"));
89 m_remainingTimeLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
90 m_remainingTimeLabel->setDefaultTextColor(QColor(
"#FFFF00"));
91 m_remainingTimeLabel->setZValue(1000);
93 m_arenaNameLabel =
new QGraphicsTextItem(i18n(
"Arena Name"));
94 m_arenaNameLabel->setFont(QFont(
"Helvetica",
Granatier::CellSize * 0.35, QFont::Bold,
false));
95 m_arenaNameLabel->setDefaultTextColor(QColor(
"#FFFF00"));
96 m_arenaNameLabel->setZValue(1000);
99 m_rendererSelectedTheme =
new KGameRenderer(m_themeProvider);
100 m_rendererDefaultTheme = 0;
103 connect(m_themeProvider, SIGNAL(currentThemeChanged(
const KgTheme*)),
this, SLOT(themeChanged()));
107 connect(
this, SIGNAL(
resizeGraphics(qreal)), m_infoOverlay, SLOT(updateGraphics(qreal)));
114 bool selectedThemeIsDefault =
true;
116 if(m_themeProvider->currentTheme() != m_themeProvider->defaultTheme())
119 selectedThemeIsDefault =
false;
120 if(m_rendererDefaultTheme == 0)
122 KgTheme* theme =
new KgTheme(m_themeProvider->defaultTheme()->identifier());
123 theme->setGraphicsPath(m_themeProvider->defaultTheme()->graphicsPath());
124 m_rendererDefaultTheme =
new KGameRenderer(theme);
128 if(selectedThemeIsDefault || m_rendererSelectedTheme->spriteExists(
"background"))
130 m_rendererBackground = m_rendererSelectedTheme;
134 m_rendererBackground = m_rendererDefaultTheme;
138 if(selectedThemeIsDefault || (m_rendererSelectedTheme->spriteExists(
"arena_ground") &&
139 m_rendererSelectedTheme->spriteExists(
"arena_wall") &&
140 m_rendererSelectedTheme->spriteExists(
"arena_block") &&
141 m_rendererSelectedTheme->spriteExists(
"arena_block_highlight") &&
142 m_rendererSelectedTheme->spriteExists(
"arena_ice") &&
143 m_rendererSelectedTheme->spriteExists(
"arena_bomb_mortar") &&
144 m_rendererSelectedTheme->spriteExists(
"arena_arrow_up") &&
145 m_rendererSelectedTheme->spriteExists(
"arena_arrow_right") &&
146 m_rendererSelectedTheme->spriteExists(
"arena_arrow_down") &&
147 m_rendererSelectedTheme->spriteExists(
"arena_arrow_left")))
149 m_rendererArenaItems = m_rendererSelectedTheme;
153 m_rendererArenaItems = m_rendererDefaultTheme;
157 if(selectedThemeIsDefault || (m_rendererSelectedTheme->spriteExists(
"bonus_speed") &&
158 m_rendererSelectedTheme->spriteExists(
"bonus_bomb") &&
159 m_rendererSelectedTheme->spriteExists(
"bonus_power") &&
160 m_rendererSelectedTheme->spriteExists(
"bonus_shield") &&
161 m_rendererSelectedTheme->spriteExists(
"bonus_throw") &&
162 m_rendererSelectedTheme->spriteExists(
"bonus_kick") &&
163 m_rendererSelectedTheme->spriteExists(
"bonus_bad_slow") &&
164 m_rendererSelectedTheme->spriteExists(
"bonus_bad_hyperactive") &&
165 m_rendererSelectedTheme->spriteExists(
"bonus_bad_mirror") &&
166 m_rendererSelectedTheme->spriteExists(
"bonus_bad_scatty") &&
167 m_rendererSelectedTheme->spriteExists(
"bonus_bad_restrain") &&
168 m_rendererSelectedTheme->spriteExists(
"bonus_neutral_pandora") &&
169 m_rendererSelectedTheme->spriteExists(
"bonus_neutral_resurrect")))
171 m_rendererBonusItems = m_rendererSelectedTheme;
175 m_rendererBonusItems = m_rendererDefaultTheme;
179 if(selectedThemeIsDefault || (m_rendererSelectedTheme->spriteExists(
"bomb") &&
180 m_rendererSelectedTheme->spriteExists(
"bomb_blast_core_0") &&
181 m_rendererSelectedTheme->spriteExists(
"bomb_blast_north_0") &&
182 m_rendererSelectedTheme->spriteExists(
"bomb_blast_east_0") &&
183 m_rendererSelectedTheme->spriteExists(
"bomb_blast_south_0") &&
184 m_rendererSelectedTheme->spriteExists(
"bomb_blast_west_0")))
186 m_rendererBombItems = m_rendererSelectedTheme;
190 m_rendererBombItems = m_rendererDefaultTheme;
194 if(selectedThemeIsDefault || (m_rendererSelectedTheme->spriteExists(
"score_star_enabled") &&
195 m_rendererSelectedTheme->spriteExists(
"score_star_disabled")))
197 m_rendererScoreItems = m_rendererSelectedTheme;
201 m_rendererScoreItems = m_rendererDefaultTheme;
210 for (
int i = 0; i < m_playerItems.size(); i++)
212 if(!items().contains(m_playerItems[i]))
214 addItem(m_playerItems[i]);
216 m_playerItems[i]->resurrect();
219 if (!items().contains(m_remainingTimeLabel))
221 addItem(m_remainingTimeLabel);
223 m_remainingTimeLabel->setDefaultTextColor(QColor(
"#FFFF00"));
225 m_remainingTimeLabel->setPlainText(QString(
"%1:%2").arg(nTime/60).arg(nTime%60, 2, 10, QChar(
'0')));
228 if (!items().contains(m_arenaNameLabel))
230 addItem(m_arenaNameLabel);
233 m_arenaNameLabel->setPos(0, - m_arenaNameLabel->boundingRect().height());
236 setSceneRect(0, -m_remainingTimeLabel->boundingRect().height(),
242 connect(
this, SIGNAL(
resizeGraphics(qreal)), m_infoSidebar, SLOT(updateGraphics(qreal)));
245 QRectF oldSceneRect = sceneRect();
246 QRectF sidebarRect = m_infoSidebar->rect();
248 newSceneRect.setLeft(oldSceneRect.left() < sidebarRect.left() ? oldSceneRect.left() : sidebarRect.left());
249 newSceneRect.setRight(oldSceneRect.right() > sidebarRect.right() ? oldSceneRect.right() : sidebarRect.right());
250 newSceneRect.setTop(oldSceneRect.top() < sidebarRect.top() ? oldSceneRect.top() : sidebarRect.top());
251 newSceneRect.setBottom(oldSceneRect.bottom() > sidebarRect.bottom() ? oldSceneRect.bottom() : sidebarRect.bottom());
252 newSceneRect.adjust(-5, -5, 5, 5);
253 setSceneRect(newSceneRect);
254 m_infoSidebar->reset();
259 m_minSize = sceneRect();
262 m_minSize.setX(m_minSize.x() + (m_minSize.width() - minWidth) / 10);
263 m_minSize.setY(m_minSize.y() + (m_minSize.height() - minHeight) / 4);
264 m_minSize.setWidth(minWidth);
265 m_minSize.setHeight(minHeight);
266 setSceneRect(m_minSize);
283 connect(
this, SIGNAL(
resizeGraphics(qreal)), arenaItem, SLOT(updateGraphics(qreal)));
290 arenaItem->setSpriteKey(
"arena_wall");
291 arenaItem->setZValue(-2);
298 arenaItem->setSpriteKey(
"arena_ice");
299 arenaItem->setZValue(0);
302 arenaItem->setSpriteKey(
"arena_bomb_mortar");
303 arenaItem->setZValue(0);
306 arenaItem->setSpriteKey(
"arena_arrow_up");
307 arenaItem->setZValue(0);
310 arenaItem->setSpriteKey(
"arena_arrow_right");
311 arenaItem->setZValue(0);
314 arenaItem->setSpriteKey(
"arena_arrow_down");
315 arenaItem->setZValue(0);
318 arenaItem->setSpriteKey(
"arena_arrow_left");
319 arenaItem->setZValue(0);
324 arenaItem->setSpriteKey(
"arena_ground");
325 arenaItem->setZValue(-1);
327 m_arenaItem[i][j] = arenaItem;
334 QList<Element*> blockElements;
342 if (!blockElements.isEmpty())
345 foreach(
Element* element, blockElements)
347 Block* block = dynamic_cast <
Block*> (element);
349 connect(
this, SIGNAL(
resizeGraphics(qreal)), blockItem, SLOT(updateGraphics(qreal)));
351 blockItem->update(block->
getX(), block->
getY());
352 blockItem->setZValue(200);
355 blockItem->setZValue(99);
357 connect(
this, SIGNAL(
resizeGraphics(qreal)), blockItem, SLOT(updateGraphics(qreal)));
358 connect(blockItem, SIGNAL(blockItemDestroyed(
BlockItem*)),
this, SLOT(removeBlockItem(
BlockItem*)));
359 m_blockItems[i][j] = blockItem;
368 bonusItem->setSpriteKey(
"bonus_speed");
371 bonusItem->setSpriteKey(
"bonus_bomb");
374 bonusItem->setSpriteKey(
"bonus_power");
377 bonusItem->setSpriteKey(
"bonus_shield");
380 bonusItem->setSpriteKey(
"bonus_throw");
383 bonusItem->setSpriteKey(
"bonus_kick");
386 bonusItem->setSpriteKey(
"bonus_bad_hyperactive");
389 bonusItem->setSpriteKey(
"bonus_bad_slow");
392 bonusItem->setSpriteKey(
"bonus_bad_mirror");
395 bonusItem->setSpriteKey(
"bonus_bad_scatty");
398 bonusItem->setSpriteKey(
"bonus_bad_restrain");
401 bonusItem->setSpriteKey(
"bonus_neutral_resurrect");
404 bonusItem->setSpriteKey(
"bonus_neutral_pandora");
407 if((qrand()/1.0)/RAND_MAX * 10 > 9 && bonusItem->spriteKey() !=
"bonus_neutral_resurrect")
409 bonusItem->setSpriteKey(
"bonus_neutral_pandora");
413 bonusItem->setZValue(100);
414 m_bonusItems[i][j] = bonusItem;
416 connect(
this, SIGNAL(
resizeGraphics(qreal)), bonusItem, SLOT(updateGraphics(qreal)));
417 connect(bonusItem, SIGNAL(bonusItemDestroyed(
BonusItem*)),
this, SLOT(removeBonusItem(
BonusItem*)));
427 m_bonusItems[i][j] = NULL;
433 m_blockItems[i][j] = NULL;
434 m_bonusItems[i][j] = NULL;
440 foreach(
Bomb* bomb, m_tempBombList)
442 createBombItem(bomb);
444 if(!m_tempBombList.isEmpty())
446 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
447 while (i != m_bombItems.end())
449 i.key()->pauseAnim();
459 if(m_arenaItem[i][j] != NULL)
461 addItem(m_arenaItem[i][j]);
471 if (m_blockItems[i][j] != NULL)
473 if (!items().contains(m_blockItems[i][j]))
475 addItem(m_blockItems[i][j]);
483 m_arenaBackground->setZValue(-5);
484 m_arenaBackground->setPos(0, 0);
485 m_arenaBackground->setCacheMode(QGraphicsItem::NoCache);
486 m_arenaBackground->setRenderSize(QSize(100, 100));
487 addItem(m_arenaBackground);
494 delete m_backgroundResizeTimer;
498 delete m_infoOverlay;
500 for (
int i = 0; i < m_playerItems.size(); i++)
502 if(items().contains(m_playerItems[i]))
504 removeItem(m_playerItems[i]);
506 m_playerItems[i]->stopAnim();
507 delete m_playerItems[i];
510 QMap <Player*, KGameRenderer*>::iterator iteratorRendererPlayer = m_mapRendererPlayerItems.begin();
511 while (iteratorRendererPlayer != m_mapRendererPlayerItems.end())
513 delete iteratorRendererPlayer.value();
514 iteratorRendererPlayer++;
517 delete m_rendererSelectedTheme;
518 delete m_rendererDefaultTheme;
525 delete m_infoSidebar;
527 if(items().contains(m_remainingTimeLabel))
529 removeItem(m_remainingTimeLabel);
532 if(items().contains(m_arenaNameLabel))
534 removeItem(m_arenaNameLabel);
545 if (m_arenaItem[i][j] != NULL)
547 if (items().contains(m_arenaItem[i][j]))
549 removeItem(m_arenaItem[i][j]);
551 delete m_arenaItem[i][j];
554 delete[] m_arenaItem[i];
556 delete[] m_arenaItem;
560 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
561 while (i != m_bombItems.end())
563 while(!i.value().isEmpty())
565 bombExplosionItem = i.value().takeFirst();
566 if(items().contains(bombExplosionItem))
568 removeItem(bombExplosionItem);
570 delete bombExplosionItem;
572 if(items().contains(i.key()))
576 if(dynamic_cast <Bomb*> (i.key()->getModel())->isDetonated())
578 dynamic_cast <
Bomb*> (i.key()->getModel())->slot_detonationCompleted();
581 i = m_bombItems.erase(i);
589 if (m_blockItems[i][j] != NULL)
591 if (items().contains(m_blockItems[i][j]))
593 removeItem(m_blockItems[i][j]);
595 delete m_blockItems[i][j];
597 if (m_bonusItems[i][j] != NULL)
599 if (items().contains(m_bonusItems[i][j]))
601 removeItem(m_bonusItems[i][j]);
603 delete m_bonusItems[i][j];
606 delete[] m_blockItems[i];
607 delete[] m_bonusItems[i];
609 delete[] m_blockItems;
610 delete[] m_bonusItems;
612 removeItem(m_arenaBackground);
613 delete m_arenaBackground;
616 void GameScene::themeChanged()
618 m_tempBombList.clear();
619 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
620 while (i != m_bombItems.end())
622 if(!(dynamic_cast <Bomb*> (i.key()->getModel())->isDetonated()))
624 m_tempBombList.append(dynamic_cast <Bomb*> (i.key()->getModel()));
635 m_tempBombList.clear();
643 return m_rendererArenaItems;
645 return m_rendererBonusItems;
647 return m_rendererBombItems;
649 return m_mapRendererPlayerItems.value(player);
651 return m_rendererScoreItems;
664 if(views().isEmpty())
670 int horizontalPixelsPerCell = views().first()->size().width() / (m_minSize.width()/
Granatier::CellSize);
671 int verticalPixelsPerCell = views().first()->size().height() / (m_minSize.height()/
Granatier::CellSize);
672 if(horizontalPixelsPerCell < verticalPixelsPerCell)
680 QTransform transform;
681 transform.scale(1/m_SvgScaleFactor, 1/m_SvgScaleFactor);
682 views().first()->setTransform(transform);
683 views().first()->centerOn(sceneRect().center());
684 views().first()->updateSceneRect(m_minSize);;
690 QRect viewRect = views().first()->rect();
691 QRectF viewRectToScene = QRectF(views().first()->mapToScene(viewRect.topLeft()), views().first()->mapToScene(viewRect.bottomRight()));
692 m_infoOverlay->
resizeDimmOverlay(viewRectToScene.x(), viewRectToScene.y(), viewRectToScene.width(), viewRectToScene.height());
695 m_arenaBackground->setPos(views().first()->mapToScene(viewRect.topLeft()));
696 m_arenaBackground->setScale(m_SvgScaleFactor);
698 m_arenaBackground->setPixmap(m_arenaBackground->pixmap().scaled(viewRect.size()));
700 m_backgroundResizeTimer->stop();
701 m_backgroundResizeTimer->start(delayForBackground);
704 void GameScene::resizeBackground()
706 if(views().isEmpty())
710 QRect viewRect = views().first()->rect();
711 m_arenaBackground->setRenderSize(viewRect.size());
719 void GameScene::start()
725 void GameScene::setPaused(
const bool p_pause,
const bool p_fromUser)
737 for (
int i = 0; i < m_playerItems.size(); i++)
739 m_playerItems[i]->pauseAnim();
742 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
743 while (i != m_bombItems.end())
745 i.key()->pauseAnim();
754 for (
int i = 0; i < m_playerItems.size(); i++)
756 m_playerItems[i]->resumeAnim();
759 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
760 while (i != m_bombItems.end())
762 i.key()->resumeAnim();
768 void GameScene::removeBlockItem(
BlockItem* blockItem)
775 if (m_blockItems[i][j] != NULL && m_blockItems[i][j] == blockItem)
777 if (items().contains(m_blockItems[i][j]))
779 removeItem(m_blockItems[i][j]);
780 m_blockItems[i][j] = NULL;
789 void GameScene::removeBonusItem(
BonusItem* bonusItem)
796 if (m_bonusItems[i][j] != NULL && m_bonusItems[i][j] == bonusItem)
798 if (items().contains(m_bonusItems[i][j]))
800 removeItem(m_bonusItems[i][j]);
801 m_bonusItems[i][j] = NULL;
817 m_remainingTimeLabel->setPlainText(QString(
"%1:%2").arg(nTime/60).arg(nTime%60, 2, 10, QChar(
'0')));
821 m_remainingTimeLabel->setPlainText(i18n(
"Sudden Death"));
822 m_remainingTimeLabel->setDefaultTextColor(QColor(
"#FF0000"));
828 void GameScene::createBombItem(
Bomb* bomb)
835 m_bombItems[bombItem].append(NULL);
839 connect(
this, SIGNAL(
resizeGraphics(qreal)), bombItem, SLOT(updateGraphics(qreal)));
840 connect(bomb, SIGNAL(mortar(
int,
int,
int,
int)), bombItem, SLOT(updateMortar(
int,
int,
int,
int)));
841 connect(bomb, SIGNAL(bombDetonated(
Bomb*)),
this, SLOT(bombDetonated(
Bomb*)));
842 connect(bombItem, SIGNAL(bombItemFinished(
BombItem*)),
this, SLOT(removeBombItem(
BombItem*)));
843 connect(bombItem, SIGNAL(animationFrameChanged(
BombItem*,
int)),
this, SLOT(updateBombExplosionItemAnimation(
BombItem*,
int)));
846 void GameScene::removeBombItem(
BombItem* bombItem)
851 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
852 while (i != m_bombItems.end())
854 if(i.key() == bombItem)
856 while(!i.value().isEmpty())
858 bombExplosionItem = i.value().takeFirst();
859 if(items().contains(bombExplosionItem))
861 removeItem(bombExplosionItem);
863 delete bombExplosionItem;
865 if(items().contains(i.key()))
870 i = m_bombItems.erase(i);
880 void GameScene::bombDetonated(
Bomb* bomb)
884 QList<Element*> blockElements;
885 QList<Element*> bombElements;
893 bool abDirectionsDone[] = {
false,
false,
false,
false};
894 int nDetonationCountdown = 75;
895 int anDirectionDetonationCountdown[] = {nDetonationCountdown, nDetonationCountdown, nDetonationCountdown, nDetonationCountdown};
898 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
899 while (i != m_bombItems.end())
901 if(i.key()->getModel() == bomb)
917 if(nColumn >= 0 && nColumn < nNumberOfColums && nRow >= 0 && nRow < nNumberOfRows)
920 int tempBombDetonationCountdown = nDetonationCountdown;
921 foreach(
Element* element, bombElements)
923 if(dynamic_cast <Bomb*> (element) != bomb && !(dynamic_cast <Bomb*> (element)->isDetonated()))
925 dynamic_cast <
Bomb*> (element)->initDetonation(bomb->
explosionID(), tempBombDetonationCountdown);
926 tempBombDetonationCountdown += 10;
931 if(!blockElements.isEmpty())
933 foreach(
Element* element, blockElements)
935 dynamic_cast <
Block*> (element)->startDestruction();
936 if (m_blockItems[nRow][nColumn] != NULL)
939 if (m_bonusItems[nRow][nColumn] != NULL)
942 m_bonusItems[nRow][nColumn]->show();
947 else if(m_bonusItems[nRow][nColumn] != NULL)
953 for(
int i = 0; i < nBombPower; i++)
980 if(!abDirectionsDone[direction] && nColumn >= 0 && nColumn < nNumberOfColums && nRow >= 0 && nRow < nNumberOfRows)
986 int tempBombDetonationCountdown = anDirectionDetonationCountdown[direction];
987 bool increaseDetonationTimeout =
false;
988 foreach(
Element* element, bombElements)
990 if(dynamic_cast <Bomb*> (element) != bomb && !(dynamic_cast <
Bomb*> (element)->isDetonated()))
992 dynamic_cast <
Bomb*> (element)->initDetonation(bomb->
explosionID(), tempBombDetonationCountdown);
993 tempBombDetonationCountdown += 10;
994 increaseDetonationTimeout =
true;
997 if(increaseDetonationTimeout)
999 anDirectionDetonationCountdown[direction] += nDetonationCountdown;
1002 if(!blockElements.isEmpty())
1004 abDirectionsDone[direction] =
true;
1005 foreach(
Element* element, blockElements)
1007 dynamic_cast <
Block*> (element)->startDestruction();
1008 if (m_blockItems[nRow][nColumn] != NULL)
1011 if (m_bonusItems[nRow][nColumn] != NULL)
1014 m_bonusItems[nRow][nColumn]->show();
1019 else if(m_bonusItems[nRow][nColumn] != NULL)
1024 bombExplosionItem =
new BombExplosionItem (bomb, direction, nBombPower - i, m_rendererBombItems, m_SvgScaleFactor);
1026 connect(
this, SIGNAL(
resizeGraphics(qreal)), bombExplosionItem, SLOT(updateGraphics(qreal)));
1027 addItem(bombExplosionItem);
1028 m_bombItems[bombItem].append(bombExplosionItem);
1032 abDirectionsDone[direction] =
true;
1037 abDirectionsDone[direction] =
true;
1060 void GameScene::updateBombExplosionItemAnimation(
BombItem* bombItem,
int nFrame)
1064 QHash<BombItem*, QList<BombExplosionItem*> >::iterator i = m_bombItems.begin();
1065 while (i != m_bombItems.end())
1067 if(i.key() == bombItem)
1069 for(
int nIndex = 0; nIndex < i.value().count(); nIndex++)
1071 bombExplosionItem = i.value().at(nIndex);
1072 if(bombExplosionItem)
qreal getX() const
Gets the Element x-coordinate.
virtual void update(qreal p_x, qreal p_y)
Updates the ElementItem coordinates.
void resizeGraphics(qreal svgScaleFactor)
Signals that the graphics need an update.
This class represents a Bonus for the Player.
void showScore()
Shows the labels with the points.
int getNbColumns() const
Gets the number of columns of the Arena.
This class is the graphical representation of a Bomb.
Granatier::Bonus::Type getBonusType() const
QList< Element * > getElements() const
Gets all the Elements that are on the Cell.
QString getImageId() const
Gets the path to the Element image.
~GameScene()
Deletes the Game instance.
This class the game info if paused or a round is over.
void removeBonus(Bonus *bonus)
Element * getModel() const
Gets the Element model.
This class is the graphical representation of a Bonus.
GameScene(Game *p_game, KgThemeProvider *p_themeProvider)
Creates a new GameScene instance.
const qreal CellSize
The Cell size.
virtual void update(qreal p_x, qreal p_y)
Updates the BombItem coordinates.
QList< Player * > getPlayers() const
void initItemsWithGraphicsFromTheme()
Initializes all items with graphics from the theme.
This class is the graphical representation of a Bomb explosion.
This class is the graphical view of the Arena.
void resizeDimmOverlay(qreal x, qreal y, qreal width, qreal height)
Resize dimm overlay.
void setUndestroyable(int nExplosionID)
Sets the undestroyable explosion IDs.
This class manages the game main loop : it regularly checks the key press events, computes the charac...
This class describes the common characteristics and behaviour of the bomb item.
int getRemainingTime() const
void removeBomb(Bomb *bomb)
Removes exploded bombs from the bomb list.
void initDestruction(int nExplosionID)
Inits the destruction.
void showScore()
Shows the score info.
void hideItems()
Hides the info items.
This class is the graphical representation of a Block.
This class describes the common characteristics and behaviour of any game Element (character or item)...
qreal getY() const
Gets the Element y-coordinate.
int bombPower()
Power of the bomb.
void blockDestroyed(const int row, const int col, Block *block)
remove Block from list and decide to give bonus
QString getName() const
Returns the Arean name.
void stopAnim()
Stops the PlayerItem animation.
void resizeSprites(int delayForBackground=0)
Updates the sprites after a resize.
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.
virtual void setPosition(qreal p_x, qreal p_y)
Updates the BombExplosionItem coordinates.
void update(qreal p_x, qreal p_y)
Updates the PlayerItem coordinates.
This class manage the display of the Player.
int getColFromX(const qreal p_x) const
Gets the column index corresponding to the given x-coordinate.
void init()
Initializes class.
void updateAnimationn(int nFrame)
updates the animation
void cleanUp()
Cleans class.
virtual void updateGraphics(qreal svgScaleFactor)
Updates the graphics after a resize.
void cleanUpItemsWithGraphicsFromTheme()
Initializes all items with graphics from the theme.
Bonus * getBonus()
Returns the Bonus which is contained by the Block.
void setupThemeRenderer()
setup the KGameRenderer for the selected theme and if necessary the default theme ...
int getNbRows() const
Gets the number of rows of the Arena.
This class represents the main character of the game.
This class represents a block with the possibility of a bonus inside.
void themeChanged()
Handles theme changes.
Granatier::Cell::Type getType() const
Gets the Cell type.
Cell getCell(const int p_row, const int p_column) const
Gets the Cell at the given coordinates.
int getRowFromY(const qreal p_y) const
Gets the row index corresponding to the given y-coordinate.