Cockatrice 2026-09-01-Development-3.1.0-beta.10
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#include "player_manager.h"
21
22#include <QInputDialog>
23#include <QLoggingCategory>
24#include <QMap>
25#include <QTimer>
27#include <libcockatrice/protocol/pb/card_attributes.pb.h>
28#include <libcockatrice/protocol/pb/game_event.pb.h>
30
31inline Q_LOGGING_CATEGORY(PlayerLog, "player");
32
33namespace google
34{
35namespace protobuf
36{
37class Message;
38}
39} // namespace google
41class AbstractGame;
42class ArrowItem;
43class ArrowTarget;
44class CardDatabase;
45class CardZone;
47class GameCommand;
48class GameEvent;
49class PlayerInfo;
51class PlayerActions;
52class PlayerMenu;
53class QAction;
54class QMenu;
56class ServerInfo_Card;
59class ServerInfo_User;
60class TabGame;
61
62const int MAX_TOKENS_PER_DIALOG = 99;
63
64class PlayerLogic : public QObject
65{
66 Q_OBJECT
67
68signals:
70 void requestZoneViewToggle(PlayerLogic *player, const QString &zoneName, int numberCards, bool isReversed);
72 CardZoneLogic *zone,
73 const QList<const ServerInfo_Card *> &cardList,
74 bool withWritePermission);
81 void counterRemoved(int counterId);
85 void concededChanged(int playerId, bool conceded);
89 void arrowCreateRequested(QSharedPointer<ArrowData> data);
90 void arrowDeleteRequested(int creatorId, int arrowId);
91 void arrowDeleted(int creatorId, int arrowId);
92 void arrowsClearedLocally(); // fires on clear() and processPlayerInfo
93
94public slots:
95 void setActive(bool _active);
96 void onRequestZoneViewToggle(const QString &zoneName, int numberCards, bool isReversed);
97
98public:
99 PlayerLogic(const ServerInfo_User &info, int _id, bool _local, bool _judge, AbstractGame *_parent);
100 ~PlayerLogic() override;
101
102 void initializeZones();
103 void updateZones();
104 void clear();
105
106 void processPlayerInfo(const ServerInfo_Player &info);
108
109 void addCard(CardItem *c);
110 void deleteCard(CardItem *c);
111
112 bool clearCardsToDelete();
113
114 bool getActive() const
115 {
116 return active;
117 }
118
120 {
121 return game;
122 }
123
124 [[nodiscard]] PlayerActions *getPlayerActions() const
125 {
126 return playerActions;
127 }
128
130 {
131 return playerEventHandler;
132 }
133
134 [[nodiscard]] PlayerInfo *getPlayerInfo() const
135 {
136 return playerInfo;
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
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
234 {
235 return remotePlaymatCard;
236 }
238 {
239 return remotePlaymatParams;
240 }
242 {
243 return hasRemotePlaymat;
244 }
245
246private:
251
252 bool active;
254
256
258 QMap<QString, CardZoneLogic *> zones;
259 QMap<int, CounterState *> counters;
260
262 QList<CardItem *> cardsToDelete;
263
264 // Playmat from player properties (for opponent display)
267 bool hasRemotePlaymat = false;
268};
269
270class AnnotationDialog : public QInputDialog
271{
272 Q_OBJECT
273 void keyPressEvent(QKeyEvent *e) override;
274
275public:
276 explicit AnnotationDialog(QWidget *parent = nullptr) : QInputDialog(parent)
277 {
278 }
279};
280
281#endif
Definition abstract_card_item.h:21
Definition abstract_game.h:20
AnnotationDialog(QWidget *parent=nullptr)
Definition player_logic.h:276
void keyPressEvent(QKeyEvent *e) override
Definition player_actions.cpp:1455
Definition arrow_item.h:20
Definition arrow_target.h:18
Core in-memory container for card and set data.
Definition card_database.h:30
Definition card_item.h:27
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
Applies player-specific game events and emits corresponding log signals.
Definition player_event_handler.h:67
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:119
PlayerEventHandler * getPlayerEventHandler() const
Definition player_logic.h:129
int getZoneId() const
Definition player_logic.h:225
void clearCustomZonesMenu()
void onRequestZoneViewToggle(const QString &zoneName, int numberCards, bool isReversed)
Definition player_logic.cpp:336
const QMap< QString, CardZoneLogic * > & getZones() const
Definition player_logic.h:157
PlayerInfo * getPlayerInfo() const
Definition player_logic.h:134
void activeChanged(bool active)
PileZoneLogic * getSideboardZone()
Definition player_logic.h:177
PlayerInfo * playerInfo
Definition player_logic.h:248
void addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
void setPlaymatFromProperties(const ServerInfo_PlayerProperties &props)
Definition player_logic.cpp:253
void resetTopCardMenuActions()
PileZoneLogic * getDeckZone()
Definition player_logic.h:162
void setDialogSemaphore(const bool _active)
Definition player_logic.h:220
bool hasRemotePlaymat
Definition player_logic.h:267
void initializeZones()
Definition player_logic.cpp:40
QMap< QString, CardZoneLogic * > zones
Definition player_logic.h:258
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)
void playmatChanged()
Emitted when the remote playmat (card/params) is updated from player properties.
CounterState * addCounter(const ServerInfo_Counter &counter)
Definition player_logic.cpp:269
HandZoneLogic * getHandZone()
Definition player_logic.h:192
PlaymatParams remotePlaymatParams
Definition player_logic.h:266
int zoneId
Definition player_logic.h:257
const DeckList & getDeck() const
Definition player_logic.h:141
void processCardAttachment(const ServerInfo_Player &info)
Definition player_logic.cpp:196
T * addZone(T *zone)
Definition player_logic.h:146
void counterRemoved(int counterId)
bool getActive() const
Definition player_logic.h:114
void setDeck(const DeckList &_deck)
Definition player_logic.cpp:246
void clearCounters()
Definition player_logic.cpp:296
PlayerEventHandler * playerEventHandler
Definition player_logic.h:249
void counterAdded(CounterState *state)
void setZoneId(int _zoneId)
Definition player_logic.cpp:90
QList< CardItem * > cardsToDelete
Definition player_logic.h:262
void clear()
Definition player_logic.cpp:66
bool getConceded() const
Definition player_logic.h:213
void deleteCard(CardItem *c)
Definition player_logic.cpp:235
void setActive(bool _active)
Definition player_logic.cpp:331
void addCard(CardItem *c)
Definition player_logic.cpp:230
PileZoneLogic * getGraveZone()
Definition player_logic.h:167
void setGameStarted()
Definition player_logic.cpp:346
CounterState * getLifeCounter() const
Definition player_logic.cpp:305
void requestCardMenuUpdate(const CardItem *card)
~PlayerLogic() override
Definition player_logic.cpp:53
CardRef remotePlaymatCard
Definition player_logic.h:265
PlayerActions * playerActions
Definition player_logic.h:250
AbstractGame * game
Definition player_logic.h:247
TableZoneLogic * getTableZone()
Definition player_logic.h:182
void delCounter(int counterId)
Definition player_logic.cpp:286
bool getHasRemotePlaymat() const
Definition player_logic.h:241
bool dialogSemaphore
Definition player_logic.h:261
QMap< int, CounterState * > getCounters() const
Definition player_logic.h:202
CardZoneLogic * getZone(const QString zoneName)
Definition player_logic.h:152
QMap< int, CounterState * > counters
Definition player_logic.h:259
const CardRef & getRemotePlaymatCard() const
Definition player_logic.h:233
bool active
Definition player_logic.h:252
void deckChanged()
void arrowDeleted(int creatorId, int arrowId)
DeckList deck
Definition player_logic.h:255
void requestZoneViewToggle(PlayerLogic *player, const QString &zoneName, int numberCards, bool isReversed)
bool clearCardsToDelete()
Definition player_logic.cpp:315
void concededChanged(int playerId, bool conceded)
void arrowsClearedLocally()
void newCardAdded(AbstractCardItem *card)
bool conceded
Definition player_logic.h:253
PlayerActions * getPlayerActions() const
Definition player_logic.h:124
void updateZones()
Definition player_logic.cpp:341
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)
const PlaymatParams & getRemotePlaymatParams() const
Definition player_logic.h:237
void setConceded(bool _conceded)
Definition player_logic.cpp:78
Definition player_menu.h:30
Definition stack_zone_logic.h:12
Definition tab_game.h:59
Definition table_zone_logic.h:12
static QString cardList(const QList< CommanderSpellbookCardResult > &cards, int max=5)
Definition commander_spellbook_bracket_explainer.cpp:3
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
Player-scoped game event handler.
Q_LOGGING_CATEGORY(PlayerLog, "player")
const int MAX_TOKENS_PER_DIALOG
Definition player_logic.h:62
Definition card_ref.h:14
Definition commands.proto:7
Definition game_commands.proto:4
Definition game_event.proto:4
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
Positioning parameters for a playmat card image.
Definition playmat_params.h:18
Definition serverinfo_arrow.proto:3
Definition serverinfo_card.proto:5
Definition serverinfo_counter.proto:3
Definition serverinfo_playerproperties.proto:3
Definition serverinfo_player.proto:6
Definition serverinfo_user.proto:2
Definition color.proto:4