mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-05 09:33:25 -08:00
* [Refactor] Move game logic into libcockatrice_game * [Refactor] Include card_state.h in player_actions.h * [Game] Inject settings providers into libcockatrice_game, drop Widgets * [Game] Follow base rename to createCardRequested after rebase * [Game] Drop unused CardItem forward declaration * [Game] Fix includes after moving game logic into libcockatrice_game --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
43 lines
1.5 KiB
C++
43 lines
1.5 KiB
C++
#ifndef COCKATRICE_CARD_ZONE_ALGORITHMS_H
|
|
#define COCKATRICE_CARD_ZONE_ALGORITHMS_H
|
|
|
|
namespace CardZoneAlgorithms
|
|
{
|
|
|
|
/**
|
|
* Shared insertion logic for zones where cards follow the standard pattern:
|
|
* clamp index, insert, clear identity if contents unknown, reset state.
|
|
* Visibility and parenting are handled by the graphics zone's onCardAdded().
|
|
*
|
|
* Zones with different post-add behavior (signal connections, positional resets,
|
|
* hidden cards, or coordinate-based placement) should NOT use this — implement
|
|
* addCardImpl directly instead.
|
|
*
|
|
* Template parameters allow testing with lightweight mocks that avoid Qt graphics
|
|
* dependencies.
|
|
*
|
|
* @tparam CardList Must provide: size() -> int, insert(int, CardType*),
|
|
* getContentsKnown() -> bool
|
|
* @tparam CardType Must provide: setId(int), setCardRef(CardRefType), resetState(bool)
|
|
* @param keepAnnotations Forwarded to card->resetState(). Stack-like zones preserve
|
|
* annotations across zone transitions; hand-like zones clear them.
|
|
*/
|
|
template <typename CardList, typename CardType>
|
|
void addCardToList(CardList &cards, CardType *card, int x, bool keepAnnotations)
|
|
{
|
|
if (x < 0 || x >= cards.size()) {
|
|
x = static_cast<int>(cards.size());
|
|
}
|
|
cards.insert(x, card);
|
|
|
|
if (!cards.getContentsKnown()) {
|
|
card->setId(-1);
|
|
card->setCardRef({});
|
|
}
|
|
|
|
card->resetState(keepAnnotations);
|
|
}
|
|
|
|
} // namespace CardZoneAlgorithms
|
|
|
|
#endif // COCKATRICE_CARD_ZONE_ALGORITHMS_H
|