minimize need to player type checks

This commit is contained in:
Maxmtg
2013-12-22 23:13:07 +00:00
parent 3a0fdb4d4f
commit dc16b75c94
7 changed files with 28 additions and 29 deletions

2
.gitattributes vendored
View File

@@ -15126,7 +15126,6 @@ forge-gui/src/main/java/forge/game/spellability/SpellAbilityVariables.java svneo
forge-gui/src/main/java/forge/game/spellability/SpellPermanent.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/SpellPermanent.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/spellability/TargetChoices.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/TargetChoices.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/spellability/TargetRestrictions.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/TargetRestrictions.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/spellability/TargetSelection.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/spellability/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/game/spellability/package-info.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/staticability/StaticAbility.java svneol=native#text/plain forge-gui/src/main/java/forge/game/staticability/StaticAbility.java svneol=native#text/plain
forge-gui/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java -text forge-gui/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java -text
@@ -15427,6 +15426,7 @@ forge-gui/src/main/java/forge/gui/package-info.java svneol=native#text/plain
forge-gui/src/main/java/forge/gui/player/HumanPlay.java -text forge-gui/src/main/java/forge/gui/player/HumanPlay.java -text
forge-gui/src/main/java/forge/gui/player/LobbyPlayerHuman.java -text forge-gui/src/main/java/forge/gui/player/LobbyPlayerHuman.java -text
forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java -text forge-gui/src/main/java/forge/gui/player/PlayerControllerHuman.java -text
forge-gui/src/main/java/forge/gui/player/TargetSelection.java svneol=native#text/plain
forge-gui/src/main/java/forge/gui/player/package-info.java -text forge-gui/src/main/java/forge/gui/player/package-info.java -text
forge-gui/src/main/java/forge/gui/toolbox/CardFaceSymbols.java svneol=native#text/plain forge-gui/src/main/java/forge/gui/toolbox/CardFaceSymbols.java svneol=native#text/plain
forge-gui/src/main/java/forge/gui/toolbox/FAbsolutePositioner.java -text forge-gui/src/main/java/forge/gui/toolbox/FAbsolutePositioner.java -text

View File

@@ -121,6 +121,7 @@ public abstract class PlayerController {
public abstract List<Card> choosePermanentsToSacrifice(SpellAbility sa, int min, int max, List<Card> validTargets, String message); public abstract List<Card> choosePermanentsToSacrifice(SpellAbility sa, int min, int max, List<Card> validTargets, String message);
public abstract List<Card> choosePermanentsToDestroy(SpellAbility sa, int min, int max, List<Card> validTargets, String message); public abstract List<Card> choosePermanentsToDestroy(SpellAbility sa, int min, int max, List<Card> validTargets, String message);
public abstract TargetChoices chooseNewTargetsFor(SpellAbility ability); public abstract TargetChoices chooseNewTargetsFor(SpellAbility ability);
public abstract boolean chooseTargetsFor(SpellAbility currentAbility); // this is bad a function for it assigns targets to sa inside its body
// Specify a target of a spell (Spellskite) // Specify a target of a spell (Spellskite)
public abstract Pair<SpellAbilityStackInstance, GameObject> chooseTarget(SpellAbility sa, List<Pair<SpellAbilityStackInstance, GameObject>> allTargets); public abstract Pair<SpellAbilityStackInstance, GameObject> chooseTarget(SpellAbility sa, List<Pair<SpellAbilityStackInstance, GameObject>> allTargets);

View File

@@ -50,7 +50,6 @@ import forge.game.spellability.Spell;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetSelection;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility; import forge.game.trigger.WrappedAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -73,9 +72,6 @@ public class PlayerControllerAi extends PlayerController {
brains = new AiController(p, game); brains = new AiController(p, game);
} }
/**
* Uses GUI to learn which spell the player (human in our case) would like to play
*/
public SpellAbility getAbilityToPlay(List<SpellAbility> abilities, MouseEvent triggerEvent) { public SpellAbility getAbilityToPlay(List<SpellAbility> abilities, MouseEvent triggerEvent) {
if (abilities.size() == 0) { if (abilities.size() == 0) {
return null; return null;
@@ -636,12 +632,7 @@ public class PlayerControllerAi extends PlayerController {
private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){ private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){
if (sa.hasParam("TargetingPlayer")) { if (sa.hasParam("TargetingPlayer")) {
Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0); Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0);
if (targetingPlayer.isHuman()) { targetingPlayer.getController().chooseTargetsFor(sa);
final TargetSelection select = new TargetSelection(sa);
select.chooseTargets(null);
} else { //AI
sa.doTrigger(true, targetingPlayer);
}
} else { } else {
sa.doTrigger(isMandatory, player); sa.doTrigger(isMandatory, player);
} }
@@ -676,4 +667,9 @@ public class PlayerControllerAi extends PlayerController {
return brains.chooseProliferation(); return brains.chooseProliferation();
} }
@Override
public boolean chooseTargetsFor(SpellAbility currentAbility) {
return currentAbility.doTrigger(true, player);
}
} }

