Card: setChangedCardKeywords should not copy when adding to stack

This commit is contained in:
Hans Mackowiak
2023-02-12 13:09:30 +01:00
parent 007f9dc880
commit 3f7dc8db98
4 changed files with 17 additions and 6 deletions

View File

@@ -356,7 +356,7 @@ public class GameCopier {
newCard.setChangedCardTypes(c.getChangedCardTypesTable());
newCard.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable());
newCard.setChangedCardKeywords(c.getChangedCardKeywords());
newCard.setChangedCardKeywords(c.getChangedCardKeywords(), true);
newCard.setChangedCardNames(c.getChangedCardNames());
for (Table.Cell<Long, Long, List<String>> kw : c.getHiddenExtrinsicKeywordsTable().cellSet()) {

View File

@@ -268,7 +268,7 @@ public class GameAction {
// when moving to stack, copy changed card information
copied.setChangedCardColors(c.getChangedCardColorsTable());
copied.setChangedCardColorsCharacterDefining(c.getChangedCardColorsCharacterDefiningTable());
copied.setChangedCardKeywords(c.getChangedCardKeywords());
copied.setChangedCardKeywords(c.getChangedCardKeywords(), false);
copied.setChangedCardTypes(c.getChangedCardTypesTable());
copied.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable());
copied.setChangedCardNames(c.getChangedCardNames());
@@ -622,7 +622,9 @@ public class GameAction {
if (zoneTo.is(ZoneType.Stack) && cause != null && cause.isSpell() && !cause.isIntrinsic() && c.equals(cause.getHostCard())) {
if (cause.getKeyword() != null) {
if (!copied.getKeywords().contains(cause.getKeyword())) {
copied.addChangedCardKeywordsInternal(ImmutableList.of(cause.getKeyword()), null, false, game.getTimestamp(), 0, false);
copied.addChangedCardKeywordsInternal(ImmutableList.of(cause.getKeyword()), null, false, game.getNextTimestamp(), 0, false);
// update Keyword Cache
copied.updateKeywords();
}
}
}

View File

@@ -6876,10 +6876,19 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
this.changedCardTypesCharacterDefining.putAll(changedCardTypes);
}
public void setChangedCardKeywords(Table<Long, Long, KeywordsChange> changedCardKeywords) {
public void setChangedCardKeywords(Table<Long, Long, KeywordsChange> changedCardKeywords, boolean copy) {
this.changedCardKeywords.clear();
for (Table.Cell<Long, Long, KeywordsChange> entry : changedCardKeywords.cellSet()) {
this.changedCardKeywords.put(entry.getRowKey(), entry.getColumnKey(), entry.getValue().copy(this, true));
KeywordsChange result = entry.getValue();
if (copy) {
result = result.copy(this, true);
} else {
// do not copy the keywords, just update the host
for (KeywordInterface k : result.getKeywords()) {
k.setHostCard(this);
}
}
this.changedCardKeywords.put(entry.getRowKey(), entry.getColumnKey(), result);
}
}

View File

@@ -287,7 +287,7 @@ public final class CardUtil {
newCopy.setChangedCardColors(in.getChangedCardColorsTable());
newCopy.setChangedCardColorsCharacterDefining(in.getChangedCardColorsCharacterDefiningTable());
newCopy.setChangedCardKeywords(in.getChangedCardKeywords());
newCopy.setChangedCardKeywords(in.getChangedCardKeywords(), true);
newCopy.setChangedCardTypes(in.getChangedCardTypesTable());
newCopy.setChangedCardTypesCharacterDefining(in.getChangedCardTypesCharacterDefiningTable());
newCopy.setChangedCardNames(in.getChangedCardNames());