mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 11:33:55 -07:00
removed some useless game events in favor of event context classes; added some preliminary icons
This commit is contained in:
parent
388e9255c7
commit
0c508f63ec
23 changed files with 399 additions and 226 deletions
|
|
@ -470,26 +470,11 @@ void Player::setCardAttrHelper(CardItem *card, const QString &aname, const QStri
|
|||
}
|
||||
}
|
||||
|
||||
void Player::eventDeckSelect(Event_DeckSelect *event)
|
||||
{
|
||||
emit logDeckSelect(this, event->getDeckId());
|
||||
}
|
||||
|
||||
void Player::eventSay(Event_Say *event)
|
||||
{
|
||||
emit logSay(this, event->getMessage());
|
||||
}
|
||||
|
||||
void Player::eventReadyStart(Event_ReadyStart * /*event*/)
|
||||
{
|
||||
emit logReadyStart(this);
|
||||
}
|
||||
|
||||
void Player::eventConcede(Event_Concede * /*event*/)
|
||||
{
|
||||
emit logConcede(this);
|
||||
}
|
||||
|
||||
void Player::eventShuffle(Event_Shuffle * /*event*/)
|
||||
{
|
||||
emit logShuffle(this);
|
||||
|
|
@ -670,13 +655,10 @@ void Player::eventDrawCards(Event_DrawCards *event)
|
|||
emit logDrawCards(this, event->getNumberCards());
|
||||
}
|
||||
|
||||
void Player::processGameEvent(GameEvent *event)
|
||||
void Player::processGameEvent(GameEvent *event, GameEventContext *context)
|
||||
{
|
||||
switch (event->getItemId()) {
|
||||
case ItemId_Event_DeckSelect: eventDeckSelect(qobject_cast<Event_DeckSelect *>(event)); break;
|
||||
case ItemId_Event_Say: eventSay(qobject_cast<Event_Say *>(event)); break;
|
||||
case ItemId_Event_ReadyStart: eventReadyStart(qobject_cast<Event_ReadyStart *>(event)); break;
|
||||
case ItemId_Event_Concede: eventConcede(qobject_cast<Event_Concede *>(event)); break;
|
||||
case ItemId_Event_Shuffle: eventShuffle(qobject_cast<Event_Shuffle *>(event)); break;
|
||||
case ItemId_Event_RollDie: eventRollDie(qobject_cast<Event_RollDie *>(event)); break;
|
||||
case ItemId_Event_CreateArrows: eventCreateArrows(qobject_cast<Event_CreateArrows *>(event)); break;
|
||||
|
|
|
|||
|
|
@ -23,10 +23,8 @@ class ServerInfo_Counter;
|
|||
class CommandContainer;
|
||||
class GameCommand;
|
||||
class GameEvent;
|
||||
class Event_DeckSelect;
|
||||
class GameEventContext;
|
||||
class Event_Say;
|
||||
class Event_ReadyStart;
|
||||
class Event_Concede;
|
||||
class Event_Shuffle;
|
||||
class Event_RollDie;
|
||||
class Event_CreateArrows;
|
||||
|
|
@ -48,10 +46,7 @@ signals:
|
|||
void toggleZoneView(Player *player, QString zoneName, int number);
|
||||
void newCardAdded(AbstractCardItem *card);
|
||||
// Log events
|
||||
void logDeckSelect(Player *player, int deckId);
|
||||
void logSay(Player *player, QString message);
|
||||
void logReadyStart(Player *player);
|
||||
void logConcede(Player *player);
|
||||
void logShuffle(Player *player);
|
||||
void logRollDie(Player *player, int sides, int roll);
|
||||
void logCreateArrow(Player *player, Player *startPlayer, QString startCard, Player *targetPlayer, QString targetCard);
|
||||
|
|
@ -102,7 +97,6 @@ private:
|
|||
QAction *aTap, *aUntap, *aDoesntUntap, *aFlip, *aAddCounter, *aRemoveCounter, *aSetCounters,
|
||||
*aMoveToTopLibrary, *aMoveToBottomLibrary, *aMoveToGraveyard, *aMoveToExile;
|
||||
|
||||
|
||||
void actTap(CardItem *card);
|
||||
void actUntap(CardItem *card);
|
||||
void actDoesntUntap(CardItem *card);
|
||||
|
|
@ -135,10 +129,7 @@ private:
|
|||
|
||||
void initSayMenu();
|
||||
|
||||
void eventDeckSelect(Event_DeckSelect *event);
|
||||
void eventSay(Event_Say *event);
|
||||
void eventReadyStart(Event_ReadyStart *event);
|
||||
void eventConcede(Event_Concede *event);
|
||||
void eventShuffle(Event_Shuffle *event);
|
||||
void eventRollDie(Event_RollDie *event);
|
||||
void eventCreateArrows(Event_CreateArrows *event);
|
||||
|
|
@ -189,7 +180,7 @@ public:
|
|||
void setActive(bool _active);
|
||||
|
||||
void processPlayerInfo(ServerInfo_Player *info);
|
||||
void processGameEvent(GameEvent *event);
|
||||
void processGameEvent(GameEvent *event, GameEventContext *context);
|
||||
void sendGameCommand(GameCommand *command);
|
||||
void sendCommandContainer(CommandContainer *cont);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,28 +1,58 @@
|
|||
#include <QHeaderView>
|
||||
#include "playerlistwidget.h"
|
||||
#include "protocol_datastructures.h"
|
||||
#include "pingpixmapgenerator.h"
|
||||
|
||||
PlayerListWidget::PlayerListWidget(QWidget *parent)
|
||||
: QTreeWidget(parent)
|
||||
: QTreeWidget(parent), gameStarted(false)
|
||||
{
|
||||
setColumnCount(2);
|
||||
readyIcon = QIcon(":/resources/icon_ready_start.svg");
|
||||
notReadyIcon = QIcon(":/resources/icon_not_ready_start.svg");
|
||||
concededIcon = QIcon(":/resources/icon_conceded.svg");
|
||||
playerIcon = QIcon(":/resources/icon_player.svg");
|
||||
spectatorIcon = QIcon(":/resources/icon_spectator.svg");
|
||||
|
||||
setColumnCount(5);
|
||||
setRootIsDecorated(false);
|
||||
setSelectionMode(NoSelection);
|
||||
header()->setResizeMode(QHeaderView::ResizeToContents);
|
||||
retranslateUi();
|
||||
}
|
||||
|
||||
void PlayerListWidget::retranslateUi()
|
||||
{
|
||||
headerItem()->setText(0, tr("Player name"));
|
||||
headerItem()->setText(1, tr("Role"));
|
||||
headerItem()->setText(0, QString());
|
||||
headerItem()->setText(1, QString());
|
||||
headerItem()->setText(2, QString());
|
||||
headerItem()->setText(3, tr("Player name"));
|
||||
headerItem()->setText(4, tr("Deck"));
|
||||
}
|
||||
|
||||
void PlayerListWidget::addPlayer(ServerInfo_Player *player)
|
||||
void PlayerListWidget::addPlayer(ServerInfo_PlayerProperties *player)
|
||||
{
|
||||
QTreeWidgetItem *newPlayer = new QTreeWidgetItem;
|
||||
newPlayer->setText(0, player->getName());
|
||||
newPlayer->setText(1, player->getSpectator() ? tr("Spectator") : tr("Player"));
|
||||
addTopLevelItem(newPlayer);
|
||||
players.insert(player->getPlayerId(), newPlayer);
|
||||
updatePlayerProperties(player);
|
||||
addTopLevelItem(newPlayer);
|
||||
}
|
||||
|
||||
void PlayerListWidget::updatePlayerProperties(ServerInfo_PlayerProperties *prop)
|
||||
{
|
||||
QTreeWidgetItem *player = players.value(prop->getPlayerId(), 0);
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
player->setIcon(1, prop->getSpectator() ? spectatorIcon : playerIcon);
|
||||
player->setIcon(2, gameStarted ? (prop->getConceded() ? concededIcon : QIcon()) : (prop->getReadyStart() ? readyIcon : notReadyIcon));
|
||||
player->setText(3, prop->getName());
|
||||
|
||||
QString deckText;
|
||||
switch (prop->getDeckId()) {
|
||||
case -2: deckText = tr("no deck"); break;
|
||||
case -1: deckText = tr("local deck"); break;
|
||||
default: deckText = tr("ID #%1").arg(prop->getDeckId());
|
||||
}
|
||||
player->setText(4, deckText);
|
||||
}
|
||||
|
||||
void PlayerListWidget::removePlayer(int playerId)
|
||||
|
|
@ -41,8 +71,7 @@ void PlayerListWidget::setActivePlayer(int playerId)
|
|||
i.next();
|
||||
QTreeWidgetItem *twi = i.value();
|
||||
QColor c = i.key() == playerId ? QColor(150, 255, 150) : Qt::white;
|
||||
twi->setBackground(0, c);
|
||||
twi->setBackground(1, c);
|
||||
twi->setBackground(3, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -53,3 +82,10 @@ void PlayerListWidget::updatePing(int playerId, int pingTime)
|
|||
return;
|
||||
twi->setIcon(0, QIcon(PingPixmapGenerator::generatePixmap(10, pingTime, 10)));
|
||||
}
|
||||
|
||||
void PlayerListWidget::setGameStarted(bool _gameStarted)
|
||||
{
|
||||
gameStarted = _gameStarted;
|
||||
for (int i = 0; i < players.size(); ++i)
|
||||
players[i]->setIcon(2, gameStarted ? QIcon() : notReadyIcon);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,20 +3,25 @@
|
|||
|
||||
#include <QTreeWidget>
|
||||
#include <QMap>
|
||||
#include <QIcon>
|
||||
|
||||
class ServerInfo_Player;
|
||||
class ServerInfo_PlayerProperties;
|
||||
|
||||
class PlayerListWidget : public QTreeWidget {
|
||||
Q_OBJECT
|
||||
private:
|
||||
QMap<int, QTreeWidgetItem *> players;
|
||||
QIcon readyIcon, notReadyIcon, concededIcon, playerIcon, spectatorIcon;
|
||||
bool gameStarted;
|
||||
public:
|
||||
PlayerListWidget(QWidget *parent = 0);
|
||||
void retranslateUi();
|
||||
void addPlayer(ServerInfo_Player *player);
|
||||
void addPlayer(ServerInfo_PlayerProperties *player);
|
||||
void removePlayer(int playerId);
|
||||
void setActivePlayer(int playerId);
|
||||
void updatePing(int playerId, int pingTime);
|
||||
void updatePlayerProperties(ServerInfo_PlayerProperties *prop);
|
||||
void setGameStarted(bool _gameStarted);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -229,17 +229,19 @@ Player *TabGame::addPlayer(int playerId, const QString &playerName)
|
|||
void TabGame::processGameEventContainer(GameEventContainer *cont)
|
||||
{
|
||||
const QList<GameEvent *> &eventList = cont->getEventList();
|
||||
GameEventContext *context = cont->getContext();
|
||||
for (int i = 0; i < eventList.size(); ++i) {
|
||||
GameEvent *event = eventList[i];
|
||||
|
||||
switch (event->getItemId()) {
|
||||
case ItemId_Event_GameStateChanged: eventGameStateChanged(qobject_cast<Event_GameStateChanged *>(event)); break;
|
||||
case ItemId_Event_Join: eventJoin(qobject_cast<Event_Join *>(event)); break;
|
||||
case ItemId_Event_Leave: eventLeave(qobject_cast<Event_Leave *>(event)); break;
|
||||
case ItemId_Event_GameClosed: eventGameClosed(qobject_cast<Event_GameClosed *>(event)); break;
|
||||
case ItemId_Event_SetActivePlayer: eventSetActivePlayer(qobject_cast<Event_SetActivePlayer *>(event)); break;
|
||||
case ItemId_Event_SetActivePhase: eventSetActivePhase(qobject_cast<Event_SetActivePhase *>(event)); break;
|
||||
case ItemId_Event_Ping: eventPing(qobject_cast<Event_Ping *>(event)); break;
|
||||
case ItemId_Event_GameStateChanged: eventGameStateChanged(qobject_cast<Event_GameStateChanged *>(event), context); break;
|
||||
case ItemId_Event_PlayerPropertiesChanged: eventPlayerPropertiesChanged(qobject_cast<Event_PlayerPropertiesChanged *>(event), context); break;
|
||||
case ItemId_Event_Join: eventJoin(qobject_cast<Event_Join *>(event), context); break;
|
||||
case ItemId_Event_Leave: eventLeave(qobject_cast<Event_Leave *>(event), context); break;
|
||||
case ItemId_Event_GameClosed: eventGameClosed(qobject_cast<Event_GameClosed *>(event), context); break;
|
||||
case ItemId_Event_SetActivePlayer: eventSetActivePlayer(qobject_cast<Event_SetActivePlayer *>(event), context); break;
|
||||
case ItemId_Event_SetActivePhase: eventSetActivePhase(qobject_cast<Event_SetActivePhase *>(event), context); break;
|
||||
case ItemId_Event_Ping: eventPing(qobject_cast<Event_Ping *>(event), context); break;
|
||||
|
||||
default: {
|
||||
Player *player = players.value(event->getPlayerId(), 0);
|
||||
|
|
@ -247,7 +249,7 @@ void TabGame::processGameEventContainer(GameEventContainer *cont)
|
|||
qDebug() << "unhandled game event: invalid player id";
|
||||
break;
|
||||
}
|
||||
player->processGameEvent(event);
|
||||
player->processGameEvent(event, context);
|
||||
emit userEvent();
|
||||
}
|
||||
}
|
||||
|
|
@ -275,6 +277,7 @@ void TabGame::startGame()
|
|||
{
|
||||
currentPhase = -1;
|
||||
|
||||
playerListWidget->setGameStarted(true);
|
||||
started = true;
|
||||
deckViewContainer->hide();
|
||||
gameView->show();
|
||||
|
|
@ -284,27 +287,31 @@ void TabGame::startGame()
|
|||
void TabGame::stopGame()
|
||||
{
|
||||
currentPhase = -1;
|
||||
|
||||
playerListWidget->setActivePlayer(-1);
|
||||
playerListWidget->setGameStarted(false);
|
||||
started = false;
|
||||
gameView->hide();
|
||||
phasesToolbar->hide();
|
||||
deckViewContainer->show();
|
||||
}
|
||||
|
||||
void TabGame::eventGameStateChanged(Event_GameStateChanged *event)
|
||||
void TabGame::eventGameStateChanged(Event_GameStateChanged *event, GameEventContext * /*context*/)
|
||||
{
|
||||
const QList<ServerInfo_Player *> &plList = event->getPlayerList();
|
||||
for (int i = 0; i < plList.size(); ++i) {
|
||||
ServerInfo_Player *pl = plList[i];
|
||||
if (pl->getSpectator()) {
|
||||
if (!spectators.contains(pl->getPlayerId())) {
|
||||
spectators.insert(pl->getPlayerId(), pl->getName());
|
||||
playerListWidget->addPlayer(pl);
|
||||
ServerInfo_PlayerProperties *prop = pl->getProperties();
|
||||
if (prop->getSpectator()) {
|
||||
if (!spectators.contains(prop->getPlayerId())) {
|
||||
spectators.insert(prop->getPlayerId(), prop->getName());
|
||||
playerListWidget->addPlayer(prop);
|
||||
}
|
||||
} else {
|
||||
Player *player = players.value(pl->getPlayerId(), 0);
|
||||
Player *player = players.value(prop->getPlayerId(), 0);
|
||||
if (!player) {
|
||||
player = addPlayer(pl->getPlayerId(), pl->getName());
|
||||
playerListWidget->addPlayer(pl);
|
||||
player = addPlayer(prop->getPlayerId(), prop->getName());
|
||||
playerListWidget->addPlayer(prop);
|
||||
}
|
||||
player->processPlayerInfo(pl);
|
||||
if (player->getLocal() && pl->getDeck()) {
|
||||
|
|
@ -327,9 +334,23 @@ void TabGame::eventGameStateChanged(Event_GameStateChanged *event)
|
|||
emit userEvent();
|
||||
}
|
||||
|
||||
void TabGame::eventJoin(Event_Join *event)
|
||||
void TabGame::eventPlayerPropertiesChanged(Event_PlayerPropertiesChanged *event, GameEventContext *context)
|
||||
{
|
||||
ServerInfo_Player *playerInfo = event->getPlayer();
|
||||
Player *player = players.value(event->getProperties()->getPlayerId(), 0);
|
||||
if (!player)
|
||||
return;
|
||||
playerListWidget->updatePlayerProperties(event->getProperties());
|
||||
if (context) switch (context->getItemId()) {
|
||||
case ItemId_Context_ReadyStart: messageLog->logReadyStart(player); break;
|
||||
case ItemId_Context_Concede: messageLog->logConcede(player); break;
|
||||
case ItemId_Context_DeckSelect: messageLog->logDeckSelect(player, static_cast<Context_DeckSelect *>(context)->getDeckId()); break;
|
||||
default: ;
|
||||
}
|
||||
}
|
||||
|
||||
void TabGame::eventJoin(Event_Join *event, GameEventContext * /*context*/)
|
||||
{
|
||||
ServerInfo_PlayerProperties *playerInfo = event->getPlayer();
|
||||
if (playerInfo->getSpectator()) {
|
||||
spectators.insert(playerInfo->getPlayerId(), playerInfo->getName());
|
||||
messageLog->logJoinSpectator(playerInfo->getName());
|
||||
|
|
@ -342,7 +363,7 @@ void TabGame::eventJoin(Event_Join *event)
|
|||
emit userEvent();
|
||||
}
|
||||
|
||||
void TabGame::eventLeave(Event_Leave *event)
|
||||
void TabGame::eventLeave(Event_Leave *event, GameEventContext * /*context*/)
|
||||
{
|
||||
int playerId = event->getPlayerId();
|
||||
|
||||
|
|
@ -360,7 +381,7 @@ void TabGame::eventLeave(Event_Leave *event)
|
|||
emit userEvent();
|
||||
}
|
||||
|
||||
void TabGame::eventGameClosed(Event_GameClosed * /*event*/)
|
||||
void TabGame::eventGameClosed(Event_GameClosed * /*event*/, GameEventContext * /*context*/)
|
||||
{
|
||||
started = false;
|
||||
messageLog->logGameClosed();
|
||||
|
|
@ -383,7 +404,7 @@ Player *TabGame::setActivePlayer(int id)
|
|||
return player;
|
||||
}
|
||||
|
||||
void TabGame::eventSetActivePlayer(Event_SetActivePlayer *event)
|
||||
void TabGame::eventSetActivePlayer(Event_SetActivePlayer *event, GameEventContext * /*context*/)
|
||||
{
|
||||
Player *player = setActivePlayer(event->getActivePlayerId());
|
||||
if (!player)
|
||||
|
|
@ -400,7 +421,7 @@ void TabGame::setActivePhase(int phase)
|
|||
}
|
||||
}
|
||||
|
||||
void TabGame::eventSetActivePhase(Event_SetActivePhase *event)
|
||||
void TabGame::eventSetActivePhase(Event_SetActivePhase *event, GameEventContext * /*context*/)
|
||||
{
|
||||
int phase = event->getPhase();
|
||||
if (currentPhase != phase)
|
||||
|
|
@ -409,7 +430,7 @@ void TabGame::eventSetActivePhase(Event_SetActivePhase *event)
|
|||
emit userEvent();
|
||||
}
|
||||
|
||||
void TabGame::eventPing(Event_Ping *event)
|
||||
void TabGame::eventPing(Event_Ping *event, GameEventContext * /*context*/)
|
||||
{
|
||||
const QList<ServerInfo_PlayerPing *> &pingList = event->getPingList();
|
||||
for (int i = 0; i < pingList.size(); ++i)
|
||||
|
|
|
|||
|
|
@ -21,9 +21,11 @@ class PhasesToolbar;
|
|||
class PlayerListWidget;
|
||||
class ProtocolResponse;
|
||||
class GameEventContainer;
|
||||
class GameEventContext;
|
||||
class GameCommand;
|
||||
class CommandContainer;
|
||||
class Event_GameStateChanged;
|
||||
class Event_PlayerPropertiesChanged;
|
||||
class Event_Join;
|
||||
class Event_Leave;
|
||||
class Event_GameClosed;
|
||||
|
|
@ -72,15 +74,16 @@ private:
|
|||
void startGame();
|
||||
void stopGame();
|
||||
|
||||
void eventGameStateChanged(Event_GameStateChanged *event);
|
||||
void eventJoin(Event_Join *event);
|
||||
void eventLeave(Event_Leave *event);
|
||||
void eventGameClosed(Event_GameClosed *event);
|
||||
void eventGameStateChanged(Event_GameStateChanged *event, GameEventContext *context);
|
||||
void eventPlayerPropertiesChanged(Event_PlayerPropertiesChanged *event, GameEventContext *context);
|
||||
void eventJoin(Event_Join *event, GameEventContext *context);
|
||||
void eventLeave(Event_Leave *event, GameEventContext *context);
|
||||
void eventGameClosed(Event_GameClosed *event, GameEventContext *context);
|
||||
Player *setActivePlayer(int id);
|
||||
void eventSetActivePlayer(Event_SetActivePlayer *event);
|
||||
void eventSetActivePlayer(Event_SetActivePlayer *event, GameEventContext *context);
|
||||
void setActivePhase(int phase);
|
||||
void eventSetActivePhase(Event_SetActivePhase *event);
|
||||
void eventPing(Event_Ping *event);
|
||||
void eventSetActivePhase(Event_SetActivePhase *event, GameEventContext *context);
|
||||
void eventPing(Event_Ping *event, GameEventContext *context);
|
||||
signals:
|
||||
void gameClosing(TabGame *tab);
|
||||
private slots:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue