mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-14 19:18:55 -07:00
[Card] Add facedown property to CardRelation
This commit is contained in:
parent
f28ede7ae3
commit
66f1756242
6 changed files with 43 additions and 12 deletions
|
|
@ -1017,8 +1017,9 @@ void PlayerActions::actCreateAllRelatedCards()
|
|||
if (!cardRelationAll->getDoesAttach() && !cardRelationAll->getIsVariable()) {
|
||||
dbName = cardRelationAll->getName();
|
||||
bool persistent = cardRelationAll->getIsPersistent();
|
||||
bool faceDown = cardRelationAll->getIsFaceDown();
|
||||
for (int i = 0; i < cardRelationAll->getDefaultCount(); ++i) {
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent);
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent, faceDown);
|
||||
}
|
||||
++tokensTypesCreated;
|
||||
if (tokensTypesCreated == 1) {
|
||||
|
|
@ -1033,8 +1034,9 @@ void PlayerActions::actCreateAllRelatedCards()
|
|||
if (!cardRelationNotExcluded->getDoesAttach() && !cardRelationNotExcluded->getIsVariable()) {
|
||||
dbName = cardRelationNotExcluded->getName();
|
||||
bool persistent = cardRelationNotExcluded->getIsPersistent();
|
||||
bool faceDown = cardRelationNotExcluded->getIsFaceDown();
|
||||
for (int i = 0; i < cardRelationNotExcluded->getDefaultCount(); ++i) {
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent);
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent, faceDown);
|
||||
}
|
||||
++tokensTypesCreated;
|
||||
if (tokensTypesCreated == 1) {
|
||||
|
|
@ -1072,6 +1074,7 @@ bool PlayerActions::createRelatedFromRelation(const CardItem *sourceCard,
|
|||
|
||||
const QString dbName = cardRelation->getName();
|
||||
const bool persistent = cardRelation->getIsPersistent();
|
||||
const bool faceDown = cardRelation->getIsFaceDown();
|
||||
|
||||
// Variable relations always use DoesNotAttach, regardless of the count the user
|
||||
// entered.
|
||||
|
|
@ -1080,7 +1083,7 @@ bool PlayerActions::createRelatedFromRelation(const CardItem *sourceCard,
|
|||
return false;
|
||||
}
|
||||
for (int i = 0; i < variableCount; ++i) {
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent);
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent, faceDown);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1089,7 +1092,7 @@ bool PlayerActions::createRelatedFromRelation(const CardItem *sourceCard,
|
|||
|
||||
if (count > 1) {
|
||||
for (int i = 0; i < count; ++i) {
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent);
|
||||
createCard(sourceCard, dbName, CardRelationType::DoesNotAttach, persistent, faceDown);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1109,7 +1112,7 @@ bool PlayerActions::createRelatedFromRelation(const CardItem *sourceCard,
|
|||
playCardToTable(sourceCard, false);
|
||||
}
|
||||
|
||||
createCard(sourceCard, dbName, attachType, persistent);
|
||||
createCard(sourceCard, dbName, attachType, persistent, faceDown);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1136,7 +1139,8 @@ void PlayerActions::onRelatedCardCreated(const CardItem *sourceCard, const CardR
|
|||
void PlayerActions::createCard(const CardItem *sourceCard,
|
||||
const QString &dbCardName,
|
||||
CardRelationType attachType,
|
||||
bool persistent)
|
||||
bool persistent,
|
||||
bool faceDown)
|
||||
{
|
||||
CardInfoPtr cardInfo = CardDatabaseManager::query()->getCardInfo(dbCardName);
|
||||
|
||||
|
|
@ -1171,6 +1175,7 @@ void PlayerActions::createCard(const CardItem *sourceCard,
|
|||
cmd.set_destroy_on_zone_change(!persistent);
|
||||
cmd.set_x(gridPoint.x());
|
||||
cmd.set_y(gridPoint.y());
|
||||
cmd.set_face_down(faceDown);
|
||||
|
||||
ExactCard relatedCard =
|
||||
CardDatabaseManager::query()->getCardFromSameSet(cardInfo->getName(), sourceCard->getCard().getPrinting());
|
||||
|
|
|
|||
|
|
@ -240,7 +240,8 @@ private:
|
|||
void createCard(const CardItem *sourceCard,
|
||||
const QString &dbCardName,
|
||||
CardRelationType attach = CardRelationType::DoesNotAttach,
|
||||
bool persistent = false);
|
||||
bool persistent = false,
|
||||
bool faceDown = false);
|
||||
|
||||
void playSelectedCards(QList<CardItem *> selectedCards, bool faceDown = false);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,7 +85,8 @@ void CardDatabase::refreshCachedReverseRelatedCards()
|
|||
for (auto *rel : card->getReverseRelatedCards()) {
|
||||
if (auto target = cards.value(rel->getName())) {
|
||||
auto *newRel = new CardRelation(card->getName(), rel->getAttachType(), rel->getIsCreateAllExclusion(),
|
||||
rel->getIsVariable(), rel->getDefaultCount(), rel->getIsPersistent());
|
||||
rel->getIsVariable(), rel->getDefaultCount(), rel->getIsPersistent(),
|
||||
rel->getIsFaceDown());
|
||||
target->addReverseRelatedCards2Me(newRel);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -329,6 +329,7 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml)
|
|||
bool exclude = false;
|
||||
bool variable = false;
|
||||
bool persistent = false;
|
||||
bool facedown = false;
|
||||
int count = 1;
|
||||
QXmlStreamAttributes attrs = xml.attributes();
|
||||
QString cardName = xml.readElementText(QXmlStreamReader::IncludeChildElements);
|
||||
|
|
@ -360,7 +361,12 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml)
|
|||
persistent = true;
|
||||
}
|
||||
|
||||
auto *relation = new CardRelation(cardName, attachType, exclude, variable, count, persistent);
|
||||
if (attrs.hasAttribute("facedown")) {
|
||||
facedown = true;
|
||||
}
|
||||
|
||||
auto *relation =
|
||||
new CardRelation(cardName, attachType, exclude, variable, count, persistent, facedown);
|
||||
if (xmlName == "reverse-related") {
|
||||
reverseRelatedCards << relation;
|
||||
} else {
|
||||
|
|
@ -510,6 +516,9 @@ static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfoPtr &in
|
|||
if (i->getIsPersistent()) {
|
||||
xml.writeAttribute("persistent", "persistent");
|
||||
}
|
||||
if (i->getIsFaceDown()) {
|
||||
xml.writeAttribute("facedown", "facedown");
|
||||
}
|
||||
if (i->getIsVariable()) {
|
||||
if (1 == i->getDefaultCount()) {
|
||||
xml.writeAttribute("count", "x");
|
||||
|
|
|
|||
|
|
@ -7,8 +7,10 @@ CardRelation::CardRelation(const QString &_name,
|
|||
bool _isCreateAllExclusion,
|
||||
bool _isVariableCount,
|
||||
int _defaultCount,
|
||||
bool _isPersistent)
|
||||
bool _isPersistent,
|
||||
bool _isFaceDown)
|
||||
: name(_name), attachType(_attachType), isCreateAllExclusion(_isCreateAllExclusion),
|
||||
isVariableCount(_isVariableCount), defaultCount(_defaultCount), isPersistent(_isPersistent)
|
||||
isVariableCount(_isVariableCount), defaultCount(_defaultCount), isPersistent(_isPersistent),
|
||||
isFaceDown(_isFaceDown)
|
||||
{
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@ private:
|
|||
bool isVariableCount; ///< True if the number of creations is variable.
|
||||
int defaultCount; ///< Default number of cards created or involved.
|
||||
bool isPersistent; ///< True if this relation persists (i.e. is not destroyed) on zone change.
|
||||
bool isFaceDown; ///< True if this relation creates the tokens facedown
|
||||
|
||||
public:
|
||||
/**
|
||||
|
|
@ -42,13 +43,15 @@ public:
|
|||
* @param _isVariableCount Whether the count is variable.
|
||||
* @param _defaultCount Default number for creations or transformations.
|
||||
* @param _isPersistent Whether the relation persists across zone changes.
|
||||
* @param _isFaceDown Whether the relation creates the token face down
|
||||
*/
|
||||
explicit CardRelation(const QString &_name = QString(),
|
||||
CardRelationType _attachType = CardRelationType::DoesNotAttach,
|
||||
bool _isCreateAllExclusion = false,
|
||||
bool _isVariableCount = false,
|
||||
int _defaultCount = 1,
|
||||
bool _isPersistent = false);
|
||||
bool _isPersistent = false,
|
||||
bool _isFaceDown = false);
|
||||
|
||||
/**
|
||||
* @brief Returns the name of the related card.
|
||||
|
|
@ -151,6 +154,16 @@ public:
|
|||
{
|
||||
return isPersistent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns whether the relation creates the token face-down.
|
||||
*
|
||||
* @return True if persistent, false otherwise.
|
||||
*/
|
||||
[[nodiscard]] bool getIsFaceDown() const
|
||||
{
|
||||
return isFaceDown;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // COCKATRICE_CARD_RELATION_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue