forked from External/mage
160 lines
4.4 KiB
Java
160 lines
4.4 KiB
Java
package mage.game;
|
|
|
|
import mage.cards.MeldCard;
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|