Merge branch 'fix_mutated_flip' into 'master'

Fix bug that can't flip or transform when mutated

See merge request core-developers/forge!4782
This commit is contained in:
Michael Kamensky
2021-05-28 15:34:27 +00:00
2 changed files with 12 additions and 6 deletions

View File

@@ -610,6 +610,10 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
return false;
}
// Need to remove mutated states, otherwise the changeToState() will fail
if (hasMergedCard()) {
removeMutatedStates();
}
CardCollectionView cards = hasMergedCard() ? getMergedCards() : new CardCollection(this);
boolean retResult = false;
for (final Card c : cards) {
@@ -621,8 +625,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
boolean result = c.changeToState(c.backside ? CardStateName.Transformed : CardStateName.Original);
retResult = retResult || result;
}
if (retResult && hasMergedCard()) {
removeMutatedStates();
if (hasMergedCard()) {
rebuildMutatedStates(cause);
}
@@ -643,6 +646,10 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
return false;
}
// Need to remove mutated states, otherwise the changeToState() will fail
if (hasMergedCard()) {
removeMutatedStates();
}
CardCollectionView cards = hasMergedCard() ? getMergedCards() : new CardCollection(this);
boolean retResult = false;
for (final Card c : cards) {
@@ -653,8 +660,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
boolean result = c.changeToState(CardStateName.Flipped);
retResult = retResult || result;
}
if (retResult && hasMergedCard()) {
removeMutatedStates();
if (hasMergedCard()) {
rebuildMutatedStates(cause);
game.getTriggerHandler().clearActiveTriggers(this, null);
game.getTriggerHandler().registerActiveTrigger(this, false);

View File

@@ -852,8 +852,8 @@ public class CardFactory {
final CardCloneStates result = new CardCloneStates(top, sa);
result.put(state, ret);
// For transformed, melded or MDFC card, also copy the original state to avoid crash
if (state == CardStateName.Transformed || state == CardStateName.Meld || state == CardStateName.Modal) {
// For face down, flipped, transformed, melded or MDFC card, also copy the original state to avoid crash
if (state != CardStateName.Original) {
final CardState ret1 = new CardState(card, CardStateName.Original);
ret1.copyFrom(top.getState(CardStateName.Original, true), false);
result.put(CardStateName.Original, ret1);