mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-06 01:53:25 -08:00
[Refactor] Retype card containers and zone logic onto CardState (#7434)
* [Refactor] Retype card containers and zone logic onto CardState * [Game] Restore attach bookkeeping via CardItem and repaint on state change * [Refactor] Give custom zones a hidden graphics owner Custom PileZoneLogic zones had no CardZone, so moving a card into one left the CardItem drawn at its old spot. Create a hidden PileZone in onCustomZoneAdded so cards are reparented and hidden. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
5d0d466930
commit
65e9f1b370
33 changed files with 232 additions and 159 deletions
|
|
@ -177,6 +177,22 @@ void PlayerGraphicsItem::initializeZones()
|
|||
|
||||
void PlayerGraphicsItem::onCustomZoneAdded(QString customZoneName)
|
||||
{
|
||||
// Custom zones have no board view, but their cards still need a graphics owner.
|
||||
// Without one, PileZone::onCardAdded never runs and cards moved from the table
|
||||
// or hand into a custom zone stay drawn at their old spot. Give them a hidden
|
||||
// pile zone so added cards are reparented to (0, 0) and hidden.
|
||||
CardZoneLogic *logic = player->getZone(customZoneName);
|
||||
if (auto *pileLogic = qobject_cast<PileZoneLogic *>(logic)) {
|
||||
auto *hiddenZone = new PileZone(pileLogic, this);
|
||||
hiddenZone->setVisible(false);
|
||||
hiddenZone->setPos(0, 0);
|
||||
zoneGraphicsItems.insert(customZoneName, hiddenZone);
|
||||
// Hide any cards that arrived before the graphics item existed.
|
||||
for (CardState *state : pileLogic->getCards()) {
|
||||
hiddenZone->onCardAdded(state);
|
||||
}
|
||||
return;
|
||||
}
|
||||
zoneGraphicsItems.insert(customZoneName, nullptr); // Custom zone view goes here, if we ever implement it.
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue