GameScene

This commit is contained in:
Max-Wilhelm Bruker 2009-09-08 17:56:39 +02:00
parent 0d774b5d48
commit e75c8370eb
2 changed files with 92 additions and 0 deletions

View file

@ -0,0 +1,64 @@
#include "gamescene.h"
#include "player.h"
#include "zoneviewlayout.h"
GameScene::GameScene(ZoneViewLayout *_zvLayout, QObject *parent)
: QGraphicsScene(parent), zvLayout(_zvLayout)
{
connect(zvLayout, SIGNAL(sizeChanged()), this, SLOT(updateSceneSize()));
addItem(zvLayout);
}
void GameScene::updateSceneSize()
{
int sceneWidth = 0;
int sceneHeight = 0;
for (int i = 0; i < players.size(); ++i) {
const QRectF br = players[i]->boundingRect();
if (i)
sceneHeight += playerAreaSpacing;
sceneHeight += br.height();
if (br.width() > sceneWidth)
sceneWidth = br.width();
}
sceneWidth += zvLayout->size().width();
qDebug(QString("updateSceneSize: w=%1 h=%2").arg(sceneWidth).arg(sceneHeight).toLatin1());
setSceneRect(sceneRect().x(), sceneRect().y(), sceneWidth, sceneHeight);
}
void GameScene::addPlayer(Player *player)
{
players << player;
updateSceneSize();
addItem(player);
rearrangePlayers();
}
void GameScene::removePlayer(Player *player)
{
players.removeAt(players.indexOf(player));
removeItem(player);
updateSceneSize();
rearrangePlayers();
}
void GameScene::rearrangePlayers()
{
QPointF base;
qreal maxWidth = 0;
Player *localPlayer = 0;
for (int i = 0; i < players.size(); ++i) {
QRectF br = players[i]->boundingRect();
if (br.width() > maxWidth)
maxWidth = br.width();
if (!players[i]->getLocal()) {
players[i]->setPos(base);
// Change this for better multiplayer support.
base += QPointF(0, br.height() + playerAreaSpacing);
} else
localPlayer = players[i];
}
if (localPlayer)
localPlayer->setPos(base);
zvLayout->setPos(QPointF(maxWidth, 0));
}

View file

@ -0,0 +1,28 @@
#ifndef GAMESCENE_H
#define GAMESCENE_H
#include <QGraphicsScene>
#include <QList>
class Player;
class ZoneViewLayout;
class GameScene : public QGraphicsScene {
Q_OBJECT
private:
static const int playerAreaSpacing = 5;
QList<Player *> players;
ZoneViewLayout *zvLayout;
void rearrangePlayers();
public:
GameScene(ZoneViewLayout *_zvLayout, QObject *parent = 0);
public slots:
void addPlayer(Player *player);
void removePlayer(Player *player);
private slots:
void updateSceneSize();
};
#endif