mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Merge branch 'highlight' into 'master'
Darken non-selectable cards in Desktop GUI See merge request core-developers/forge!1317
This commit is contained in:
@@ -397,6 +397,7 @@ public final class CMatchUI
|
|||||||
case Hand:
|
case Hand:
|
||||||
updateHand = true;
|
updateHand = true;
|
||||||
updateZones = true;
|
updateZones = true;
|
||||||
|
FloatingZone.refresh(owner, zone);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
updateZones = true;
|
updateZones = true;
|
||||||
@@ -524,6 +525,45 @@ public final class CMatchUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSelectables(final Iterable<CardView> cards) {
|
||||||
|
super.setSelectables(cards);
|
||||||
|
// update zones on tabletop and floating zones - non-selectable cards may be rendered differently
|
||||||
|
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||||
|
@Override public final void run() {
|
||||||
|
for (final PlayerView p : getGameView().getPlayers()) {
|
||||||
|
if ( p.getCards(ZoneType.Battlefield) != null ) {
|
||||||
|
updateCards(p.getCards(ZoneType.Battlefield));
|
||||||
|
}
|
||||||
|
if ( p.getCards(ZoneType.Hand) != null ) {
|
||||||
|
updateCards(p.getCards(ZoneType.Hand));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FloatingZone.refreshAll();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearSelectables() {
|
||||||
|
super.clearSelectables();
|
||||||
|
// update zones on tabletop and floating zones - non-selectable cards may be rendered differently
|
||||||
|
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||||
|
@Override public final void run() {
|
||||||
|
for (final PlayerView p : getGameView().getPlayers()) {
|
||||||
|
if ( p.getCards(ZoneType.Battlefield) != null ) {
|
||||||
|
updateCards(p.getCards(ZoneType.Battlefield));
|
||||||
|
}
|
||||||
|
if ( p.getCards(ZoneType.Hand) != null ) {
|
||||||
|
updateCards(p.getCards(ZoneType.Hand));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FloatingZone.refreshAll();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<JMenu> getMenus() {
|
public List<JMenu> getMenus() {
|
||||||
return menus.getMenus();
|
return menus.getMenus();
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
|||||||
g2d.rotate(getTappedAngle(), cardXOffset + edgeOffset, (cardYOffset + cardHeight)
|
g2d.rotate(getTappedAngle(), cardXOffset + edgeOffset, (cardYOffset + cardHeight)
|
||||||
- edgeOffset);
|
- edgeOffset);
|
||||||
}
|
}
|
||||||
super.paint(g2d);
|
super.paint(g2d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -268,25 +268,21 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
|||||||
final int cornerSize = noBorderPref && !cardImgHasAlpha ? 0 : Math.max(4, Math.round(cardWidth * CardPanel.ROUNDED_CORNER_SIZE));
|
final int cornerSize = noBorderPref && !cardImgHasAlpha ? 0 : Math.max(4, Math.round(cardWidth * CardPanel.ROUNDED_CORNER_SIZE));
|
||||||
final int offset = isTapped() && (!noBorderPref || cardImgHasAlpha) ? 1 : 0;
|
final int offset = isTapped() && (!noBorderPref || cardImgHasAlpha) ? 1 : 0;
|
||||||
|
|
||||||
// Magenta outline for when card was chosen to pay
|
// Magenta outline for when card is chosen
|
||||||
if (matchUI.isUsedToPay(getCard())) {
|
if (matchUI.isUsedToPay(getCard())) {
|
||||||
g2d.setColor(Color.magenta);
|
g2d.setColor(Color.magenta);
|
||||||
final int n2 = Math.max(4, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE));
|
final int n2 = Math.max(1, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE));
|
||||||
g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2);
|
|
||||||
} else if (matchUI.isSelectable(getCard())) { // Cyan outline for selectable cards
|
|
||||||
g2d.setColor(Color.cyan);
|
|
||||||
final int n2 = Math.max(4, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE));
|
|
||||||
g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2);
|
g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Green outline for hover
|
// Green outline for hover
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
g2d.setColor(Color.green);
|
g2d.setColor(Color.green);
|
||||||
final int n = Math.max(4, Math.round(cardWidth * CardPanel.SELECTED_BORDER_SIZE));
|
final int n = Math.max(1, Math.round(cardWidth * CardPanel.SELECTED_BORDER_SIZE));
|
||||||
g2d.fillRoundRect(cardXOffset - n, (cardYOffset - n) + offset, cardWidth + (n * 2), cardHeight + (n * 2), cornerSize + n , cornerSize + n);
|
g2d.fillRoundRect(cardXOffset - n, (cardYOffset - n) + offset, cardWidth + (n * 2), cardHeight + (n * 2), cornerSize + n , cornerSize + n);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Black fill - (will become outline for white bordered cards)
|
// Black fill - (will become an outline for white bordered cards)
|
||||||
g2d.setColor(Color.black);
|
g2d.setColor(Color.black);
|
||||||
g2d.fillRoundRect(cardXOffset, cardYOffset + offset, cardWidth, cardHeight, cornerSize, cornerSize);
|
g2d.fillRoundRect(cardXOffset, cardYOffset + offset, cardWidth, cardHeight, cornerSize, cornerSize);
|
||||||
|
|
||||||
@@ -309,6 +305,12 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
|||||||
g2d.fillRoundRect(cardXOffset + ins, cardYOffset + ins, cardWidth - ins*2, cardHeight - ins*2, cornerSize-ins, cornerSize-ins);
|
g2d.fillRoundRect(cardXOffset + ins, cardYOffset + ins, cardWidth - ins*2, cardHeight - ins*2, cornerSize-ins, cornerSize-ins);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (matchUI.isSelectable(getCard())) { // White border for selectable cards to further highlight them
|
||||||
|
g2d.setColor(Color.WHITE);
|
||||||
|
final int ins = 1;
|
||||||
|
g2d.fillRoundRect(cardXOffset+ins, cardYOffset+ins, cardWidth-ins*2, cardHeight-ins*2, cornerSize-ins, cornerSize-ins);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawManaCost(final Graphics g, final ManaCost cost, final int deltaY) {
|
private void drawManaCost(final Graphics g, final ManaCost cost, final int deltaY) {
|
||||||
@@ -332,6 +334,17 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
|||||||
drawFoilEffect(g, card, cardXOffset, cardYOffset,
|
drawFoilEffect(g, card, cardXOffset, cardYOffset,
|
||||||
cardWidth, cardHeight, Math.round(cardWidth * BLACK_BORDER_SIZE));
|
cardWidth, cardHeight, Math.round(cardWidth * BLACK_BORDER_SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean nonselectable = matchUI.isSelecting() && !matchUI.isSelectable(getCard());
|
||||||
|
// if selecting, darken non-selectable cards
|
||||||
|
if ( nonselectable ) {
|
||||||
|
boolean noBorderPref = !isPreferenceEnabled(FPref.UI_RENDER_BLACK_BORDERS);
|
||||||
|
boolean cardImgHasAlpha = imagePanel != null && imagePanel.getSrcImage() != null && imagePanel.getSrcImage().getColorModel().hasAlpha();
|
||||||
|
final int cornerSize = noBorderPref && !cardImgHasAlpha ? 0 : Math.max(4, Math.round(cardWidth * CardPanel.ROUNDED_CORNER_SIZE));
|
||||||
|
final int offset = isTapped() && (!noBorderPref || cardImgHasAlpha) ? 1 : 0;
|
||||||
|
g.setColor(new Color(0.0f,0.0f,0.0f,0.6f));
|
||||||
|
g.fillRoundRect(cardXOffset, cardYOffset + offset, cardWidth, cardHeight, cornerSize, cornerSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawFoilEffect(final Graphics g, final CardView card2, final int x, final int y, final int width, final int height, final int borderSize) {
|
public static void drawFoilEffect(final Graphics g, final CardView card2, final int x, final int y, final int width, final int height, final int borderSize) {
|
||||||
@@ -783,6 +796,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
|
|||||||
return FModel.getPreferences().getPrefBoolean(preferenceName);
|
return FModel.getPreferences().getPrefBoolean(preferenceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't show overlays on non-selectable cards when selecting
|
||||||
private boolean isShowingOverlays() {
|
private boolean isShowingOverlays() {
|
||||||
return isPreferenceEnabled(FPref.UI_SHOW_CARD_OVERLAYS) && card != null;
|
return isPreferenceEnabled(FPref.UI_SHOW_CARD_OVERLAYS) && card != null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,6 +94,11 @@ public class FloatingZone extends FloatingCardArea {
|
|||||||
}
|
}
|
||||||
floatingAreas.clear();
|
floatingAreas.clear();
|
||||||
}
|
}
|
||||||
|
public static void refreshAll() {
|
||||||
|
for (final FloatingZone cardArea : floatingAreas.values()) {
|
||||||
|
cardArea.refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final ZoneType zone;
|
private final ZoneType zone;
|
||||||
private PlayerView player;
|
private PlayerView player;
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ public interface IGuiGame {
|
|||||||
void setUsedToPay(CardView card, boolean value);
|
void setUsedToPay(CardView card, boolean value);
|
||||||
void setSelectables(final Iterable<CardView> cards);
|
void setSelectables(final Iterable<CardView> cards);
|
||||||
void clearSelectables();
|
void clearSelectables();
|
||||||
|
boolean isSelecting();
|
||||||
|
|
||||||
void awaitNextInput();
|
void awaitNextInput();
|
||||||
void cancelAwaitNextInput();
|
void cancelAwaitNextInput();
|
||||||
|
|||||||
@@ -230,6 +230,9 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
|
|||||||
public boolean isSelectable(final CardView card) {
|
public boolean isSelectable(final CardView card) {
|
||||||
return selectableCards.contains(card);
|
return selectableCards.contains(card);
|
||||||
}
|
}
|
||||||
|
public boolean isSelecting() {
|
||||||
|
return !selectableCards.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
/** Concede game, bring up WinLose UI. */
|
/** Concede game, bring up WinLose UI. */
|
||||||
public boolean concede() {
|
public boolean concede() {
|
||||||
|
|||||||
Reference in New Issue
Block a user