This commit is contained in:
BruebachL 2026-09-20 19:36:33 +02:00 committed by GitHub
commit 7a9592a565
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 0 deletions

View file

@ -26,6 +26,7 @@
#include <libcockatrice/protocol/pb/event_reverse_turn.pb.h>
#include <libcockatrice/protocol/pb/event_set_active_phase.pb.h>
#include <libcockatrice/protocol/pb/event_set_active_player.pb.h>
#include <libcockatrice/protocol/pb/event_tournament_state.pb.h>
#include <libcockatrice/protocol/pb/game_event_container.pb.h>
#include <libcockatrice/protocol/pending_command.h>
@ -158,6 +159,9 @@ void GameEventHandler::processGameEventContainer(const GameEventContainer &cont,
case GameEvent::REVERSE_TURN:
eventReverseTurn(event.GetExtension(Event_ReverseTurn::ext), playerId, context);
break;
case GameEvent::TOURNAMENT_STATE:
emit tournamentStateChanged(event.GetExtension(Event_TournamentState::ext));
break;
default: {
PlayerLogic *player = game->getPlayerManager()->getPlayers().value(playerId, 0);
@ -263,6 +267,13 @@ void GameEventHandler::eventGameStateChanged(const Event_GameStateChanged &event
int /*eventPlayerId*/,
const GameEventContext & /*context*/)
{
// Sub-games of a tournament report their parent hub game so the client can
// route "close game" back to the parent tab. Use has_parent_game_id rather
// than comparing the default so a future drop of the proto default still works.
if (event.has_parent_game_id()) {
game->getGameMetaInfo()->setParentGameId(event.parent_game_id());
}
const int playerListSize = event.player_list_size();
QVector<QPair<int, QPair<QString, QString>>> opponentDecksToDisplay;

View file

@ -43,6 +43,7 @@ class Event_SetActivePhase;
class Event_GameSay;
class Event_Kicked;
class Event_ReverseTurn;
class Event_TournamentState;
class Event_Ping;
inline Q_LOGGING_CATEGORY(GameEventHandlerLog, "game_event_handler");
@ -329,6 +330,7 @@ signals:
void gameStopped();
void gameClosed();
void tournamentStateChanged(const Event_TournamentState &state);
void playerPropertiesChanged(const ServerInfo_PlayerProperties &prop, int playerId);
void playerJoined(const ServerInfo_PlayerProperties &playerInfo);
void playerLeft(int leavingPlayerId);

View file

@ -84,6 +84,21 @@ public:
return roomGameTypes.find(gameInfo_.game_types(index)).value();
}
bool isTournament() const
{
return gameInfo_.is_tournament();
}
int parentGameId() const
{
return parentGameId_;
}
void setParentGameId(int id)
{
parentGameId_ = id;
}
public slots:
void setStarted(bool s)
{
@ -108,6 +123,7 @@ signals:
private:
ServerInfo_Game gameInfo_;
int parentGameId_ = -1;
};
#endif // GAME_META_INFO_H