Cockatrice 2026-06-27-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
12#include "../board/arrow_data.h"
13#include "../interface/deck_loader/loaded_deck.h"
19#include "player_info.h"
20
21#include <QInputDialog>
22#include <QLoggingCategory>
23#include <QMap>
24#include <QTimer>
26#include <libcockatrice/protocol/pb/card_attributes.pb.h>
27#include <libcockatrice/protocol/pb/game_event.pb.h>
29
30inline Q_LOGGING_CATEGORY(PlayerLog, "player");
31
32namespace google
33{
34namespace protobuf
35{
36class Message;
37}
38} // namespace google
40class AbstractGame;
41class ArrowItem;
42class ArrowTarget;
43class CardDatabase;
44class CardZone;
45class CommandContainer;
46class GameCommand;
47class GameEvent;
48class PlayerInfo;
50class PlayerActions;
51class PlayerMenu;
52class QAction;
53class QMenu;
54class ServerInfo_Arrow;
55class ServerInfo_Card;
56class ServerInfo_Counter;
57class ServerInfo_Player;
58class ServerInfo_User;
59class TabGame;
60
61const int MAX_TOKENS_PER_DIALOG = 99;
62
63class PlayerLogic : public QObject
64{
65 Q_OBJECT
66
67signals:
69 void requestZoneViewToggle(PlayerLogic *player, const QString &zoneName, int numberCards, bool isReversed);
71 CardZoneLogic *zone,
72 const QList<const ServerInfo_Card *> &cardList,
73 bool withWritePermission);
78 void counterRemoved(int counterId);
82 void concededChanged(int playerId, bool conceded);
86 void arrowCreateRequested(QSharedPointer<ArrowData> data);
87 void arrowDeleteRequested(int creatorId, int arrowId);
88 void arrowDeleted(int creatorId, int arrowId);
89 void arrowsClearedLocally(); // fires on clear() and processPlayerInfo
90
91public slots:
92 void setActive(bool _active);
93 void onRequestZoneViewToggle(const QString &zoneName, int numberCards, bool isReversed);
94
95public:
96 PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent);
97 ~PlayerLogic() override;
98
99 void initializeZones();
100 void updateZones();
101 void clear();
102
103 void processPlayerInfo(const ServerInfo_Player &info);
104 void processCardAttachment(const ServerInfo_Player &info);
105
106 void addCard(CardItem *c);
107 void deleteCard(CardItem *c);
108
109 bool clearCardsToDelete();
110
111 bool getActive() const
112 {
113 return active;
114 }
115
117 {
118 return game;
119 }
120
121 [[nodiscard]] PlayerActions *getPlayerActions() const
122 {
123 return playerActions;
124 }
125
127 {
128 return playerEventHandler;
129 }
130
131 [[nodiscard]] PlayerInfo *getPlayerInfo() const
132 {
133 return playerInfo;
134 }
135
136 void setDeck(const DeckList &_deck);
137
138 [[nodiscard]] const DeckList &getDeck() const
139 {
140 return deck;
141 }
142
143 template <typename T> T *addZone(T *zone)
144 {
145 zones.insert(zone->getName(), zone);
146 return zone;
147 }
148
149 CardZoneLogic *getZone(const QString zoneName)
150 {
151 return zones.value(zoneName);
152 }
153
154 const QMap<QString, CardZoneLogic *> &getZones() const
155 {
156 return zones;
157 }
158
160 {
161 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::DECK));
162 }
163
165 {
166 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::GRAVE));
167 }
168
170 {
171 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::EXILE));
172 }
173
175 {
176 return qobject_cast<PileZoneLogic *>(zones.value(ZoneNames::SIDEBOARD));
177 }
178
180 {
181 return qobject_cast<TableZoneLogic *>(zones.value(ZoneNames::TABLE));
182 }
183
185 {
186 return qobject_cast<StackZoneLogic *>(zones.value(ZoneNames::STACK));
187 }
188
190 {
191 return qobject_cast<HandZoneLogic *>(zones.value(ZoneNames::HAND));
192 }
193
194 CounterState *addCounter(const ServerInfo_Counter &counter);
195 CounterState *addCounter(int id, const QString &name, const QColor &color, int radius, int value);
196 void delCounter(int counterId);
197 void clearCounters();
198
199 QMap<int, CounterState *> getCounters() const
200 {
201 return counters;
202 }
203
208
209 void setConceded(bool _conceded);
210 bool getConceded() const
211 {
212 return conceded;
213 }
214
215 void setGameStarted();
216
217 void setDialogSemaphore(const bool _active)
218 {
219 dialogSemaphore = _active;
220 }
221
222 int getZoneId() const
223 {
224 return zoneId;
225 }
226
227 void setZoneId(int _zoneId);
228
229private:
234
235 bool active;
237
239
241 QMap<QString, CardZoneLogic *> zones;
242 QMap<int, CounterState *> counters;
243
245 QList<CardItem *> cardsToDelete;
246};
247
248class AnnotationDialog : public QInputDialog
249{
250 Q_OBJECT
251 void keyPressEvent(QKeyEvent *e) override;
252
253public:
254 explicit AnnotationDialog(QWidget *parent = nullptr) : QInputDialog(parent)
255 {
256 }
257};
258
259#endif
Definition abstract_card_item.h:20
Definition abstract_game.h:20
AnnotationDialog(QWidget *parent=nullptr)
Definition player_logic.h:254
void keyPressEvent(QKeyEvent *e) override
Definition player_actions.cpp:1451
Definition arrow_item.h:16
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
Definition hand_zone_logic.h:12
Definition pile_zone_logic.h:12
Definition player_actions.h:36
Definition player_event_handler.h:41
Definition player_info.h:16
StackZoneLogic * getStackZone()
Definition player_logic.h:184
PileZoneLogic * getRfgZone()
Definition player_logic.h:169
AbstractGame * getGame() const
Definition player_logic.h:116
PlayerEventHandler * getPlayerEventHandler() const
Definition player_logic.h:126
int getZoneId() const
Definition player_logic.h:222
void clearCustomZonesMenu()
void onRequestZoneViewToggle(const QString &zoneName, int numberCards, bool isReversed)
Definition player_logic.cpp:320
const QMap< QString, CardZoneLogic * > & getZones() const
Definition player_logic.h:154
PlayerInfo * getPlayerInfo() const
Definition player_logic.h:131
void activeChanged(bool active)
PileZoneLogic * getSideboardZone()
Definition player_logic.h:174
PlayerInfo * playerInfo
Definition player_logic.h:231
void addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
void resetTopCardMenuActions()
PileZoneLogic * getDeckZone()
Definition player_logic.h:159
void setDialogSemaphore(const bool _active)
Definition player_logic.h:217
void initializeZones()
Definition player_logic.cpp:40
QMap< QString, CardZoneLogic * > zones
Definition player_logic.h:241
void rearrangeCounters()
PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent)
Definition player_logic.cpp:32
void requestRevealedZoneView(PlayerLogic *player, CardZoneLogic *zone, const QList< const ServerInfo_Card * > &cardList, bool withWritePermission)
CounterState * addCounter(const ServerInfo_Counter &counter)
Definition player_logic.cpp:253
HandZoneLogic * getHandZone()
Definition player_logic.h:189
int zoneId
Definition player_logic.h:240
const DeckList & getDeck() const
Definition player_logic.h:138
void processCardAttachment(const ServerInfo_Player &info)
Definition player_logic.cpp:196
T * addZone(T *zone)
Definition player_logic.h:143
void counterRemoved(int counterId)
bool getActive() const
Definition player_logic.h:111
void setDeck(const DeckList &_deck)
Definition player_logic.cpp:246
void clearCounters()
Definition player_logic.cpp:280
PlayerEventHandler * playerEventHandler
Definition player_logic.h:232
void counterAdded(CounterState *state)
void setZoneId(int _zoneId)
Definition player_logic.cpp:90
QList< CardItem * > cardsToDelete
Definition player_logic.h:245
void clear()
Definition player_logic.cpp:66
bool getConceded() const
Definition player_logic.h:210
void deleteCard(CardItem *c)
Definition player_logic.cpp:235
void setActive(bool _active)
Definition player_logic.cpp:315
void addCard(CardItem *c)
Definition player_logic.cpp:230
PileZoneLogic * getGraveZone()
Definition player_logic.h:164
void setGameStarted()
Definition player_logic.cpp:330
CounterState * getLifeCounter() const
Definition player_logic.cpp:289
void requestCardMenuUpdate(const CardItem *card)
~PlayerLogic() override
Definition player_logic.cpp:53
PlayerActions * playerActions
Definition player_logic.h:233
AbstractGame * game
Definition player_logic.h:230
TableZoneLogic * getTableZone()
Definition player_logic.h:179
void delCounter(int counterId)
Definition player_logic.cpp:270
bool dialogSemaphore
Definition player_logic.h:244
QMap< int, CounterState * > getCounters() const
Definition player_logic.h:199
CardZoneLogic * getZone(const QString zoneName)
Definition player_logic.h:149
QMap< int, CounterState * > counters
Definition player_logic.h:242
bool active
Definition player_logic.h:235
void deckChanged()
void arrowDeleted(int creatorId, int arrowId)
DeckList deck
Definition player_logic.h:238
void requestZoneViewToggle(PlayerLogic *player, const QString &zoneName, int numberCards, bool isReversed)
bool clearCardsToDelete()
Definition player_logic.cpp:299
void concededChanged(int playerId, bool conceded)
void arrowsClearedLocally()
void newCardAdded(AbstractCardItem *card)
bool conceded
Definition player_logic.h:236
PlayerActions * getPlayerActions() const
Definition player_logic.h:121
void updateZones()
Definition player_logic.cpp:325
void arrowDeleteRequested(int creatorId, int arrowId)
void arrowCreateRequested(QSharedPointer< ArrowData > data)
void openDeckEditor(const LoadedDeck &deck)
void processPlayerInfo(const ServerInfo_Player &info)
Definition player_logic.cpp:98
void zoneIdChanged(int zoneId)
void setConceded(bool _conceded)
Definition player_logic.cpp:78
Definition player_menu.h:28
Definition stack_zone_logic.h:12
Definition tab_game.h:57
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 player_actions.h:24
Q_LOGGING_CATEGORY(PlayerLog, "player")
const int MAX_TOKENS_PER_DIALOG
Definition player_logic.h:61
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14