mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Make the Okk combat checks a little bit more efficient.
This commit is contained in:
@@ -694,9 +694,9 @@ public class CombatUtil {
|
|||||||
|
|
||||||
// Creatures that aren't allowed to block unless certain restrictions are met.
|
// Creatures that aren't allowed to block unless certain restrictions are met.
|
||||||
for (final Card blocker : blockers) {
|
for (final Card blocker : blockers) {
|
||||||
if (blocker.hasKeyword("CARDNAME can't attack or block alone.") && blockers.size() < 2) {
|
if (blockers.size() < 2 && blocker.hasKeyword("CARDNAME can't attack or block alone.")) {
|
||||||
return String.format("%s can't block alone.", blocker);
|
return String.format("%s can't block alone.", blocker);
|
||||||
} else if (blocker.hasKeyword("CARDNAME can't block unless at least two other creatures block.") && blockers.size() < 3) {
|
} else if (blockers.size() < 3 && blocker.hasKeyword("CARDNAME can't block unless at least two other creatures block.")) {
|
||||||
return String.format("%s can't block unless at least two other creatures block.", blocker);
|
return String.format("%s can't block unless at least two other creatures block.", blocker);
|
||||||
} else if (blocker.hasKeyword("CARDNAME can't block unless a creature with greater power also blocks.")) {
|
} else if (blocker.hasKeyword("CARDNAME can't block unless a creature with greater power also blocks.")) {
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
|
|||||||
@@ -602,29 +602,25 @@ public class PhaseHandler implements java.io.Serializable {
|
|||||||
reachedSteadyState = true;
|
reachedSteadyState = true;
|
||||||
List<Card> remainingBlockers = CardLists.filterControlledBy(combat.getAllBlockers(), p);
|
List<Card> remainingBlockers = CardLists.filterControlledBy(combat.getAllBlockers(), p);
|
||||||
for (Card c : remainingBlockers) {
|
for (Card c : remainingBlockers) {
|
||||||
int minBlockers = Integer.MIN_VALUE;
|
boolean removeBlocker = false;
|
||||||
if (c.hasKeyword("CARDNAME can't attack or block alone.")) {
|
if (remainingBlockers.size() < 2 && c.hasKeyword("CARDNAME can't attack or block alone.")) {
|
||||||
minBlockers = 2;
|
removeBlocker = true;
|
||||||
} else if (c.hasKeyword("CARDNAME can't block unless at least two other creatures block.")) {
|
} else if (remainingBlockers.size() < 3 && c.hasKeyword("CARDNAME can't block unless at least two other creatures block.")) {
|
||||||
minBlockers = 3;
|
removeBlocker = true;
|
||||||
}
|
|
||||||
if (remainingBlockers.size() < minBlockers) {
|
|
||||||
combat.undoBlockingAssignment(c);
|
|
||||||
reachedSteadyState = false;
|
|
||||||
} else if (c.hasKeyword("CARDNAME can't block unless a creature with greater power also blocks.")) {
|
} else if (c.hasKeyword("CARDNAME can't block unless a creature with greater power also blocks.")) {
|
||||||
boolean found = false;
|
removeBlocker = true;
|
||||||
int power = c.getNetPower();
|
int power = c.getNetPower();
|
||||||
// Note: This is O(n^2), but there shouldn't generally be many creatures with the above keyword.
|
// Note: This is O(n^2), but there shouldn't generally be many creatures with the above keyword.
|
||||||
for (Card c2 : remainingBlockers) {
|
for (Card c2 : remainingBlockers) {
|
||||||
if (c2.getNetPower() > power) {
|
if (c2.getNetPower() > power) {
|
||||||
found = true;
|
removeBlocker = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
}
|
||||||
combat.undoBlockingAssignment(c);
|
if (removeBlocker) {
|
||||||
reachedSteadyState = false;
|
combat.undoBlockingAssignment(c);
|
||||||
}
|
reachedSteadyState = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (!reachedSteadyState);
|
} while (!reachedSteadyState);
|
||||||
|
|||||||
Reference in New Issue
Block a user