Monarch attempt (Non-functional) with TestMonarch and sample card.

master
ShawnieBoy 2016-09-18 16:43:02 +01:00
parent 9449be257a
commit 2f98ecfff0
7 changed files with 97 additions and 4 deletions

View File

@ -0,0 +1,26 @@
package magic.model.action;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.MagicPlayerState;
public class BecomeMonarchAction extends ChangePlayerStateAction {
private final MagicPlayer player;
public BecomeMonarchAction(MagicPlayer aPlayer) {
super(aPlayer, MagicPlayerState.Monarch);
player=aPlayer;
}
@Override
public void doAction(final MagicGame game) {
if (!player.isMonarch()) {
if (player.getOpponent().isMonarch()) {
player.getOpponent().clearState(MagicPlayerState.Monarch);
}
player.setState(MagicPlayerState.Monarch);
System.out.println("Player becomes monarch");
}
}
}

View File

@ -2271,6 +2271,14 @@ public enum MagicRuleEventAction {
return (game, event) -> game.doAction(new PlayTokenAction(event.getPlayer(), CardDefinitions.getToken("colorless Clue artifact token")));
}
},
BecomesMonarch(
"you become the monarch"
){
@Override
public MagicEventAction getAction(final Matcher matcher) {
return (game, event) -> game.doAction(new BecomeMonarchAction(event.getPlayer()));
}
},
BecomeBlocked(
ARG.PERMANENTS + " become(s)? blocked",
MagicTiming.Block,

View File

@ -1,7 +1,9 @@
package magic.model.phase;
import magic.model.MagicGame;
import magic.model.MagicSource;
import magic.model.action.ReturnExiledAction;
import magic.model.event.MagicDrawEvent;
import magic.model.trigger.MagicTriggerType;
import magic.ui.MagicSound;
@ -23,6 +25,9 @@ public class MagicEndOfTurnPhase extends MagicPhase {
game.doAction(new ReturnExiledAction());
// End of turn triggers.
if (game.getTurnPlayer().isMonarch()) {
game.addEvent(new MagicDrawEvent(MagicSource.NONE,game.getTurnPlayer(),1));
}
game.executeTrigger(MagicTriggerType.AtEndOfTurn,game.getTurnPlayer());
game.setStep(MagicStep.ActivePlayer);
}

View File

@ -0,0 +1,33 @@
package magic.test;
import magic.model.MagicDuel;
import magic.model.MagicGame;
import magic.model.MagicPlayer;
import magic.model.phase.MagicMainPhase;
class TestMonarch extends TestGameBuilder {
public MagicGame getGame() {
final MagicDuel duel=createDuel();
final MagicGame game=duel.nextGame();
game.setPhase(MagicMainPhase.getFirstInstance());
final MagicPlayer player=game.getPlayer(0);
final MagicPlayer opponent=game.getPlayer(1);
MagicPlayer P = player;
P.setLife(20);
addToLibrary(P, "Plains", 10);
createPermanent(P,"Plains",8);
createPermanent(P,"Chromatic Lantern");
createPermanent(P,"Throne of the High City");
P = opponent;
P.setLife(20);
addToLibrary(P, "Plains", 10);
createPermanent(P,"Rupture Spire",false,8);
return game;
}
}

View File

@ -8,15 +8,17 @@ import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import magic.data.GeneralConfig;
import magic.ui.utility.GraphicsUtils;
import magic.data.MagicIcon;
import magic.ui.MagicImages;
import magic.ui.utility.MagicStyle;
import magic.ui.duel.CounterOverlay;
import magic.ui.duel.viewer.info.PlayerViewerInfo;
import magic.ui.duel.animation.AnimationFx;
import magic.ui.duel.animation.MagicAnimations;
import magic.ui.duel.viewer.info.PlayerViewerInfo;
import magic.ui.theme.ThemeFactory;
import magic.ui.utility.GraphicsUtils;
import magic.ui.utility.MagicStyle;
import org.pushingpixels.trident.Timeline;
import org.pushingpixels.trident.ease.Spline;
@ -62,7 +64,8 @@ public class PlayerImagePanel extends AnimationPanel {
// health
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
drawHealthValueOverlay(g2d, 0, 0, activeImage);
// monarch
drawMonarchOverlay(g2d);
drawValidChoiceIndicator(g2d);
// Animations
@ -71,6 +74,18 @@ public class PlayerImagePanel extends AnimationPanel {
}
private void drawMonarchOverlay(Graphics2D g2d) {
if (playerInfo.isMonarch()) {
final BufferedImage monarchImage = (BufferedImage)MagicImages.getIcon(MagicIcon.LOYALTYCOUNTER).getImage();
g2d.drawImage(
monarchImage,
4,
4,
null
);
}
}
private void drawValidChoiceIndicator(Graphics2D g2d) {
if (MagicAnimations.isOn(AnimationFx.AVATAR_PULSE)) {
drawPulsingBorder(g2d);

View File

@ -25,6 +25,7 @@ public class PlayerViewerInfo {
public final MagicCardList library;
public final List<PermanentViewerInfo> permanents;
private final boolean isAi;
private final boolean isMonarch;
public final String playerLabel;
private final ImageIcon avatar;
private int gamesWon;
@ -43,6 +44,7 @@ public class PlayerViewerInfo {
exile = new MagicCardList(player.getExile());
library = new MagicCardList(player.getLibrary());
isAi = player.isArtificial();
isMonarch = player.isMonarch();
permanents = new ArrayList<>();
for (final MagicPermanent permanent : player.getPermanents()) {
permanents.add(new PermanentViewerInfo(game, permanent));
@ -58,6 +60,10 @@ public class PlayerViewerInfo {
return this.isAi;
}
public boolean isMonarch() {
return isMonarch;
}
public boolean isHuman() {
return !isAi();
}