24 #include <QGraphicsView>
25 #include <QGraphicsRectItem>
28 #include <KStandardDirs>
29 #include <KGameRenderer>
30 #include <KGameRenderedItem>
35 m_gameScene = p_scene;
37 m_badBonusSpriteKey =
"bonus_bad_restrain";
39 QList <Player*> playerList = m_game->
getPlayers();
40 int nMaxPlayerNameLength = 0;
47 for(
int i = 0; i < playerList.count(); i++)
49 QGraphicsTextItem playerName (playerList[i]->getPlayerName());
51 if(nMaxPlayerNameLength < playerName.boundingRect().width())
53 nMaxPlayerNameLength = playerName.boundingRect().width();
55 if(i == playerList.count() - 1)
60 nWidth = nAllItemsWidth;
66 nLeft = -(nWidth + 20);
68 nTop = m_gameScene->sceneRect().y() + m_gameScene->height()/2 - playerList.count()/2 * (nHeight + 4);
74 KGameRenderer* renderer;
75 for(
int i = 0; i < playerList.count(); i++)
78 dimmRectPen.setWidth(0);
79 dimmRectPen.setColor(QColor(0,0,0,200));
80 QBrush dimmRectBrush(QColor(0,0,0,200));
99 playerInfo->
icon->setZValue(1001);
100 playerInfo->
icon->setPos(nLeft, nTop + i * (nHeight + 4));
101 m_gameScene->addItem(playerInfo->
icon);
105 playerInfo->
name =
new QGraphicsTextItem(playerList[i]->getPlayerName());
107 playerInfo->
name->setDefaultTextColor(QColor(
"#FFFF00"));
108 playerInfo->
name->setZValue(1001);
110 m_gameScene->addItem(playerInfo->
name);
145 m_gameScene->addItem(playerInfo->
bonusKick);
156 playerInfo->
badBonus->setZValue(1001);
158 m_gameScene->addItem(playerInfo->
badBonus);
168 m_mapPlayerInfo.insert(playerList[i], playerInfo);
174 m_background =
new QGraphicsRectItem();
175 m_background->setBrush(QBrush(QColor(0,0,0,175)));
176 m_background->setZValue(1000);
177 m_background->setRect(nLeft - 10 , nTop - 10, nWidth + 16, playerList.count() * (nHeight + 4) + 16);
178 m_gameScene->addItem(m_background);
184 QMap <Player*, PlayerInfo*>::iterator iteratorPlayerInfo = m_mapPlayerInfo.begin();
185 while (iteratorPlayerInfo != m_mapPlayerInfo.end())
187 if(iteratorPlayerInfo.value())
190 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->icon))
192 m_gameScene->removeItem(iteratorPlayerInfo.value()->icon);
194 delete iteratorPlayerInfo.value()->icon;
196 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->name))
198 m_gameScene->removeItem(iteratorPlayerInfo.value()->name);
200 delete iteratorPlayerInfo.value()->name;
202 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusShield))
204 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusShield);
206 delete iteratorPlayerInfo.value()->bonusShield;
208 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusShieldDimm))
210 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusShieldDimm);
212 delete iteratorPlayerInfo.value()->bonusShieldDimm;
214 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusThrow))
216 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusThrow);
218 delete iteratorPlayerInfo.value()->bonusThrow;
220 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusThrowDimm))
222 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusThrowDimm);
224 delete iteratorPlayerInfo.value()->bonusThrowDimm;
226 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusKick))
228 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusKick);
230 delete iteratorPlayerInfo.value()->bonusKick;
232 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->bonusKickDimm))
234 m_gameScene->removeItem(iteratorPlayerInfo.value()->bonusKickDimm);
236 delete iteratorPlayerInfo.value()->bonusKickDimm;
238 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->badBonus))
240 m_gameScene->removeItem(iteratorPlayerInfo.value()->badBonus);
242 delete iteratorPlayerInfo.value()->badBonus;
244 if(m_gameScene->items().contains(iteratorPlayerInfo.value()->badBonusDimm))
246 m_gameScene->removeItem(iteratorPlayerInfo.value()->badBonusDimm);
248 delete iteratorPlayerInfo.value()->badBonusDimm;
250 delete iteratorPlayerInfo.value();
252 iteratorPlayerInfo = m_mapPlayerInfo.erase(iteratorPlayerInfo);
256 if(m_gameScene->items().contains(m_background))
258 m_gameScene->removeItem(m_background);
268 QList <Player*> playerList = m_game->
getPlayers();
269 for(
int i = 0; i < playerList.count(); i++)
271 m_mapPlayerInfo.value(playerList[i])->bonusShieldDimm->setVisible(
true);
272 m_mapPlayerInfo.value(playerList[i])->bonusThrowDimm->setVisible(
true);
273 m_mapPlayerInfo.value(playerList[i])->bonusKickDimm->setVisible(
true);
274 m_mapPlayerInfo.value(playerList[i])->badBonusDimm->setVisible(
true);
280 return m_background->rect();
289 QMap <Player*, PlayerInfo*>::iterator iteratorPlayerInfo = m_mapPlayerInfo.begin();
290 while (iteratorPlayerInfo != m_mapPlayerInfo.end())
292 tempItem = iteratorPlayerInfo.value()->bonusShield;
293 if(m_gameScene->items().contains(tempItem))
295 m_gameScene->removeItem(tempItem);
298 iteratorPlayerInfo.value()->bonusShield =
new KGameRenderedItem(renderer,
"bonus_shield");
299 iteratorPlayerInfo.value()->bonusShield->setZValue(1001);
300 iteratorPlayerInfo.value()->bonusShield->setPos(tempItem->pos());
301 m_gameScene->addItem(iteratorPlayerInfo.value()->bonusShield);
304 tempItem = iteratorPlayerInfo.value()->bonusThrow;
305 if(m_gameScene->items().contains(tempItem))
307 m_gameScene->removeItem(tempItem);
310 iteratorPlayerInfo.value()->bonusThrow =
new KGameRenderedItem(renderer,
"bonus_throw");
311 iteratorPlayerInfo.value()->bonusThrow->setZValue(1001);
312 iteratorPlayerInfo.value()->bonusThrow->setPos(tempItem->pos());
313 m_gameScene->addItem(iteratorPlayerInfo.value()->bonusThrow);
316 tempItem = iteratorPlayerInfo.value()->bonusKick;
317 if(m_gameScene->items().contains(tempItem))
319 m_gameScene->removeItem(tempItem);
322 iteratorPlayerInfo.value()->bonusKick =
new KGameRenderedItem(renderer,
"bonus_kick");
323 iteratorPlayerInfo.value()->bonusKick->setZValue(1001);
324 iteratorPlayerInfo.value()->bonusKick->setPos(tempItem->pos());
325 m_gameScene->addItem(iteratorPlayerInfo.value()->bonusKick);
328 tempItem = iteratorPlayerInfo.value()->badBonus;
329 if(m_gameScene->items().contains(tempItem))
331 m_gameScene->removeItem(tempItem);
334 iteratorPlayerInfo.value()->badBonus =
new KGameRenderedItem(renderer, m_badBonusSpriteKey);
335 iteratorPlayerInfo.value()->badBonus->setZValue(1001);
336 iteratorPlayerInfo.value()->badBonus->setPos(tempItem->pos());
337 m_gameScene->addItem(iteratorPlayerInfo.value()->badBonus);
340 iteratorPlayerInfo++;
348 if(m_gameScene->views().isEmpty())
353 switch((
int)bonusType)
356 m_mapPlayerInfo.value(player)->bonusShieldDimm->setVisible(percentageElapsed);
359 m_mapPlayerInfo.value(player)->bonusThrowDimm->setVisible(percentageElapsed);
362 m_mapPlayerInfo.value(player)->bonusKickDimm->setVisible(percentageElapsed);
369 if(percentageElapsed == 0)
375 switch((
int)bonusType)
378 m_badBonusSpriteKey =
"bonus_bad_hyperactive";
381 m_badBonusSpriteKey =
"bonus_bad_slow";
384 m_badBonusSpriteKey =
"bonus_bad_mirror";
387 m_badBonusSpriteKey =
"bonus_bad_scatty";
390 m_badBonusSpriteKey =
"bonus_bad_restrain";
394 if(renderer->spriteExists(m_badBonusSpriteKey))
396 m_mapPlayerInfo.value(player)->badBonus->setSpriteKey(m_badBonusSpriteKey);
400 m_mapPlayerInfo.value(player)->badBonusDimm->setVisible(
false);
404 QPoint topLeft(0, 0);
405 topLeft = m_gameScene->views().first()->mapFromScene(topLeft);
409 bottomRight = m_gameScene->views().first()->mapFromScene(bottomRight);
411 renderSize.setHeight(bottomRight.y() - topLeft.y());
412 renderSize.setWidth(bottomRight.x() - topLeft.x());
414 m_mapPlayerInfo.value(player)->badBonus->setRenderSize(renderSize);
415 m_mapPlayerInfo.value(player)->badBonus->setScale(m_svgScaleFactor);
417 rect = m_mapPlayerInfo.value(player)->badBonusDimm->rect();
418 rect.setWidth(renderSize.width() * m_svgScaleFactor);
419 rect.setHeight(renderSize.height() * m_svgScaleFactor);
420 m_mapPlayerInfo.value(player)->badBonusDimm->setRect(rect);
425 m_mapPlayerInfo.value(player)->badBonusDimm->setVisible(
true);
426 QRectF rect = m_mapPlayerInfo.value(player)->badBonusDimm->rect();
427 rect.setHeight(rect.width() * percentageElapsed/100.0);
428 m_mapPlayerInfo.value(player)->badBonusDimm->setRect(rect);
436 if(m_gameScene->views().isEmpty())
442 QPoint topLeft(0, 0);
443 topLeft = m_gameScene->views().first()->mapFromScene(topLeft);
447 m_svgScaleFactor = svgScaleFactor;
450 QMap <Player*, PlayerInfo*>::iterator iteratorPlayerInfo = m_mapPlayerInfo.begin();
451 while (iteratorPlayerInfo != m_mapPlayerInfo.end())
455 bottomRight = m_gameScene->views().first()->mapFromScene(bottomRight);
456 renderSize.setHeight(bottomRight.y() - topLeft.y());
457 renderSize.setWidth(bottomRight.x() - topLeft.x());
459 iteratorPlayerInfo.value()->icon->setRenderSize(renderSize);
460 iteratorPlayerInfo.value()->icon->setScale(m_svgScaleFactor);
464 bottomRight = m_gameScene->views().first()->mapFromScene(bottomRight);
465 renderSize.setHeight(bottomRight.y() - topLeft.y());
466 renderSize.setWidth(bottomRight.x() - topLeft.x());
468 iteratorPlayerInfo.value()->bonusShield->setRenderSize(renderSize);
469 iteratorPlayerInfo.value()->bonusShield->setScale(m_svgScaleFactor);
470 rect = iteratorPlayerInfo.value()->bonusShieldDimm->rect();
471 rect.setWidth(renderSize.width() * m_svgScaleFactor);
472 rect.setHeight(renderSize.height() * m_svgScaleFactor);
473 iteratorPlayerInfo.value()->bonusShieldDimm->setRect(rect);
475 iteratorPlayerInfo.value()->bonusThrow->setRenderSize(renderSize);
476 iteratorPlayerInfo.value()->bonusThrow->setScale(m_svgScaleFactor);
477 rect = iteratorPlayerInfo.value()->bonusThrowDimm->rect();
478 rect.setWidth(renderSize.width() * m_svgScaleFactor);
479 rect.setHeight(renderSize.height() * m_svgScaleFactor);
480 iteratorPlayerInfo.value()->bonusThrowDimm->setRect(rect);
482 iteratorPlayerInfo.value()->bonusKick->setRenderSize(renderSize);
483 iteratorPlayerInfo.value()->bonusKick->setScale(m_svgScaleFactor);
484 rect = iteratorPlayerInfo.value()->bonusKickDimm->rect();
485 rect.setWidth(renderSize.width() * m_svgScaleFactor);
486 rect.setHeight(renderSize.height() * m_svgScaleFactor);
487 iteratorPlayerInfo.value()->bonusKickDimm->setRect(rect);
489 iteratorPlayerInfo.value()->badBonus->setRenderSize(renderSize);
490 iteratorPlayerInfo.value()->badBonus->setScale(m_svgScaleFactor);
491 rect = iteratorPlayerInfo.value()->badBonusDimm->rect();
492 rect.setWidth(renderSize.width() * m_svgScaleFactor);
493 rect.setHeight(renderSize.height() * m_svgScaleFactor);
494 iteratorPlayerInfo.value()->badBonusDimm->setRect(rect);
496 iteratorPlayerInfo++;
QGraphicsRectItem * badBonusDimm
KGameRenderedItem * bonusKick
QGraphicsRectItem * bonusThrowDimm
KGameRenderedItem * bonusThrow
const qreal CellSize
The Cell size.
KGameRenderedItem * badBonus
QList< Player * > getPlayers() const
This class manages the game main loop : it regularly checks the key press events, computes the charac...
KGameRenderer * renderer(Granatier::Element::Type type, Player *player=NULL)
Returns the renderer for the requestet Element Type.
This class contains all the Game elements to be drawn on the screen by the GameView instance...
QGraphicsRectItem * bonusShieldDimm
KGameRenderedItem * bonusShield
This class represents the main character of the game.
QGraphicsRectItem * bonusKickDimm