mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Improve texts for combat in both log and window
This commit is contained in:
@@ -99,6 +99,8 @@ public class InputAttack extends InputBase {
|
||||
public final void selectButtonOK() {
|
||||
// Propaganda costs could have been paid here.
|
||||
setCurrentDefender(null); // remove highlights
|
||||
|
||||
game.getPhaseHandler().setCombat(!game.getCombat().getAttackers().isEmpty());
|
||||
game.getPhaseHandler().setPlayersPriorityPermission(false);
|
||||
Singletons.getModel().getMatch().getInput().updateObservers();
|
||||
}
|
||||
|
||||
@@ -265,17 +265,19 @@ public class ComputerUtilBlock {
|
||||
return blockers;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* sortPotentialAttackers.
|
||||
* </p>
|
||||
*
|
||||
* @param combat
|
||||
* a {@link forge.game.phase.Combat} object.
|
||||
* @return a {@link forge.CardList} object.
|
||||
*/
|
||||
|
||||
|
||||
public final static List<List<Card>> sortAttackerByDefender(Combat combat) {
|
||||
List<GameEntity> defenders = combat.getDefenders();
|
||||
final ArrayList<List<Card>> attackers = new ArrayList<List<Card>>(defenders.size());
|
||||
for (GameEntity defender : defenders) {
|
||||
attackers.add(combat.getAttackersOf(defender));
|
||||
}
|
||||
return attackers;
|
||||
}
|
||||
|
||||
public static List<Card> sortPotentialAttackers(final Player ai, final Combat combat) {
|
||||
final List<List<Card>> attackerLists = combat.sortAttackerByDefender();
|
||||
final List<List<Card>> attackerLists = sortAttackerByDefender(combat);
|
||||
final List<Card> sortedAttackers = new ArrayList<Card>();
|
||||
final List<Card> firstAttacker = attackerLists.get(0);
|
||||
|
||||
|
||||
@@ -229,26 +229,14 @@ public class Combat {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* sortAttackerByDefender.
|
||||
* </p>
|
||||
*
|
||||
* @return an array of {@link forge.CardList} objects.
|
||||
*/
|
||||
public final List<List<Card>> sortAttackerByDefender() {
|
||||
int size = this.defenders.size();
|
||||
final ArrayList<List<Card>> attackers = new ArrayList<List<Card>>(size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
attackers.add(getAttackersByDefenderSlot(i));
|
||||
}
|
||||
return attackers;
|
||||
}
|
||||
|
||||
public final List<Card> getAttackersByDefenderSlot(int slot) {
|
||||
GameEntity entity = this.defenders.get(slot);
|
||||
return this.defenderMap.get(entity);
|
||||
}
|
||||
|
||||
public final List<Card> getAttackersOf(GameEntity defender) {
|
||||
return defenderMap.get(defender);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -59,6 +59,7 @@ import forge.gui.GuiDialog;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
import forge.gui.match.controllers.CCombat;
|
||||
import forge.util.Lang;
|
||||
|
||||
|
||||
/**
|
||||
@@ -977,22 +978,18 @@ public class CombatUtil {
|
||||
// Loop through Defenders
|
||||
// Append Defending Player/Planeswalker
|
||||
final Combat combat = game.getCombat();
|
||||
final List<GameEntity> defenders = combat.getDefenders();
|
||||
final List<List<Card>> attackers = combat.sortAttackerByDefender();
|
||||
|
||||
|
||||
// Not a big fan of the triple nested loop here
|
||||
for (int def = 0; def < defenders.size(); def++) {
|
||||
List<Card> attacker = attackers.get(def);
|
||||
if ((attacker == null) || (attacker.size() == 0)) {
|
||||
for (GameEntity defender : combat.getDefenders()) {
|
||||
List<Card> attackers = combat.getAttackersOf(defender);
|
||||
if (attackers == null || attackers.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if ( sb.length() > 0 ) sb.append("\n");
|
||||
|
||||
sb.append(combat.getAttackingPlayer()).append(" declared ");
|
||||
for (final Card atk : attacker) {
|
||||
sb.append(atk).append(" ");
|
||||
}
|
||||
|
||||
sb.append("attacking ").append(defenders.get(def).toString()).append(".");
|
||||
sb.append(combat.getAttackingPlayer()).append(" declared ").append(Lang.joinHomogenous(attackers));
|
||||
sb.append(" to attack ").append(defender.toString()).append(".");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
@@ -1007,35 +1004,34 @@ public class CombatUtil {
|
||||
public static String getCombatBlockForLog(GameState game) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
List<Card> defend = null;
|
||||
|
||||
// Loop through Defenders
|
||||
// Append Defending Player/Planeswalker
|
||||
final Combat combat = game.getCombat();
|
||||
final List<GameEntity> defenders = combat.getDefenders();
|
||||
final List<List<Card>> attackers = combat.sortAttackerByDefender();
|
||||
List<Card> blockers = null;
|
||||
|
||||
|
||||
// Not a big fan of the triple nested loop here
|
||||
for (int def = 0; def < defenders.size(); def++) {
|
||||
final List<Card> list = attackers.get(def);
|
||||
for (GameEntity defender : combat.getDefenders()) {
|
||||
List<Card> attackers = combat.getAttackersOf(defender);
|
||||
if (attackers == null || attackers.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
if ( sb.length() > 0 ) sb.append("\n");
|
||||
|
||||
for (final Card attacker : list) {
|
||||
|
||||
|
||||
defend = game.getCombat().getBlockers(attacker);
|
||||
sb.append(combat.getDefenderByAttacker(attacker)).append(" assigned ");
|
||||
|
||||
if (!defend.isEmpty()) {
|
||||
// loop through blockers
|
||||
for (final Card blocker : defend) {
|
||||
sb.append(blocker).append(" ");
|
||||
}
|
||||
String controllerName = defender instanceof Card ? ((Card)defender).getController().getName() : defender.getName();
|
||||
boolean firstAttacker = true;
|
||||
for (final Card attacker : attackers) {
|
||||
if ( !firstAttacker ) sb.append("\n");
|
||||
|
||||
blockers = game.getCombat().getBlockers(attacker);
|
||||
if ( blockers.isEmpty() ) {
|
||||
sb.append(controllerName).append(" didn't block ");
|
||||
} else {
|
||||
sb.append("<nothing> ");
|
||||
sb.append(controllerName).append(" assigned ").append(Lang.joinHomogenous(blockers)).append(" to block ");
|
||||
}
|
||||
|
||||
sb.append("to block ").append(attacker).append(". ");
|
||||
} // loop through attackers
|
||||
|
||||
sb.append(attacker).append(".");
|
||||
firstAttacker = false;
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
|
||||
@@ -7,8 +7,10 @@ import forge.Command;
|
||||
import forge.GameEntity;
|
||||
import forge.game.GameState;
|
||||
import forge.game.phase.Combat;
|
||||
import forge.game.player.Player;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.match.views.VCombat;
|
||||
import forge.util.Lang;
|
||||
|
||||
/**
|
||||
* Controls the combat panel in the match UI.
|
||||
@@ -57,37 +59,34 @@ public enum CCombat implements ICDoc {
|
||||
private static String getCombatDescription(Combat combat) {
|
||||
final StringBuilder display = new StringBuilder();
|
||||
|
||||
// Loop through Defenders
|
||||
// Append Defending Player/Planeswalker
|
||||
final List<GameEntity> defenders = combat.getDefenders();
|
||||
final List<List<Card>> attackers = combat.sortAttackerByDefender();
|
||||
|
||||
// Not a big fan of the triple nested loop here
|
||||
for (int def = 0; def < defenders.size(); def++) {
|
||||
List<Card> atk = attackers.get(def);
|
||||
if ((atk == null) || (atk.size() == 0)) {
|
||||
for (GameEntity defender : combat.getDefenders()) {
|
||||
List<Card> atk = combat.getAttackersOf(defender);
|
||||
if (atk == null || atk.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (def > 0) {
|
||||
if (display.length() > 0) {
|
||||
display.append("\n");
|
||||
}
|
||||
|
||||
display.append("Defender - ");
|
||||
display.append(defenders.get(def).toString());
|
||||
display.append("\n");
|
||||
if (defender instanceof Card) {
|
||||
Player controller = ((Card) defender).getController();
|
||||
display.append(Lang.getPossesive(controller.getName())).append(" ");
|
||||
}
|
||||
|
||||
display.append(defender.getName()).append(" is attacked by:\n");
|
||||
|
||||
for (final Card c : atk) {
|
||||
// loop through attackers
|
||||
display.append("-> ");
|
||||
display.append(" > ");
|
||||
display.append(combatantToString(c)).append("\n");
|
||||
|
||||
List<Card> blockers = combat.getBlockers(c);
|
||||
|
||||
// loop through blockers
|
||||
for (final Card element : blockers) {
|
||||
display.append(" [ ");
|
||||
display.append(combatantToString(element)).append("\n");
|
||||
display.append(" < ").append(combatantToString(element)).append("\n");
|
||||
}
|
||||
} // loop through attackers
|
||||
}
|
||||
@@ -107,10 +106,11 @@ public enum CCombat implements ICDoc {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
final String name = (c.isFaceDown()) ? "Morph" : c.getName();
|
||||
|
||||
|
||||
sb.append("( ").append(c.getNetAttack()).append(" / ").append(c.getNetDefense()).append(" ) ... ");
|
||||
sb.append(name);
|
||||
sb.append(" (").append(c.getUniqueNumber()).append(") ");
|
||||
sb.append(c.getNetAttack()).append("/").append(c.getNetDefense());
|
||||
sb.append(" [").append(c.getUniqueNumber()).append("] ");
|
||||
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@@ -42,4 +42,13 @@ public class Lang {
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static String getPossesive(String name) {
|
||||
return name.endsWith("s") ? name + "'" : name + "'s";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user