forked from External/mage
Refactor the core zone change code to use a common code path.
This commit is contained in:
parent
b87f91fd97
commit
c33a731a4a
9 changed files with 539 additions and 570 deletions
161
Mage/src/main/java/mage/game/ZoneChangeInfo.java
Normal file
161
Mage/src/main/java/mage/game/ZoneChangeInfo.java
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
package mage.game;
|
||||
|
||||
import mage.cards.MeldCard;
|
||||
import mage.constants.Zone;
|
||||
import mage.game.events.ZoneChangeEvent;
|
||||
import mage.game.stack.Spell;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Created by Dilnu on 9/4/16.
|
||||
*/
|
||||
public class ZoneChangeInfo {
|
||||
public boolean faceDown;
|
||||
public ZoneChangeEvent event;
|
||||
|
||||
public ZoneChangeInfo(ZoneChangeEvent event) {
|
||||
this.event = event;
|
||||
this.faceDown = false;
|
||||
}
|
||||
|
||||
public ZoneChangeInfo(ZoneChangeEvent event, boolean faceDown) {
|
||||
this(event);
|
||||
this.faceDown = faceDown;
|
||||
}
|
||||
|
||||
public ZoneChangeInfo(ZoneChangeInfo info) {
|
||||
this.event = info.event;
|
||||
this.faceDown = info.faceDown;
|
||||
}
|
||||
|
||||
public ZoneChangeInfo copy() {
|
||||
return new ZoneChangeInfo(this);
|
||||
}
|
||||
|
||||
public static class Library extends ZoneChangeInfo {
|
||||
public boolean top;
|
||||
|
||||
public Library(ZoneChangeEvent event, boolean top) {
|
||||
super(event);
|
||||
this.top = top;
|
||||
}
|
||||
|
||||
public Library(ZoneChangeEvent event, boolean faceDown, boolean top) {
|
||||
super(event, faceDown);
|
||||
this.top = top;
|
||||
}
|
||||
|
||||
public Library(Library info) {
|
||||
super(info);
|
||||
this.top = info.top;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZoneChangeInfo copy() {
|
||||
return new Library(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Exile extends ZoneChangeInfo {
|
||||
public UUID id;
|
||||
public String name;
|
||||
|
||||
public Exile(ZoneChangeEvent event, UUID id, String name) {
|
||||
super(event);
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Exile(ZoneChangeEvent event, boolean faceDown, UUID id, String name) {
|
||||
super(event, faceDown);
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Exile(Exile info) {
|
||||
super(info);
|
||||
this.id = info.id;
|
||||
this.name = info.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZoneChangeInfo copy() {
|
||||
return new Exile(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Battlefield extends ZoneChangeInfo {
|
||||
public boolean tapped;
|
||||
|
||||
public Battlefield (ZoneChangeEvent event, boolean tapped) {
|
||||
super(event);
|
||||
this.tapped = tapped;
|
||||
}
|
||||
|
||||
public Battlefield (ZoneChangeEvent event, boolean faceDown, boolean tapped) {
|
||||
super(event, faceDown);
|
||||
this.tapped = tapped;
|
||||
}
|
||||
|
||||
public Battlefield(Battlefield info) {
|
||||
super(info);
|
||||
this.tapped = info.tapped;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZoneChangeInfo copy() {
|
||||
return new Battlefield(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Stack extends ZoneChangeInfo {
|
||||
public Spell spell;
|
||||
|
||||
public Stack(ZoneChangeEvent event, Spell spell) {
|
||||
super(event);
|
||||
this.spell = spell;
|
||||
}
|
||||
|
||||
public Stack(ZoneChangeEvent event, boolean faceDown, Spell spell) {
|
||||
super(event, faceDown);
|
||||
this.spell = spell;
|
||||
}
|
||||
|
||||
public Stack(Stack info) {
|
||||
super(info);
|
||||
this.spell = info.spell;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZoneChangeInfo copy() {
|
||||
return new Stack(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Unmelded extends ZoneChangeInfo {
|
||||
List<ZoneChangeInfo> subInfo = new ArrayList<>();
|
||||
public Unmelded(ZoneChangeInfo info, Game game) {
|
||||
super(info.event);
|
||||
MeldCard meld = game.getMeldCard(info.event.getTargetId());
|
||||
if (meld != null) {
|
||||
if (meld.hasTopHalf(game)) {
|
||||
ZoneChangeEvent topEvent = new ZoneChangeEvent(meld.getTopHalfCard().getId(), event.getSourceId(),
|
||||
event.getPlayerId(), event.getFromZone(), event.getToZone(), event.getAppliedEffects());
|
||||
ZoneChangeInfo topInfo = info.copy();
|
||||
topInfo.event = topEvent;
|
||||
subInfo.add(topInfo);
|
||||
}
|
||||
if (meld.hasBottomHalf(game)) {
|
||||
ZoneChangeEvent bottomEvent = new ZoneChangeEvent(meld.getBottomHalfCard().getId(), event.getSourceId(),
|
||||
event.getPlayerId(), event.getFromZone(), event.getToZone(), event.getAppliedEffects());
|
||||
ZoneChangeInfo bottomInfo = info.copy();
|
||||
bottomInfo.event = bottomEvent;
|
||||
subInfo.add(bottomInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue