/** * @file player_graphics_item.h * @ingroup GameGraphicsPlayers */ //! \todo Document this file. #ifndef COCKATRICE_PLAYER_GRAPHICS_ITEM_H #define COCKATRICE_PLAYER_GRAPHICS_ITEM_H #include "../../game/player/player_logic.h" #include "../board/abstract_counter.h" #include "../game_scene.h" #include class HandZone; class PileZone; class PlayerDialogs; class PlayerMenu; class PlayerTarget; class StackZone; class TableZone; class ZoneViewZone; class PlayerGraphicsItem : public QGraphicsObject { Q_OBJECT public: enum { Type = typeOther }; int type() const override { return Type; } static constexpr int counterAreaWidth = 55; explicit PlayerGraphicsItem(PlayerLogic *player); void initializeZones(); [[nodiscard]] QRectF boundingRect() const override; qreal getMinimumWidth() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void processSceneSizeChange(int newPlayerWidth); void setMirrored(bool _mirrored); bool getMirrored() const { return mirrored; } GameScene *getGameScene() const { return static_cast(scene()); } PlayerLogic *getLogic() const { return player; } [[nodiscard]] PlayerMenu *getPlayerMenu() const { return playerMenu; } PlayerArea *getPlayerArea() const { return playerArea; } PlayerTarget *getPlayerTarget() const { return playerTarget; } CardZone *getZoneGraphicsItem(const QString &name) const { return zoneGraphicsItems.value(name, nullptr); } [[nodiscard]] PileZone *getDeckZoneGraphicsItem() const { return deckZoneGraphicsItem; } [[nodiscard]] PileZone *getSideboardZoneGraphicsItem() const { return sideboardGraphicsItem; } [[nodiscard]] PileZone *getGraveyardZoneGraphicsItem() const { return graveyardZoneGraphicsItem; } [[nodiscard]] PileZone *getRfgZoneGraphicsItem() const { return rfgZoneGraphicsItem; } [[nodiscard]] TableZone *getTableZoneGraphicsItem() const { return tableZoneGraphicsItem; } [[nodiscard]] StackZone *getStackZoneGraphicsItem() const { return stackZoneGraphicsItem; } [[nodiscard]] HandZone *getHandZoneGraphicsItem() const { return handZoneGraphicsItem; } public slots: void onPlayerActiveChanged(bool _active); void onCustomZoneAdded(QString customZoneName); void onCounterAdded(CounterState *state); void onCounterRemoved(int counterId); void rearrangeCounters(); void retranslateUi(); signals: void sizeChanged(); void playerCountChanged(); void mirroredChanged(bool isMirrored); void cardInfoRequested(const CardRef &cardRef); private: PlayerLogic *player; PlayerMenu *playerMenu; PlayerDialogs *playerDialogs; PlayerArea *playerArea; PlayerTarget *playerTarget; QMap counterWidgets; QMap zoneGraphicsItems; PileZone *deckZoneGraphicsItem; PileZone *sideboardGraphicsItem; PileZone *graveyardZoneGraphicsItem; PileZone *rfgZoneGraphicsItem; TableZone *tableZoneGraphicsItem; StackZone *stackZoneGraphicsItem; HandZone *handZoneGraphicsItem; QRectF bRect; bool mirrored; bool handVisible = false; private slots: void updateBoundingRect(); void rearrangeZones(); }; #endif // COCKATRICE_PLAYER_GRAPHICS_ITEM_H