Cockatrice 2026-04-21-Development-2.11.0-beta.61
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
player.h
Go to the documentation of this file.
1
6
7#ifndef PLAYER_H
8#define PLAYER_H
9
12#include "../interface/deck_loader/loaded_deck.h"
17#include "menu/player_menu.h"
18#include "player_area.h"
21#include "player_info.h"
22
23#include <QInputDialog>
24#include <QLoggingCategory>
25#include <QMap>
26#include <QTimer>
28#include <libcockatrice/protocol/pb/card_attributes.pb.h>
29#include <libcockatrice/protocol/pb/game_event.pb.h>
31
32inline Q_LOGGING_CATEGORY(PlayerLog, "player");
33
34namespace google
35{
36namespace protobuf
37{
38class Message;
39}
40} // namespace google
42class AbstractCounter;
43class AbstractGame;
44class ArrowItem;
45class ArrowTarget;
46class CardDatabase;
47class CardZone;
48class CommandContainer;
49class GameCommand;
50class GameEvent;
51class PlayerInfo;
53class PlayerActions;
54class PlayerMenu;
55class QAction;
56class QMenu;
57class ServerInfo_Arrow;
58class ServerInfo_Counter;
59class ServerInfo_Player;
60class ServerInfo_User;
61class TabGame;
62
63const int MAX_TOKENS_PER_DIALOG = 99;
64
65class Player : public QObject
66{
67 Q_OBJECT
68
69signals:
75 void concededChanged(int playerId, bool conceded);
79
80public slots:
81 void setActive(bool _active);
82
83public:
84 Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent);
86 ~Player() override;
87
88 void initializeZones();
89 void updateZones();
90 void clear();
91
92 void processPlayerInfo(const ServerInfo_Player &info);
93 void processCardAttachment(const ServerInfo_Player &info);
94
95 void addCard(CardItem *c);
96 void deleteCard(CardItem *c);
97
98 bool clearCardsToDelete();
99
100 bool getActive() const
101 {
102 return active;
103 }
104
106 {
107 return game;
108 }
109
111
112 [[nodiscard]] PlayerGraphicsItem *getGraphicsItem();
113
114 [[nodiscard]] PlayerActions *getPlayerActions() const
115 {
116 return playerActions;
117 }
118
120 {
121 return playerEventHandler;
122 }
123
124 [[nodiscard]] PlayerInfo *getPlayerInfo() const
125 {
126 return playerInfo;
127 }
128
129 [[nodiscard]] PlayerMenu *getPlayerMenu() const
130 {
131 return playerMenu;
132 }
133
134 void setDeck(const DeckList &_deck);
135
136 [[nodiscard]] const DeckList &getDeck() const
137 {
138 return deck;
139 }
140
141 template <typename T> T *addZone(T *zone)
142 {
143 zones.insert(zone->getName(), zone);
144 return zone;
145 }
146
147 CardZoneLogic *getZone(const QString zoneName)
148 {
149 return zones.value(zoneName);
150 }
151
152 const QMap<QString, CardZoneLogic *> &getZones() const
153 {
154 return zones;
155 }
156
158 {
159 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::DECK));
160 }
161
163 {
164 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::GRAVE));
165 }
166
168 {
169 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::EXILE));
170 }
171
173 {
174 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::SIDEBOARD));
175 }
176
178 {
179 return qobject_cast<TableZoneLogic *>(zones.value(ZoneNames::TABLE));
180 }
181
183 {
184 return qobject_cast<StackZoneLogic *>(zones.value(ZoneNames::STACK));
185 }
186
188 {
189 return qobject_cast<HandZoneLogic *>(zones.value(ZoneNames::HAND));
190 }
191
192 AbstractCounter *addCounter(const ServerInfo_Counter &counter);
193 AbstractCounter *addCounter(int counterId, const QString &name, QColor color, int radius, int value);
194 void delCounter(int counterId);
195 void clearCounters();
197
198 QMap<int, AbstractCounter *> getCounters()
199 {
200 return counters;
201 }
202
203 ArrowItem *addArrow(const ServerInfo_Arrow &arrow);
204 ArrowItem *addArrow(int arrowId, CardItem *startCard, ArrowTarget *targetItem, const QColor &color);
205 void delArrow(int arrowId);
206 void removeArrow(ArrowItem *arrow);
207 void clearArrows();
208
209 const QMap<int, ArrowItem *> &getArrows() const
210 {
211 return arrows;
212 }
213
214 void setConceded(bool _conceded);
215 bool getConceded() const
216 {
217 return conceded;
218 }
219
220 void setGameStarted();
221
222 void setDialogSemaphore(const bool _active)
223 {
224 dialogSemaphore = _active;
225 }
226
227 int getZoneId() const
228 {
229 return zoneId;
230 }
231
232 void setZoneId(int _zoneId);
233
234private:
241
242 bool active;
244
246
248 QMap<QString, CardZoneLogic *> zones;
249 QMap<int, AbstractCounter *> counters;
250 QMap<int, ArrowItem *> arrows;
251
253 QList<CardItem *> cardsToDelete;
254
255 // void eventConnectionStateChanged(const Event_ConnectionStateChanged &event);
256};
257
258class AnnotationDialog : public QInputDialog
259{
260 Q_OBJECT
261 void keyPressEvent(QKeyEvent *e) override;
262
263public:
264 explicit AnnotationDialog(QWidget *parent = nullptr) : QInputDialog(parent)
265 {
266 }
267};
268
269#endif
TODO: Document this.
Definition abstract_card_item.h:20
Definition abstract_counter.h:23
Definition abstract_game.h:21
AnnotationDialog(QWidget *parent=nullptr)
Definition player.h:264
void keyPressEvent(QKeyEvent *e) override
Definition player_actions.cpp:1468
Definition arrow_item.h:19
Definition arrow_target.h:18
Core in-memory container for card and set data.
Definition card_database.h:29
Definition card_item.h:27
Definition card_zone_logic.h:26
Definition card_zone.h:26
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:63
Manages the game board display including players, zones, cards, and animations.
Definition game_scene.h:38
Definition hand_zone_logic.h:12
Definition pile_zone_logic.h:12
Definition player_actions.h:35
Definition player_event_handler.h:38
Definition player_graphics_item.h:22
Definition player_info.h:16
Definition player_menu.h:27
DeckList deck
Definition player.h:245
void addCard(CardItem *c)
Definition player.cpp:250
void setConceded(bool _conceded)
Definition player.cpp:100
void setGameStarted()
Definition player.cpp:475
CardZoneLogic * getZone(const QString zoneName)
Definition player.h:147
bool dialogSemaphore
Definition player.h:252
AbstractCounter * addCounter(const ServerInfo_Counter &counter)
Definition player.cpp:273
void incrementAllCardCounters()
Definition player.cpp:324
void forwardActionSignalsToEventHandler()
Definition player.cpp:53
void rearrangeCounters()
void clearCustomZonesMenu()
PileZoneLogic * getRfgZone()
Definition player.h:167
void processPlayerInfo(const ServerInfo_Player &info)
Definition player.cpp:119
int getZoneId() const
Definition player.h:227
TableZoneLogic * getTableZone()
Definition player.h:177
void updateZones()
Definition player.cpp:460
bool getConceded() const
Definition player.h:215
bool conceded
Definition player.h:243
void removeArrow(ArrowItem *arrow)
Definition player.cpp:422
void activeChanged(bool active)
int zoneId
Definition player.h:247
PileZoneLogic * getDeckZone()
Definition player.h:157
void concededChanged(int playerId, bool conceded)
T * addZone(T *zone)
Definition player.h:141
ArrowItem * addArrow(const ServerInfo_Arrow &arrow)
Definition player.cpp:369
PlayerActions * playerActions
Definition player.h:238
AbstractGame * game
Definition player.h:235
const QMap< QString, CardZoneLogic * > & getZones() const
Definition player.h:152
void setDialogSemaphore(const bool _active)
Definition player.h:222
StackZoneLogic * getStackZone()
Definition player.h:182
const QMap< int, ArrowItem * > & getArrows() const
Definition player.h:209
PlayerMenu * playerMenu
Definition player.h:239
void delArrow(int arrowId)
Definition player.cpp:413
PlayerEventHandler * playerEventHandler
Definition player.h:237
void addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
PlayerGraphicsItem * getGraphicsItem()
Definition player.cpp:465
HandZoneLogic * getHandZone()
Definition player.h:187
PlayerInfo * playerInfo
Definition player.h:236
QMap< int, AbstractCounter * > getCounters()
Definition player.h:198
~Player() override
Definition player.cpp:75
bool active
Definition player.h:242
void openDeckEditor(const LoadedDeck &deck)
void setActive(bool _active)
Definition player.cpp:454
void deleteCard(CardItem *c)
Definition player.cpp:255
QMap< QString, CardZoneLogic * > zones
Definition player.h:248
QList< CardItem * > cardsToDelete
Definition player.h:253
GameScene * getGameScene()
Definition player.cpp:470
PlayerMenu * getPlayerMenu() const
Definition player.h:129
void deckChanged()
PileZoneLogic * getGraveZone()
Definition player.h:162
QMap< int, ArrowItem * > arrows
Definition player.h:250
void resetTopCardMenuActions()
void processCardAttachment(const ServerInfo_Player &info)
Definition player.cpp:217
PileZoneLogic * getSideboardZone()
Definition player.h:172
void delCounter(int counterId)
Definition player.cpp:303
void newCardAdded(AbstractCardItem *card)
void initializeZones()
Definition player.cpp:62
PlayerActions * getPlayerActions() const
Definition player.h:114
void setZoneId(int _zoneId)
Definition player.cpp:113
void setDeck(const DeckList &_deck)
Definition player.cpp:266
PlayerEventHandler * getPlayerEventHandler() const
Definition player.h:119
QMap< int, AbstractCounter * > counters
Definition player.h:249
bool clearCardsToDelete()
Definition player.cpp:438
PlayerInfo * getPlayerInfo() const
Definition player.h:124
bool getActive() const
Definition player.h:100
void clear()
Definition player.cpp:88
void clearCounters()
Definition player.cpp:315
const DeckList & getDeck() const
Definition player.h:136
AbstractGame * getGame() const
Definition player.h:105
PlayerGraphicsItem * graphicsItem
Definition player.h:240
void clearArrows()
Definition player.cpp:429
Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
Definition player.cpp:32
Definition stack_zone_logic.h:12
Definition tab_game.h:56
Definition table_zone_logic.h:12
TODO: Document this.
TODO: Document this.
constexpr const char * TABLE
Definition zone_names.h:9
constexpr const char * EXILE
Definition zone_names.h:11
constexpr const char * SIDEBOARD
Definition zone_names.h:14
constexpr const char * HAND
Definition zone_names.h:12
constexpr const char * STACK
Definition zone_names.h:15
constexpr const char * DECK
Definition zone_names.h:13
constexpr const char * GRAVE
Definition zone_names.h:10
Definition phases_toolbar.h:18
TODO: Document this.
Q_LOGGING_CATEGORY(PlayerLog, "player")
const int MAX_TOKENS_PER_DIALOG
Definition player.h:63
TODO: Document this.
TODO: Document this.
TODO: Document this.
TODO: Document this.
Orchestrates lifecycle management for all player-bound UI components.
TODO: Document this.
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
TODO: Document this.
TODO: Document this.