diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java b/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java index 34a62bea13b..85d0aa34a7c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java @@ -6,7 +6,6 @@ import java.awt.Font; import java.awt.Point; import java.awt.Toolkit; import java.awt.datatransfer.StringSelection; -import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; @@ -26,7 +25,6 @@ import forge.gui.SOverlayUtils; import forge.interfaces.IWinLoseView; import forge.item.PaperCard; import forge.model.FModel; -import forge.planarconquest.ConquestReward; import forge.properties.ForgePreferences.FPref; import forge.toolbox.FButton; import forge.toolbox.FLabel; @@ -285,19 +283,6 @@ public class ViewWinLose implements IWinLoseView { } } - @Override - public void showConquestRewards(String title, List rewards) { - //TODO: Make this nicer, for now just re-use showCards - List cards = new ArrayList(); - for (int i = rewards.size() - 1; i >= 0; i--) { //loop backwards so mythics/rares go back to appearing first - ConquestReward reward = rewards.get(i); - if (!reward.isDuplicate()) { - cards.add(reward.getCard()); - } - } - showCards(title, cards); - } - @Override public void showMessage(String message, final String title, final FSkinProp icon) { final SkinIcon icoTemp = FSkin.getIcon(icon).scale(0.5); diff --git a/forge-gui-mobile/src/forge/card/GameEntityPicker.java b/forge-gui-mobile/src/forge/card/GameEntityPicker.java index a3df67a2bda..3801346dcea 100644 --- a/forge-gui-mobile/src/forge/card/GameEntityPicker.java +++ b/forge-gui-mobile/src/forge/card/GameEntityPicker.java @@ -32,7 +32,7 @@ public class GameEntityPicker extends TabPageScreen { setHeight(FOptionPane.getMaxDisplayObjHeight()); - optionPane = new FOptionPane(null, title, null, this, + optionPane = new FOptionPane(null, null, title, null, this, isOptional ? ImmutableList.of("OK", "Cancel") : ImmutableList.of("OK"), 0, new Callback() { @Override public void run(Integer result) { diff --git a/forge-gui-mobile/src/forge/deck/FDeckChooser.java b/forge-gui-mobile/src/forge/deck/FDeckChooser.java index 187a2a7dc7c..432655c45f7 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckChooser.java +++ b/forge-gui-mobile/src/forge/deck/FDeckChooser.java @@ -98,7 +98,7 @@ public class FDeckChooser extends FScreen { container.add(deckChooser.lstDecks); container.setHeight(FOptionPane.getMaxDisplayObjHeight()); - deckChooser.optionPane = new FOptionPane(null, title, null, container, ImmutableList.of("OK", "Cancel"), 0, new Callback() { + deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of("OK", "Cancel"), 0, new Callback() { @Override public void run(Integer result) { if (result == 0) { diff --git a/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java b/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java index 60690c76d7c..1a8a3d8957c 100644 --- a/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java +++ b/forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java @@ -20,8 +20,6 @@ import forge.interfaces.IWinLoseView; import forge.item.PaperCard; import forge.menu.FMagnifyView; import forge.model.FModel; -import forge.planarconquest.ConquestReward; -import forge.screens.planarconquest.ConquestRewardDialog; import forge.toolbox.FButton; import forge.toolbox.FContainer; import forge.toolbox.FDisplayObject; @@ -236,11 +234,6 @@ public class ViewWinLose extends FOverlay implements IWinLoseView { SGuiChoose.reveal(title, cards); } - @Override - public void showConquestRewards(String title, List rewards) { - ConquestRewardDialog.show(title, rewards); - } - @Override public void showMessage(String message, String title, FSkinProp icon) { SOptionPane.showMessageDialog(message, title, icon); diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java index 44d0d4fe64b..0c9d98c4ba3 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestAEtherScreen.java @@ -73,7 +73,7 @@ public class ConquestAEtherScreen extends FScreen { PaperCard card = Aggregates.random(lstAEther.getFilteredItems()).getKey(); lstAEther.removeItem(card, 1); - ConquestRewardDialog.show("Card pulled from the AEther", card); + ConquestRewardDialog.show("Card pulled from the AEther", card, null); model.spendAEtherShards(shardCost); model.unlockCard(card); diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java index 0da0ddd939e..6028f299cf0 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestChaosWheel.java @@ -6,7 +6,7 @@ import forge.Graphics; import forge.animation.ForgeAnimation; import forge.assets.FSkinImage; import forge.assets.FSkinTexture; -import forge.planarconquest.ConquestEvent.ConquestEventReward; +import forge.planarconquest.ConquestEvent.ChaosWheelOutcome; import forge.toolbox.FOptionPane; import forge.toolbox.FOverlay; import forge.util.Aggregates; @@ -15,15 +15,15 @@ import forge.util.PhysicsObject; import forge.util.ThreadUtil; public class ConquestChaosWheel extends FOverlay { - public static void spin(Callback callback0) { + public static void spin(Callback callback0) { ConquestChaosWheel wheel = new ConquestChaosWheel(callback0); wheel.show(); } private final WheelSpinAnimation animation = new WheelSpinAnimation(); - private final Callback callback; + private final Callback callback; - private ConquestChaosWheel(Callback callback0) { + private ConquestChaosWheel(Callback callback0) { callback = callback0; } @@ -85,7 +85,7 @@ public class ConquestChaosWheel extends FOverlay { @Override public void run() { hide(); - callback.run(ConquestEventReward.getReward(getWheelRotation())); + callback.run(ChaosWheelOutcome.getWheelOutcome(getWheelRotation())); } }); } diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java index e8084006b35..e090a938d7e 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java @@ -11,21 +11,24 @@ import forge.Graphics; import forge.animation.ForgeAnimation; import forge.assets.FImage; import forge.assets.FSkinColor; +import forge.assets.FSkinFont; import forge.assets.FSkinImage; import forge.card.CardDetailUtil; import forge.card.CardRenderer; import forge.card.CardDetailUtil.DetailColors; import forge.model.FModel; import forge.planarconquest.ConquestData; +import forge.planarconquest.ConquestEvent.ChaosWheelOutcome; import forge.planarconquest.ConquestEvent.ConquestEventRecord; import forge.planarconquest.ConquestEvent; -import forge.planarconquest.ConquestEvent.ConquestEventReward; import forge.planarconquest.ConquestLocation; import forge.planarconquest.ConquestPlane; import forge.planarconquest.ConquestPlane.Region; +import forge.planarconquest.ConquestPreferences.CQPref; import forge.planarconquest.ConquestPlaneData; import forge.screens.FScreen; import forge.toolbox.FDisplayObject; +import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; import forge.util.Callback; import forge.util.Utils; @@ -83,14 +86,95 @@ public class ConquestMultiverseScreen extends FScreen { } private void spinChaosWheel() { - ConquestChaosWheel.spin(new Callback() { + ConquestChaosWheel.spin(new Callback() { @Override - public void run(ConquestEventReward reward) { - System.out.println(reward); + public void run(ChaosWheelOutcome outcome) { + switch (outcome) { + case BOOSTER: + awardBooster(false); + break; + case DOUBLE_BOOSTER: + awardBooster(true); + break; + case SHARDS: + awardShards(FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); + break; + case DOUBLE_SHARDS: + awardShards(2 * FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false); + break; + case PLANESWALK: + awardPlaneswalkCharge(); + break; + case CHAOS: + triggerChaosTravel(); + break; + } } }); } + private void awardBooster(final boolean bonusBooster) { + final int shardsBefore = model.getAEtherShards(); + ConquestRewardDialog.show("Received Booster Pack" + (bonusBooster ? "\n(1 of 2)" : ""), + FModel.getConquest().awardBooster(), new Runnable() { + @Override + public void run() { + final Runnable alertShardsFromDuplicates = new Runnable() { + @Override + public void run() { + final int shardsReceived = model.getAEtherShards() - shardsBefore; + if (shardsReceived > 0) { + awardShards(shardsReceived, true); + } + } + }; + if (bonusBooster) { + ConquestRewardDialog.show("Received Booster Pack\n(2 of 2)", FModel.getConquest().awardBooster(), alertShardsFromDuplicates); + } + else { + alertShardsFromDuplicates.run(); + } + } + }); + } + + private static final FImage SHARD_IMAGE = new FImage() { + final float size = Forge.getScreenWidth() * 0.6f; + @Override + public float getWidth() { + return size; + } + @Override + public float getHeight() { + return size; + } + @Override + public void draw(Graphics g, float x, float y, float w, float h) { + FSkinImage.AETHER_SHARD.draw(g, x, y, w, h); + } + }; + + private void awardShards(int shards, boolean fromDuplicateCards) { + String message = "Received AEther Shards"; + if (fromDuplicateCards) { + message += " for Duplicate Cards"; + } + else { //if from duplicate cards, shards already added to model + model.rewardAEtherShards(shards); + } + FOptionPane.showMessageDialog(String.valueOf(shards), FSkinFont.get(32), message, SHARD_IMAGE); + } + + private void awardPlaneswalkCharge() { + //TODO + FOptionPane.showMessageDialog(null, "Received Planeswalk Charge"); + } + + private void triggerChaosTravel() { + //TODO + FOptionPane.showMessageDialog(null, "Chaos Travel"); + } + private class PlaneGrid extends FScrollPane { private MoveAnimation activeMoveAnimation; private BadgeAnimation activeBadgeAnimation; diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestRewardDialog.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestRewardDialog.java index deeedeeb99f..e58dac72cf7 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestRewardDialog.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestRewardDialog.java @@ -28,26 +28,28 @@ import forge.util.Utils; public class ConquestRewardDialog extends FScrollPane { private static final float PADDING = Utils.scale(5); - public static void show(String title, PaperCard card) { + public static void show(String title, PaperCard card, Runnable callback0) { List rewards = new ArrayList(1); rewards.add(new ConquestReward(card, 0)); - show(title, rewards); + show(title, rewards, callback0); } - public static void show(String title, Iterable rewards) { - ConquestRewardDialog revealer = new ConquestRewardDialog(title, rewards); + public static void show(String title, Iterable rewards, Runnable callback0) { + ConquestRewardDialog revealer = new ConquestRewardDialog(title, rewards, callback0); revealer.dialog.show(); } private final RevealDialog dialog; private final List cardRevealers = new ArrayList(); private final CardRevealAnimation animation; + private final Runnable callback; private int columnCount; private float totalZoomAmount; private CardRevealer focalCard; - private ConquestRewardDialog(String title, Iterable rewards) { + private ConquestRewardDialog(String title, Iterable rewards, Runnable callback0) { dialog = new RevealDialog(title); + callback = callback0; for (ConquestReward reward : rewards) { cardRevealers.add(this.add(new CardRevealer(reward))); @@ -167,6 +169,9 @@ public class ConquestRewardDialog extends FScrollPane { @Override public void handleEvent(FEvent e) { hide(); + if (callback != null) { + callback.run(); + } } }); initButton(1, "Skip", new FEventHandler() { diff --git a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java index 4610ba93b8b..8056e38d62f 100644 --- a/forge-gui-mobile/src/forge/toolbox/FOptionPane.java +++ b/forge-gui-mobile/src/forge/toolbox/FOptionPane.java @@ -58,6 +58,10 @@ public class FOptionPane extends FDialog { showOptionDialog(message, title, icon, ImmutableList.of("OK"), 0, null); } + public static void showMessageDialog(final String message, FSkinFont messageFont, final String title, final FImage icon) { + showOptionDialog(message, messageFont, title, icon, ImmutableList.of("OK"), 0, null); + } + public static void showMessageDialog(final String message, final String title, final FImage icon, final Callback callback) { showOptionDialog(message, title, icon, ImmutableList.of("OK"), 0, callback); } @@ -91,9 +95,13 @@ public class FOptionPane extends FDialog { public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final Callback callback) { showOptionDialog(message, title, icon, options, 0, callback); } - + public static void showOptionDialog(final String message, final String title, final FImage icon, final List options, final int defaultOption, final Callback callback) { - final FOptionPane optionPane = new FOptionPane(message, title, icon, null, options, defaultOption, callback); + showOptionDialog(message, null, title, icon, options, defaultOption, callback); + } + + public static void showOptionDialog(final String message, final FSkinFont messageFont, final String title, final FImage icon, final List options, final int defaultOption, final Callback callback) { + final FOptionPane optionPane = new FOptionPane(message, messageFont, title, icon, null, options, defaultOption, callback); optionPane.show(); } @@ -143,7 +151,7 @@ public class FOptionPane extends FDialog { icon = null; } - final FOptionPane optionPane = new FOptionPane(message, title, icon, cardDisplay, options, defaultOption, callback); + final FOptionPane optionPane = new FOptionPane(message, null, title, icon, cardDisplay, options, defaultOption, callback); optionPane.show(); } @@ -181,7 +189,7 @@ public class FOptionPane extends FDialog { container.add(inputField); container.setHeight(inputField.getHeight() + padTop + PADDING); - final FOptionPane optionPane = new FOptionPane(message, title, null, container, ImmutableList.of("OK", "Cancel"), 0, new Callback() { + final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of("OK", "Cancel"), 0, new Callback() { @SuppressWarnings("unchecked") @Override public void run(final Integer result) { @@ -224,7 +232,7 @@ public class FOptionPane extends FDialog { private final int defaultOption; private final boolean centerIcon; - public FOptionPane(final String message, final String title, final FImage icon, final FDisplayObject displayObj0, final List options, final int defaultOption0, final Callback callback0) { + public FOptionPane(final String message, final FSkinFont messageFont, final String title, final FImage icon, final FDisplayObject displayObj0, final List options, final int defaultOption0, final Callback callback0) { super(title, options.size()); if (icon != null) { @@ -241,7 +249,7 @@ public class FOptionPane extends FDialog { if (message != null) { prompt = add(new FTextArea(true, message)); - prompt.setFont(FSkinFont.get(12)); + prompt.setFont(messageFont != null ? messageFont : FSkinFont.get(12)); if (centerIcon || centerPrompt()) { prompt.setAlignment(HAlignment.CENTER); } diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index 2ece2270b30..57a9b1a21ee 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -142,7 +142,7 @@ public class ListChooser extends FContainer { updateHeight(); - optionPane = new FOptionPane(null, title, null, this, options, 0, new Callback() { + optionPane = new FOptionPane(null, null, title, null, this, options, 0, new Callback() { @Override public void run(Integer result) { called = false; diff --git a/forge-gui/src/main/java/forge/interfaces/IWinLoseView.java b/forge-gui/src/main/java/forge/interfaces/IWinLoseView.java index 4c8303b373e..f77f7fd8ad0 100644 --- a/forge-gui/src/main/java/forge/interfaces/IWinLoseView.java +++ b/forge-gui/src/main/java/forge/interfaces/IWinLoseView.java @@ -4,7 +4,6 @@ import java.util.List; import forge.assets.FSkinProp; import forge.item.PaperCard; -import forge.planarconquest.ConquestReward; public interface IWinLoseView { T getBtnContinue(); @@ -14,6 +13,5 @@ public interface IWinLoseView { void showRewards(Runnable runnable); void showCards(String title, List cards); - void showConquestRewards(String title, List rewards); void showMessage(String message, String title, FSkinProp icon); } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java b/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java index baba06e9018..89106d3b3ea 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java @@ -123,7 +123,7 @@ public abstract class ConquestEvent { } } - public enum ConquestEventReward { + public enum ChaosWheelOutcome { BOOSTER, DOUBLE_BOOSTER, SHARDS, @@ -131,12 +131,12 @@ public abstract class ConquestEvent { PLANESWALK, CHAOS; - private static final ConquestEventReward[] wheelSpots = new ConquestEventReward[] { + private static final ChaosWheelOutcome[] wheelSpots = new ChaosWheelOutcome[] { CHAOS, BOOSTER, SHARDS, DOUBLE_BOOSTER, PLANESWALK, BOOSTER, DOUBLE_SHARDS, BOOSTER }; private static final float ANGLE_PER_SPOT = 360f / wheelSpots.length; - public static ConquestEventReward getReward(float wheelRotation) { + public static ChaosWheelOutcome getWheelOutcome(float wheelRotation) { if (wheelRotation < 0) { wheelRotation += 360f; }