mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Make mouseover on prompt pane show cardview of the controlling card if there is one
This commit is contained in:
@@ -791,6 +791,10 @@ public final class CMatchUI
|
||||
public void showPromptMessage(final PlayerView playerView, final String message) {
|
||||
cPrompt.setMessage(message);
|
||||
}
|
||||
// no override for now
|
||||
public void showPromptMessage(final PlayerView playerView, final String message, final SpellAbilityView sav ) {
|
||||
cPrompt.setMessage(message,sav);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showManaPool(final PlayerView player) {
|
||||
|
||||
@@ -28,6 +28,8 @@ import javax.swing.JButton;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.game.GameView;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.spellability.SpellAbilityView;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
import forge.screens.match.CMatchUI;
|
||||
@@ -47,6 +49,9 @@ public class CPrompt implements ICDoc {
|
||||
this.view = new VPrompt(this);
|
||||
}
|
||||
|
||||
public final CMatchUI getMatchUI() {
|
||||
return matchUI;
|
||||
}
|
||||
public final VPrompt getView() {
|
||||
return view;
|
||||
}
|
||||
@@ -100,6 +105,11 @@ public class CPrompt implements ICDoc {
|
||||
|
||||
public void setMessage(final String s0) {
|
||||
view.getTarMessage().setText(FSkin.encodeSymbols(s0, false));
|
||||
view.setSpellAbilityView(null);
|
||||
}
|
||||
public void setMessage(final String s0, final SpellAbilityView sav) {
|
||||
view.getTarMessage().setText(FSkin.encodeSymbols(s0, false));
|
||||
view.setSpellAbilityView(sav);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
package forge.screens.match.views;
|
||||
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.spellability.SpellAbilityView;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
@@ -33,6 +35,8 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
|
||||
/**
|
||||
* Assembles Swing components of message report.
|
||||
@@ -52,6 +56,11 @@ public class VPrompt implements IVDoc<CPrompt> {
|
||||
private final FScrollPane messageScroller = new FScrollPane(tarMessage, false,
|
||||
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
private final JLabel lblGames;
|
||||
private SpellAbilityView sav = null ;
|
||||
|
||||
public void setSpellAbilityView(final SpellAbilityView sav) {
|
||||
this.sav = sav ;
|
||||
}
|
||||
|
||||
private KeyAdapter buttonKeyAdapter = new KeyAdapter() {
|
||||
@Override
|
||||
@@ -84,6 +93,15 @@ public class VPrompt implements IVDoc<CPrompt> {
|
||||
|
||||
tarMessage.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
||||
tarMessage.setMargin(new Insets(3, 3, 3, 3));
|
||||
|
||||
messageScroller.getViewport().getView().addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseEntered(final MouseEvent e) {
|
||||
if ( sav != null ) {
|
||||
controller.getMatchUI().setCard(sav.getHostCard());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//========== Overridden methods
|
||||
|
||||
@@ -155,6 +155,11 @@ public class MatchController extends AbstractGuiGame {
|
||||
public void showPromptMessage(final PlayerView player, final String message) {
|
||||
view.getPrompt(player).setMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showPromptMessage(final PlayerView player, final String message, final SpellAbilityView sav) {
|
||||
view.getPrompt(player).setMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateButtons(final PlayerView owner, final String label1, final String label2, final boolean enable1, final boolean enable2, final boolean focus1) {
|
||||
|
||||
@@ -32,6 +32,7 @@ public interface IGuiGame {
|
||||
void afterGameEnd();
|
||||
void showCombat();
|
||||
void showPromptMessage(PlayerView playerView, String message);
|
||||
void showPromptMessage(PlayerView playerView, String message, SpellAbilityView sav);
|
||||
void updateButtons(PlayerView owner, boolean okEnabled, boolean cancelEnabled, boolean focusOk);
|
||||
void updateButtons(PlayerView owner, String label1, String label2, boolean enable1, boolean enable2, boolean focus1);
|
||||
void flashIncorrectAction();
|
||||
|
||||
@@ -25,6 +25,7 @@ import forge.game.phase.PhaseHandler;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityView;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.util.ITriggerEvent;
|
||||
|
||||
@@ -117,6 +118,9 @@ public abstract class InputBase implements java.io.Serializable, Input {
|
||||
protected final void showMessage(final String message) {
|
||||
controller.getGui().showPromptMessage(getOwner(), message);
|
||||
}
|
||||
protected final void showMessage(final String message, final SpellAbilityView sav) {
|
||||
controller.getGui().showPromptMessage(getOwner(), message, sav);
|
||||
}
|
||||
|
||||
protected String getTurnPhasePriorityMessage(final Game game) {
|
||||
final PhaseHandler ph = game.getPhaseHandler();
|
||||
|
||||
@@ -19,7 +19,9 @@ package forge.match.input;
|
||||
|
||||
import forge.game.card.Card;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.model.FModel;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.properties.ForgePreferences;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -61,7 +63,12 @@ public class InputConfirm extends InputSyncronizedBase {
|
||||
@Override
|
||||
protected final void showMessage() {
|
||||
getController().getGui().updateButtons(getOwner(), yesButtonText, noButtonText, true, true, defaultYes);
|
||||
showMessage(message);
|
||||
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
(sa!=null) ) {
|
||||
showMessage(sa.getStackDescription() + "\n" + message, sa.getView());
|
||||
} else {
|
||||
showMessage(message, (sa!=null)?sa.getView():null);
|
||||
}
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -422,7 +422,7 @@ public abstract class InputPayMana extends InputSyncronizedBase {
|
||||
getController().getGui().updateButtons(getOwner(), "Auto", "Cancel", true, true, true);
|
||||
}
|
||||
}
|
||||
showMessage(getMessage());
|
||||
showMessage(getMessage(), saPaidFor.getView());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -51,9 +51,14 @@ public class InputPayManaOfCostPayment extends InputPayMana {
|
||||
msg.append(messagePrefix).append("\n");
|
||||
}
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) {
|
||||
msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", "")).append("\n");
|
||||
// msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", ""));
|
||||
if ( saPaidFor.isSpell() ) {
|
||||
msg.append(saPaidFor.getStackDescription().replace("(Targeting ERROR)", ""));
|
||||
} else {
|
||||
msg.append(saPaidFor.getHostCard()).append(" - ").append(saPaidFor.toString());
|
||||
}
|
||||
}
|
||||
msg.append("Pay Mana Cost: ").append(displayMana);
|
||||
msg.append("\n").append("Pay Mana Cost: ").append(displayMana);
|
||||
if (this.phyLifeToLose > 0) {
|
||||
msg.append(" (");
|
||||
msg.append(this.phyLifeToLose);
|
||||
|
||||
@@ -7,6 +7,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
@@ -27,7 +29,12 @@ public final class InputProliferate extends InputSelectManyBase<GameEntity> {
|
||||
|
||||
@Override
|
||||
protected String getMessage() {
|
||||
final StringBuilder sb = new StringBuilder("Choose permanents and/or players with counters on them to add one more counter of that type.");
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
sa != null ) {
|
||||
sb.append(sa.getStackDescription()).append("\n");
|
||||
}
|
||||
sb.append("Choose permanents and/or players with counters on them to add one more counter of that type.");
|
||||
|
||||
sb.append("\n\nYou've selected so far:\n");
|
||||
if (chosenCounters.isEmpty()) {
|
||||
|
||||
@@ -8,6 +8,8 @@ import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import forge.model.FModel;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.card.mana.ManaCostShard;
|
||||
@@ -33,20 +35,22 @@ public final class InputSelectCardsForConvokeOrImprovise extends InputSelectMany
|
||||
private SpellAbility sa;
|
||||
|
||||
public InputSelectCardsForConvokeOrImprovise(final PlayerControllerHuman controller, final Player p, final ManaCost cost, final CardCollectionView untapped, boolean impr, final SpellAbility sa) {
|
||||
super(controller, 0, Math.min(cost.getCMC(), untapped.size()));
|
||||
super(controller, 0, Math.min(cost.getCMC(), untapped.size()), sa);
|
||||
remainingCost = new ManaCostBeingPaid(cost);
|
||||
player = p;
|
||||
availableCards = untapped;
|
||||
improvise = impr;
|
||||
cardType = impr ? "artifact" : "creature";
|
||||
description = impr ? "Improvise" : "Convoke";
|
||||
this.sa = sa;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMessage() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (sa != null) sb.append(sa.getStackDescription());
|
||||
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
sa != null ) {
|
||||
sb.append(sa.getStackDescription()).append("\n");
|
||||
}
|
||||
sb.append(String.format("Choose %s to tap for %s .\nRemaining mana cost is %s", cardType, description, remainingCost.toString()));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@@ -8,7 +8,9 @@ import forge.game.GameEntity;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.model.FModel;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.properties.ForgePreferences;
|
||||
|
||||
public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyncronizedBase {
|
||||
private static final long serialVersionUID = -2305549394512889450L;
|
||||
@@ -51,7 +53,12 @@ public abstract class InputSelectManyBase<T extends GameEntity> extends InputSyn
|
||||
|
||||
@Override
|
||||
public final void showMessage() {
|
||||
showMessage(getMessage());
|
||||
if ( FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT) &&
|
||||
(sa!=null) ) {
|
||||
showMessage( sa.getStackDescription() + "\n" + getMessage(), sa.getView() ) ;
|
||||
} else {
|
||||
showMessage(getMessage(), (sa!=null)?sa.getView():null);
|
||||
}
|
||||
getController().getGui().updateButtons(getOwner(), hasEnoughTargets(), allowCancel, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,14 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
// Display targeting card in cardDetailPane in case it's not obviously visible.
|
||||
getController().getGui().setCard(CardView.get(sa.getHostCard()));
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("Targeted:\n");
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) {
|
||||
// sb.append(sa.getStackDescription().replace("(Targeting ERROR)", "")).append("\n<b>").append(tgt.getVTSelection()).append("</b>\n");
|
||||
if ( sa.isAbility() ) { sb.append(sa.getHostCard()).append(" - " ); }
|
||||
sb.append(sa.toString()).append("\n<b>").append(tgt.getVTSelection()).append("</b>\n");
|
||||
} else {
|
||||
sb.append(sa.getHostCard()).append(" - ").append(tgt.getVTSelection()).append("\n");
|
||||
}
|
||||
if ( ! targetDepth.entrySet().isEmpty() ) { sb.append("Targeted:\n"); }
|
||||
for (final Entry<GameEntity, Integer> o : targetDepth.entrySet()) {
|
||||
sb.append(o.getKey());
|
||||
if (o.getValue() > 1) {
|
||||
@@ -61,11 +68,6 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
sb.append("Parent Targeted:");
|
||||
sb.append(sa.getUniqueTargets()).append("\n");
|
||||
}
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DETAILED_SPELLDESC_IN_PROMPT)) {
|
||||
sb.append(sa.getStackDescription().replace("(Targeting ERROR)", "")).append("\n").append(tgt.getVTSelection());
|
||||
} else {
|
||||
sb.append(sa.getHostCard() + " - " + tgt.getVTSelection());
|
||||
}
|
||||
|
||||
final int maxTargets = tgt.getMaxTargets(sa.getHostCard(), sa);
|
||||
final int targeted = sa.getTargets().getNumTargeted();
|
||||
@@ -73,7 +75,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
|
||||
sb.append(String.format("\n(%d more can be targeted)", Integer.valueOf(maxTargets - targeted)));
|
||||
}
|
||||
|
||||
showMessage(sb.toString().replace("CARDNAME", sa.getHostCard().toString()));
|
||||
showMessage(sb.toString().replace("CARDNAME", sa.getHostCard().toString()), sa.getView());
|
||||
|
||||
// If reached Minimum targets, enable OK button
|
||||
if (!tgt.isMinTargetsChosen(sa.getHostCard(), sa) || tgt.isDividedAsYouChoose()) {
|
||||
|
||||
@@ -72,6 +72,12 @@ public class NetGuiGame extends AbstractGuiGame {
|
||||
updateGameView();
|
||||
send(ProtocolMethod.showPromptMessage, playerView, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showPromptMessage(final PlayerView playerView, final String message, final SpellAbilityView sav) {
|
||||
updateGameView();
|
||||
send(ProtocolMethod.showPromptMessage, playerView, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateButtons(final PlayerView owner, final String label1, final String label2, final boolean enable1, final boolean enable2, final boolean focus1) {
|
||||
|
||||
@@ -861,11 +861,10 @@ public class HumanCostDecision extends CostDecisionMakerBase {
|
||||
private final CardCollectionView validChoices;
|
||||
|
||||
public InputSelectCardToRemoveCounter(final PlayerControllerHuman controller, final int cntCounters, final CounterType cType, final CardCollectionView validCards, final SpellAbility sa) {
|
||||
super(controller, cntCounters, cntCounters);
|
||||
super(controller, cntCounters, cntCounters, sa);
|
||||
this.validChoices = validCards;
|
||||
counterType = cType;
|
||||
cardsChosen = cntCounters > 0 ? new HashMap<Card, Integer>() : null;
|
||||
this.sa = sa;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user