Cockatrice 2026-06-01-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
player_logic.h
Go to the documentation of this file.
1
6
7#ifndef PLAYER_H
8#define PLAYER_H
9
11#include "../board/arrow_data.h"
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 AbstractGame;
43class ArrowItem;
44class ArrowTarget;
45class CardDatabase;
46class CardZone;
47class CommandContainer;
48class GameCommand;
49class GameEvent;
50class PlayerInfo;
52class PlayerActions;
53class PlayerMenu;
54class QAction;
55class QMenu;
56class ServerInfo_Arrow;
57class ServerInfo_Counter;
58class ServerInfo_Player;
59class ServerInfo_User;
60class TabGame;
61
62const int MAX_TOKENS_PER_DIALOG = 99;
63
64class PlayerLogic : public QObject
65{
66 Q_OBJECT
67
68signals:
73 void counterRemoved(int counterId);
77 void concededChanged(int playerId, bool conceded);
82 void arrowDeleteRequested(int arrowId);
83 void arrowDeleted(int arrowId);
84 void arrowsCleared(); // fires on clear() and processPlayerInfo
85
86public slots:
87 void setActive(bool _active);
88
89public:
90 PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent);
91 ~PlayerLogic() override;
92
93 void initializeZones();
94 void updateZones();
95 void clear();
96
97 void processPlayerInfo(const ServerInfo_Player &info);
98 void processCardAttachment(const ServerInfo_Player &info);
99
100 void addCard(CardItem *c);
101 void deleteCard(CardItem *c);
102
103 bool clearCardsToDelete();
104
105 bool getActive() const
106 {
107 return active;
108 }
109
111 {
112 return game;
113 }
114
116
117 [[nodiscard]] PlayerGraphicsItem *getGraphicsItem();
118
119 [[nodiscard]] PlayerActions *getPlayerActions() const
120 {
121 return playerActions;
122 }
123
125 {
126 return playerEventHandler;
127 }
128
129 [[nodiscard]] PlayerInfo *getPlayerInfo() const
130 {
131 return playerInfo;
132 }
133
134 [[nodiscard]] PlayerMenu *getPlayerMenu() const
135 {
136 return playerMenu;
137 }
138
139 void setDeck(const DeckList &_deck);
140
141 [[nodiscard]] const DeckList &getDeck() const
142 {
143 return deck;
144 }
145
146 template <typename T> T *addZone(T *zone)
147 {
148 zones.insert(zone->getName(), zone);
149 return zone;
150 }
151
152 CardZoneLogic *getZone(const QString zoneName)
153 {
154 return zones.value(zoneName);
155 }
156
157 const QMap<QString, CardZoneLogic *> &getZones() const
158 {
159 return zones;
160 }
161
163 {
164 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::DECK));
165 }
166
168 {
169 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::GRAVE));
170 }
171
173 {
174 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::EXILE));
175 }
176
178 {
179 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::SIDEBOARD));
180 }
181
183 {
184 return qobject_cast<TableZoneLogic *>(zones.value(ZoneNames::TABLE));
185 }
186
188 {
189 return qobject_cast<StackZoneLogic *>(zones.value(ZoneNames::STACK));
190 }
191
193 {
194 return qobject_cast<HandZoneLogic *>(zones.value(ZoneNames::HAND));
195 }
196
197 CounterState *addCounter(const ServerInfo_Counter &counter);
198 CounterState *addCounter(int id, const QString &name, const QColor &color, int radius, int value);
199 void delCounter(int counterId);
200 void clearCounters();
201
202 QMap<int, CounterState *> getCounters() const
203 {
204 return counters;
205 }
206
211
212 void setConceded(bool _conceded);
213 bool getConceded() const
214 {
215 return conceded;
216 }
217
218 void setGameStarted();
219
220 void setDialogSemaphore(const bool _active)
221 {
222 dialogSemaphore = _active;
223 }
224
225 int getZoneId() const
226 {
227 return zoneId;
228 }
229
230 void setZoneId(int _zoneId);
231
232private:
239
240 bool active;
242
244
246 QMap<QString, CardZoneLogic *> zones;
247 QMap<int, CounterState *> counters;
248
250 QList<CardItem *> cardsToDelete;
251};
252
253class AnnotationDialog : public QInputDialog
254{
255 Q_OBJECT
256 void keyPressEvent(QKeyEvent *e) override;
257
258public:
259 explicit AnnotationDialog(QWidget *parent = nullptr) : QInputDialog(parent)
260 {
261 }
262};
263
264#endif
Definition abstract_card_item.h:20
Definition abstract_game.h:21
AnnotationDialog(QWidget *parent=nullptr)
Definition player_logic.h:259
void keyPressEvent(QKeyEvent *e) override
Definition player_actions.cpp:1416
Definition arrow_item.h:21
Definition arrow_target.h:18
Core in-memory container for card and set data.
Definition card_database.h:29
Definition card_item.h:28
Definition card_zone_logic.h:26
Definition card_zone.h:26
Definition counter_state.h:10
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:40
Definition hand_zone_logic.h:12
Definition pile_zone_logic.h:12
Definition player_actions.h:34
Definition player_event_handler.h:41
Definition player_graphics_item.h:23
Definition player_info.h:16
StackZoneLogic * getStackZone()
Definition player_logic.h:187
PileZoneLogic * getRfgZone()
Definition player_logic.h:172
AbstractGame * getGame() const
Definition player_logic.h:110
PlayerEventHandler * getPlayerEventHandler() const
Definition player_logic.h:124
int getZoneId() const
Definition player_logic.h:225
void clearCustomZonesMenu()
const QMap< QString, CardZoneLogic * > & getZones() const
Definition player_logic.h:157
PlayerInfo * getPlayerInfo() const
Definition player_logic.h:129
void activeChanged(bool active)
PileZoneLogic * getSideboardZone()
Definition player_logic.h:177
PlayerInfo * playerInfo
Definition player_logic.h:234
void addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
void arrowsCleared()
void resetTopCardMenuActions()
PileZoneLogic * getDeckZone()
Definition player_logic.h:162
void setDialogSemaphore(const bool _active)
Definition player_logic.h:220
void arrowDeleteRequested(int arrowId)
void initializeZones()
Definition player_logic.cpp:48
QMap< QString, CardZoneLogic * > zones
Definition player_logic.h:246
void rearrangeCounters()
PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
Definition player_logic.cpp:32
CounterState * addCounter(const ServerInfo_Counter &counter)
Definition player_logic.cpp:261
HandZoneLogic * getHandZone()
Definition player_logic.h:192
PlayerMenu * getPlayerMenu() const
Definition player_logic.h:134
int zoneId
Definition player_logic.h:245
const DeckList & getDeck() const
Definition player_logic.h:141
void processCardAttachment(const ServerInfo_Player &info)
Definition player_logic.cpp:205
T * addZone(T *zone)
Definition player_logic.h:146
PlayerGraphicsItem * graphicsItem
Definition player_logic.h:238
void counterRemoved(int counterId)
bool getActive() const
Definition player_logic.h:105
void setDeck(const DeckList &_deck)
Definition player_logic.cpp:254
void clearCounters()
Definition player_logic.cpp:288
GameScene * getGameScene()
Definition player_logic.cpp:339
PlayerEventHandler * playerEventHandler
Definition player_logic.h:235
PlayerGraphicsItem * getGraphicsItem()
Definition player_logic.cpp:334
void counterAdded(CounterState *state)
void arrowDeleted(int arrowId)
void setZoneId(int _zoneId)
Definition player_logic.cpp:99
QList< CardItem * > cardsToDelete
Definition player_logic.h:250
void clear()
Definition player_logic.cpp:75
bool getConceded() const
Definition player_logic.h:213
void deleteCard(CardItem *c)
Definition player_logic.cpp:243
void setActive(bool _active)
Definition player_logic.cpp:323
void addCard(CardItem *c)
Definition player_logic.cpp:238
PlayerMenu * playerMenu
Definition player_logic.h:237
PileZoneLogic * getGraveZone()
Definition player_logic.h:167
void setGameStarted()
Definition player_logic.cpp:344
CounterState * getLifeCounter() const
Definition player_logic.cpp:297
~PlayerLogic() override
Definition player_logic.cpp:61
PlayerActions * playerActions
Definition player_logic.h:236
AbstractGame * game
Definition player_logic.h:233
TableZoneLogic * getTableZone()
Definition player_logic.h:182
void delCounter(int counterId)
Definition player_logic.cpp:278
bool dialogSemaphore
Definition player_logic.h:249
QMap< int, CounterState * > getCounters() const
Definition player_logic.h:202
void arrowCreateRequested(ArrowData data)
CardZoneLogic * getZone(const QString zoneName)
Definition player_logic.h:152
QMap< int, CounterState * > counters
Definition player_logic.h:247
bool active
Definition player_logic.h:240
void deckChanged()
DeckList deck
Definition player_logic.h:243
bool clearCardsToDelete()
Definition player_logic.cpp:307
void concededChanged(int playerId, bool conceded)
void newCardAdded(AbstractCardItem *card)
bool conceded
Definition player_logic.h:241
PlayerActions * getPlayerActions() const
Definition player_logic.h:119
void updateZones()
Definition player_logic.cpp:329
void openDeckEditor(const LoadedDeck &deck)
void processPlayerInfo(const ServerInfo_Player &info)
Definition player_logic.cpp:107
void zoneIdChanged(int zoneId)
void setConceded(bool _conceded)
Definition player_logic.cpp:87
Definition player_menu.h:27
Definition stack_zone_logic.h:12
Definition tab_game.h:56
Definition table_zone_logic.h:12
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
Q_LOGGING_CATEGORY(PlayerLog, "player")
const int MAX_TOKENS_PER_DIALOG
Definition player_logic.h:62
Orchestrates lifecycle management for all player-bound UI components.
Definition arrow_data.h:10
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14