View File

@@ -117,15 +117,9 @@ public class HumanPlaySpellAbility {
clearTargets(currentAbility); clearTargets(currentAbility);
Player targetingPlayer = ability.hasParam("TargetingPlayer") ? Player targetingPlayer = ability.hasParam("TargetingPlayer") ?
AbilityUtils.getDefinedPlayers(source, ability.getParam("TargetingPlayer"), currentAbility).get(0) : ability.getActivatingPlayer(); AbilityUtils.getDefinedPlayers(source, ability.getParam("TargetingPlayer"), currentAbility).get(0) : ability.getActivatingPlayer();
if (targetingPlayer.isHuman()) {
final TargetSelection select = new TargetSelection(currentAbility); if (!targetingPlayer.getController().chooseTargetsFor(currentAbility))
if (!select.chooseTargets(null)) { return false;
return false;
}
}
else { //AI
return currentAbility.doTrigger(true, targetingPlayer);
}
} }
final SpellAbility subAbility = currentAbility.getSubAbility(); final SpellAbility subAbility = currentAbility.getSubAbility();
if (subAbility != null) { if (subAbility != null) {

View File

@@ -53,7 +53,6 @@ import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetSelection;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility; import forge.game.trigger.WrappedAbility;
import forge.game.zone.Zone; import forge.game.zone.Zone;
@@ -1019,4 +1018,11 @@ public class PlayerControllerHuman extends PlayerController {
return null; return null;
return inp.getProliferationMap(); return inp.getProliferationMap();
} }
@Override
public boolean chooseTargetsFor(SpellAbility currentAbility) {
final TargetSelection select = new TargetSelection(currentAbility);
return select.chooseTargets(null);
}
} }

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package forge.game.spellability; package forge.gui.player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -28,6 +28,9 @@ 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.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetRestrictions;
import forge.game.zone.Zone; import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;

View File

@@ -44,7 +44,6 @@ import forge.game.spellability.Spell;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetSelection;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility; import forge.game.trigger.WrappedAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -496,12 +495,7 @@ public class PlayerControllerForTests extends PlayerController {
private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){ private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){
if (sa.hasParam("TargetingPlayer")) { if (sa.hasParam("TargetingPlayer")) {
Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0); Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0);
if (targetingPlayer.isHuman()) { targetingPlayer.getController().chooseTargetsFor(sa);
final TargetSelection select = new TargetSelection(sa);
select.chooseTargets(null);
} else { //AI
sa.doTrigger(true, targetingPlayer);
}
} else { } else {
sa.doTrigger(isMandatory, player); sa.doTrigger(isMandatory, player);
} }
@@ -538,4 +532,9 @@ public class PlayerControllerForTests extends PlayerController {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return null; return null;
} }
@Override
public boolean chooseTargetsFor(SpellAbility currentAbility) {
return currentAbility.doTrigger(true, player);
}
} }