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/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/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/staticability/StaticAbility.java svneol=native#text/plain
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/LobbyPlayerHuman.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/toolbox/CardFaceSymbols.java svneol=native#text/plain
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> choosePermanentsToDestroy(SpellAbility sa, int min, int max, List<Card> validTargets, String message);
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)
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.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetSelection;
import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility;
import forge.game.zone.ZoneType;
@@ -73,9 +72,6 @@ public class PlayerControllerAi extends PlayerController {
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) {
if (abilities.size() == 0) {
return null;
@@ -636,12 +632,7 @@ public class PlayerControllerAi extends PlayerController {
private void prepareSingleSa(final Card host, final SpellAbility sa, boolean isMandatory){
if (sa.hasParam("TargetingPlayer")) {
Player targetingPlayer = AbilityUtils.getDefinedPlayers(host, sa.getParam("TargetingPlayer"), sa).get(0);
if (targetingPlayer.isHuman()) {
final TargetSelection select = new TargetSelection(sa);
select.chooseTargets(null);
} else { //AI
sa.doTrigger(true, targetingPlayer);
}
targetingPlayer.getController().chooseTargetsFor(sa);
} else {
sa.doTrigger(isMandatory, player);
}
@@ -676,4 +667,9 @@ public class PlayerControllerAi extends PlayerController {
return brains.chooseProliferation();
}
@Override
public boolean chooseTargetsFor(SpellAbility currentAbility) {
return currentAbility.doTrigger(true, player);
}
}

View File

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

View File

@@ -53,7 +53,6 @@ import forge.game.spellability.AbilitySub;
import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetSelection;
import forge.game.trigger.Trigger;
import forge.game.trigger.WrappedAbility;
import forge.game.zone.Zone;
@@ -1019,4 +1018,11 @@ public class PlayerControllerHuman extends PlayerController {
return null;
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
* 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.List;
@@ -28,6 +28,9 @@ import forge.game.GameObject;
import forge.game.card.Card;
import forge.game.card.CardLists;
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.ZoneType;
import forge.gui.GuiChoose;

View File

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