mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Fix so proper zones revealed when activating targeted ability
This commit is contained in:
@@ -394,6 +394,17 @@ public class GuiDesktop implements IGuiBase {
|
|||||||
return FControl.instance.getObservedGame();
|
return FControl.instance.getObservedGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean openZone(ZoneType zoneType, Set<Player> players) {
|
||||||
|
switch (zoneType) {
|
||||||
|
case Battlefield:
|
||||||
|
case Hand:
|
||||||
|
return true; //don't actually need to open anything, but indicate that zone can be opened
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {
|
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {
|
||||||
CMatchUI.SINGLETON_INSTANCE.updateZones(zonesToUpdate);
|
CMatchUI.SINGLETON_INSTANCE.updateZones(zonesToUpdate);
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ import forge.item.PaperCard;
|
|||||||
import forge.match.input.InputQueue;
|
import forge.match.input.InputQueue;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
|
import forge.screens.match.views.VPlayerPanel;
|
||||||
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
||||||
|
import forge.screens.match.views.VPlayerPanel.InfoTab;
|
||||||
import forge.screens.match.winlose.ViewWinLose;
|
import forge.screens.match.winlose.ViewWinLose;
|
||||||
import forge.screens.quest.QuestMenu;
|
import forge.screens.quest.QuestMenu;
|
||||||
import forge.sound.AudioClip;
|
import forge.sound.AudioClip;
|
||||||
@@ -324,6 +326,28 @@ public class GuiMobile implements IGuiBase {
|
|||||||
return FControl.getGame();
|
return FControl.getGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean openZone(ZoneType zoneType, Set<Player> players) {
|
||||||
|
switch (zoneType) {
|
||||||
|
case Battlefield:
|
||||||
|
return true; //Battlefield is always open
|
||||||
|
default:
|
||||||
|
//open zone tab for given zone if needed
|
||||||
|
boolean result = true;
|
||||||
|
for (Player player : players) {
|
||||||
|
VPlayerPanel playerPanel = FControl.getPlayerPanel(player);
|
||||||
|
InfoTab zoneTab = playerPanel.getZoneTab(zoneType);
|
||||||
|
if (zoneTab == null) {
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
playerPanel.setSelectedTab(zoneTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {
|
public void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate) {
|
||||||
FControl.updateZones(zonesToUpdate);
|
FControl.updateZones(zonesToUpdate);
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public class VPlayerPanel extends FContainer {
|
|||||||
setSelectedTab(zoneTabs.get(zoneType));
|
setSelectedTab(zoneTabs.get(zoneType));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSelectedTab(InfoTab selectedTab0) {
|
public void setSelectedTab(InfoTab selectedTab0) {
|
||||||
if (selectedTab == selectedTab0) {
|
if (selectedTab == selectedTab0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public interface IGuiBase {
|
|||||||
void enableOverlay();
|
void enableOverlay();
|
||||||
void disableOverlay();
|
void disableOverlay();
|
||||||
void finishGame();
|
void finishGame();
|
||||||
|
boolean openZone(ZoneType zoneType, Set<Player> players);
|
||||||
void updateStack();
|
void updateStack();
|
||||||
void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate);
|
void updateZones(List<Pair<Player, ZoneType>> zonesToUpdate);
|
||||||
void updateCards(Set<Card> cardsToUpdate);
|
void updateCards(Set<Card> cardsToUpdate);
|
||||||
|
|||||||
@@ -20,10 +20,12 @@ package forge.player;
|
|||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.GuiBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameObject;
|
import forge.game.GameObject;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.spellability.SpellAbilityStackInstance;
|
import forge.game.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.spellability.TargetRestrictions;
|
import forge.game.spellability.TargetRestrictions;
|
||||||
@@ -34,7 +36,9 @@ import forge.util.Aggregates;
|
|||||||
import forge.util.gui.SGuiChoose;
|
import forge.util.gui.SGuiChoose;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -68,8 +72,9 @@ public class TargetSelection {
|
|||||||
public final boolean chooseTargets(Integer numTargets) {
|
public final boolean chooseTargets(Integer numTargets) {
|
||||||
TargetRestrictions tgt = getTgt();
|
TargetRestrictions tgt = getTgt();
|
||||||
final boolean canTarget = tgt != null && tgt.doesTarget();
|
final boolean canTarget = tgt != null && tgt.doesTarget();
|
||||||
if( !canTarget )
|
if (!canTarget) {
|
||||||
throw new RuntimeException("TargetSelection.chooseTargets called for ability that does not target - " + ability);
|
throw new RuntimeException("TargetSelection.chooseTargets called for ability that does not target - " + ability);
|
||||||
|
}
|
||||||
|
|
||||||
// Number of targets is explicitly set only if spell is being redirected (ex. Swerve or Redirect)
|
// Number of targets is explicitly set only if spell is being redirected (ex. Swerve or Redirect)
|
||||||
final int minTargets = numTargets != null ? numTargets.intValue() : tgt.getMinTargets(ability.getHostCard(), ability);
|
final int minTargets = numTargets != null ? numTargets.intValue() : tgt.getMinTargets(ability.getHostCard(), ability);
|
||||||
@@ -101,18 +106,21 @@ public class TargetSelection {
|
|||||||
List<GameObject> candidates = tgt.getAllCandidates(this.ability, true);
|
List<GameObject> candidates = tgt.getAllCandidates(this.ability, true);
|
||||||
GameObject choice = Aggregates.random(candidates);
|
GameObject choice = Aggregates.random(candidates);
|
||||||
return ability.getTargets().add(choice);
|
return ability.getTargets().add(choice);
|
||||||
} else if (zone.size() == 1 && zone.get(0) == ZoneType.Stack) {
|
}
|
||||||
|
else if (zone.size() == 1 && zone.get(0) == ZoneType.Stack) {
|
||||||
// If Zone is Stack, the choices are handled slightly differently.
|
// If Zone is Stack, the choices are handled slightly differently.
|
||||||
// Handle everything inside function due to interaction with StackInstance
|
// Handle everything inside function due to interaction with StackInstance
|
||||||
return this.chooseCardFromStack(mandatory);
|
return this.chooseCardFromStack(mandatory);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
List<Card> validTargets = this.getValidCardsToTarget();
|
List<Card> validTargets = this.getValidCardsToTarget();
|
||||||
if (zone.size() == 1 && (zone.get(0) == ZoneType.Battlefield || zone.get(0) == ZoneType.Hand)) {
|
if (zone.size() == 1 && GuiBase.getInterface().openZone(zone.get(0), getPlayersWithValidTargets(validTargets))) {
|
||||||
InputSelectTargets inp = new InputSelectTargets(validTargets, ability, mandatory);
|
InputSelectTargets inp = new InputSelectTargets(validTargets, ability, mandatory);
|
||||||
inp.showAndWait();
|
inp.showAndWait();
|
||||||
choiceResult = !inp.hasCancelled();
|
choiceResult = !inp.hasCancelled();
|
||||||
bTargetingDone = inp.hasPressedOk();
|
bTargetingDone = inp.hasPressedOk();
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// for every other case an all-purpose GuiChoose
|
// for every other case an all-purpose GuiChoose
|
||||||
choiceResult = this.chooseCardFromList(validTargets, true, mandatory);
|
choiceResult = this.chooseCardFromList(validTargets, true, mandatory);
|
||||||
}
|
}
|
||||||
@@ -121,7 +129,13 @@ public class TargetSelection {
|
|||||||
return choiceResult && chooseTargets(numTargets);
|
return choiceResult && chooseTargets(numTargets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<Player> getPlayersWithValidTargets(List<Card> validTargets) {
|
||||||
|
Set<Player> players = new HashSet<Player>();
|
||||||
|
for (Card card : validTargets) {
|
||||||
|
players.add(card.getController());
|
||||||
|
}
|
||||||
|
return players;
|
||||||
|
}
|
||||||
|
|
||||||
// these have been copied over from CardFactoryUtil as they need two extra
|
// these have been copied over from CardFactoryUtil as they need two extra
|
||||||
// parameters for target selection.
|
// parameters for target selection.
|
||||||
|
|||||||
Reference in New Issue
Block a user