mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-04 04:23:55 -07:00
minor visual change, server crash fix, multiplayer leave/concede fixes
This commit is contained in:
parent
6bdc8914a9
commit
d4f600393f
10 changed files with 169 additions and 58 deletions
|
|
@ -69,12 +69,13 @@ void AbstractCardItem::transformPainter(QPainter *painter, const QSizeF &transla
|
|||
painter->setTransform(pixmapTransform);
|
||||
|
||||
QFont f;
|
||||
int fontSize = translatedSize.height() / 8;
|
||||
int fontSize = round(translatedSize.height() / 8);
|
||||
if (fontSize < 9)
|
||||
fontSize = 9;
|
||||
if (fontSize > 12)
|
||||
fontSize = 12;
|
||||
if (fontSize > 10)
|
||||
fontSize = 10;
|
||||
f.setPixelSize(fontSize);
|
||||
|
||||
painter->setFont(f);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -330,7 +330,6 @@ void CardInfo::imageLoaded(const QImage &image)
|
|||
|
||||
QPixmap *CardInfo::getPixmap(QSize size)
|
||||
{
|
||||
qDebug() << "CardInfo::getPixmap(" << size.width() << size.height() << ") for" << getName();
|
||||
QPixmap *cachedPixmap = scaledPixmapCache.value(size.width());
|
||||
if (cachedPixmap)
|
||||
return cachedPixmap;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ void GameScene::addPlayer(Player *player)
|
|||
addItem(player);
|
||||
rearrange();
|
||||
connect(player, SIGNAL(sizeChanged()), this, SLOT(rearrange()));
|
||||
connect(player, SIGNAL(gameConceded()), this, SLOT(rearrange()));
|
||||
}
|
||||
|
||||
void GameScene::removePlayer(Player *player)
|
||||
|
|
@ -41,6 +42,9 @@ void GameScene::rearrange()
|
|||
struct PlayerProcessor {
|
||||
static void processPlayer(Player *p, qreal &w, QPointF &b, bool singlePlayer)
|
||||
{
|
||||
if (p->getConceded())
|
||||
return;
|
||||
|
||||
const QRectF br = p->boundingRect();
|
||||
if (br.width() > w)
|
||||
w = br.width();
|
||||
|
|
@ -52,7 +56,8 @@ void GameScene::rearrange()
|
|||
|
||||
qreal sceneHeight = -playerAreaSpacing;
|
||||
for (int i = 0; i < players.size(); ++i)
|
||||
sceneHeight += players[i]->boundingRect().height() + playerAreaSpacing;
|
||||
if (!players[i]->getConceded())
|
||||
sceneHeight += players[i]->boundingRect().height() + playerAreaSpacing;
|
||||
phasesToolbar->setHeight(sceneHeight);
|
||||
qreal phasesWidth = phasesToolbar->getWidth();
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
#include <QDebug>
|
||||
|
||||
Player::Player(ServerInfo_User *info, int _id, bool _local, TabGame *_parent)
|
||||
: QObject(_parent), shortcutsActive(false), defaultNumberTopCards(3), lastTokenDestroy(true), userInfo(new ServerInfo_User(info)), id(_id), active(false), local(_local), mirrored(false), dialogSemaphore(false)
|
||||
: QObject(_parent), shortcutsActive(false), defaultNumberTopCards(3), lastTokenDestroy(true), userInfo(new ServerInfo_User(info)), id(_id), active(false), local(_local), mirrored(false), conceded(false), dialogSemaphore(false)
|
||||
{
|
||||
setCacheMode(DeviceCoordinateCache);
|
||||
|
||||
|
|
@ -264,17 +264,27 @@ Player::~Player()
|
|||
|
||||
static_cast<GameScene *>(scene())->removePlayer(this);
|
||||
|
||||
clearArrows();
|
||||
|
||||
clear();
|
||||
QMapIterator<QString, CardZone *> i(zones);
|
||||
while (i.hasNext())
|
||||
delete i.next().value();
|
||||
|
||||
clearCounters();
|
||||
zones.clear();
|
||||
|
||||
delete playerMenu;
|
||||
delete userInfo;
|
||||
}
|
||||
|
||||
void Player::clear()
|
||||
{
|
||||
clearArrows();
|
||||
|
||||
QMapIterator<QString, CardZone *> i(zones);
|
||||
while (i.hasNext())
|
||||
i.next().value()->clearContents();
|
||||
|
||||
clearCounters();
|
||||
}
|
||||
|
||||
void Player::addPlayer(Player *player)
|
||||
{
|
||||
if (player == this)
|
||||
|
|
@ -362,6 +372,11 @@ void Player::rearrangeZones()
|
|||
rearrangeCounters();
|
||||
}
|
||||
|
||||
void Player::updateZones()
|
||||
{
|
||||
table->reorganizeCards();
|
||||
}
|
||||
|
||||
void Player::updateBgPixmap()
|
||||
{
|
||||
QString bgPath = settingsCache->getPlayerBgPath();
|
||||
|
|
@ -1485,6 +1500,16 @@ qreal Player::getMinimumWidth() const
|
|||
return result;
|
||||
}
|
||||
|
||||
void Player::setConceded(bool _conceded)
|
||||
{
|
||||
conceded = _conceded;
|
||||
setVisible(!conceded);
|
||||
if (conceded) {
|
||||
clear();
|
||||
emit gameConceded();
|
||||
}
|
||||
}
|
||||
|
||||
void Player::setMirrored(bool _mirrored)
|
||||
{
|
||||
if (mirrored != _mirrored) {
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ signals:
|
|||
void logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer);
|
||||
|
||||
void sizeChanged();
|
||||
void gameConceded();
|
||||
public slots:
|
||||
void actUntapAll();
|
||||
void actRollDie();
|
||||
|
|
@ -102,7 +103,6 @@ public slots:
|
|||
void actSetAnnotation(QAction *action);
|
||||
void cardMenuAction(QAction *action);
|
||||
void actCardCounterTrigger(QAction *action);
|
||||
|
||||
private slots:
|
||||
void addPlayer(Player *player);
|
||||
void removePlayer(Player *player);
|
||||
|
|
@ -134,6 +134,7 @@ private:
|
|||
bool active;
|
||||
bool local;
|
||||
bool mirrored;
|
||||
bool conceded;
|
||||
|
||||
bool dialogSemaphore;
|
||||
bool clearCardsToDelete();
|
||||
|
|
@ -203,6 +204,7 @@ public:
|
|||
Player(ServerInfo_User *info, int _id, bool _local, TabGame *_parent);
|
||||
~Player();
|
||||
void retranslateUi();
|
||||
void clear();
|
||||
QMenu *getPlayerMenu() const { return playerMenu; }
|
||||
int getId() const { return id; }
|
||||
QString getName() const;
|
||||
|
|
@ -211,13 +213,16 @@ public:
|
|||
bool getMirrored() const { return mirrored; }
|
||||
const QMap<QString, CardZone *> &getZones() const { return zones; }
|
||||
const QMap<int, ArrowItem *> &getArrows() const { return arrows; }
|
||||
TableZone *getTable() const { return table; }
|
||||
void setCardMenu(QMenu *menu);
|
||||
QMenu *getCardMenu() const;
|
||||
bool getActive() const { return active; }
|
||||
void setActive(bool _active);
|
||||
void setShortcutsActive();
|
||||
void setShortcutsInactive();
|
||||
void updateZones();
|
||||
|
||||
void setConceded(bool _conceded);
|
||||
bool getConceded() const { return conceded; }
|
||||
|
||||
qreal getMinimumWidth() const;
|
||||
void setMirrored(bool _mirrored);
|
||||
|
|
|
|||
|
|
@ -477,6 +477,10 @@ void TabGame::startGame()
|
|||
}
|
||||
mainLayout->removeItem(deckViewContainerLayout);
|
||||
|
||||
QMapIterator<int, Player *> playerIterator(players);
|
||||
while (playerIterator.hasNext())
|
||||
playerIterator.next().value()->setConceded(false);
|
||||
|
||||
playerListWidget->setGameStarted(true);
|
||||
started = true;
|
||||
gameView->show();
|
||||
|
|
@ -581,7 +585,16 @@ void TabGame::eventPlayerPropertiesChanged(Event_PlayerPropertiesChanged *event,
|
|||
messageLog->logNotReadyStart(player);
|
||||
break;
|
||||
}
|
||||
case ItemId_Context_Concede: messageLog->logConcede(player); break;
|
||||
case ItemId_Context_Concede: {
|
||||
messageLog->logConcede(player);
|
||||
player->setConceded(true);
|
||||
|
||||
QMapIterator<int, Player *> playerIterator(players);
|
||||
while (playerIterator.hasNext())
|
||||
playerIterator.next().value()->updateZones();
|
||||
|
||||
break;
|
||||
}
|
||||
case ItemId_Context_DeckSelect: messageLog->logDeckSelect(player, static_cast<Context_DeckSelect *>(context)->getDeckId()); break;
|
||||
default: ;
|
||||
}
|
||||
|
|
@ -609,13 +622,21 @@ void TabGame::eventLeave(Event_Leave *event, GameEventContext * /*context*/)
|
|||
int playerId = event->getPlayerId();
|
||||
|
||||
Player *player = players.value(playerId, 0);
|
||||
if (player) {
|
||||
messageLog->logLeave(player);
|
||||
playerListWidget->removePlayer(playerId);
|
||||
players.remove(playerId);
|
||||
emit playerRemoved(player);
|
||||
player->deleteLater();
|
||||
}
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
messageLog->logLeave(player);
|
||||
playerListWidget->removePlayer(playerId);
|
||||
players.remove(playerId);
|
||||
emit playerRemoved(player);
|
||||
player->clear();
|
||||
player->deleteLater();
|
||||
|
||||
// Rearrange all remaining zones so that attachment relationship updates take place
|
||||
QMapIterator<int, Player *> playerIterator(players);
|
||||
while (playerIterator.hasNext())
|
||||
playerIterator.next().value()->updateZones();
|
||||
|
||||
emit userEvent();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue