Use interface to simplify getting list items with associated card views to display card image

This commit is contained in:
drdev
2015-04-06 19:47:20 +00:00
parent 68b8a87a40
commit 70456827be
8 changed files with 45 additions and 56 deletions

1
.gitattributes vendored
View File

@@ -471,6 +471,7 @@ forge-game/src/main/java/forge/game/card/CardState.java -text
forge-game/src/main/java/forge/game/card/CardUtil.java svneol=native#text/plain
forge-game/src/main/java/forge/game/card/CardView.java -text
forge-game/src/main/java/forge/game/card/CounterType.java svneol=native#text/plain
forge-game/src/main/java/forge/game/card/IHasCardView.java -text
forge-game/src/main/java/forge/game/card/package-info.java -text
forge-game/src/main/java/forge/game/combat/AttackConstraints.java -text
forge-game/src/main/java/forge/game/combat/AttackRequirement.java -text

View File

@@ -7,6 +7,8 @@ import forge.game.card.CardCollection;
import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists;
import forge.game.card.CardUtil;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.Expressions;
@@ -20,7 +22,7 @@ import com.google.common.collect.Maps;
* Base class for Triggers,ReplacementEffects and StaticAbilities.
*
*/
public abstract class CardTraitBase extends GameObject {
public abstract class CardTraitBase extends GameObject implements IHasCardView {
/** The host card. */
protected Card hostCard;
@@ -385,4 +387,9 @@ public abstract class CardTraitBase extends GameObject {
}
}
}
@Override
public CardView getCardView() {
return CardView.get(hostCard);
}
}

View File

@@ -0,0 +1,5 @@
package forge.game.card;
public interface IHasCardView {
CardView getCardView();
}

View File

@@ -18,6 +18,7 @@
package forge.game.spellability;
import com.google.common.collect.Iterables;
import forge.card.mana.ManaCost;
import forge.game.CardTraitBase;
import forge.game.Game;

View File

@@ -20,6 +20,8 @@ package forge.game.spellability;
import forge.game.IIdentifiable;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.Player;
import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
@@ -39,7 +41,7 @@ import java.util.Set;
* @author Forge
* @version $Id$
*/
public class SpellAbilityStackInstance implements IIdentifiable {
public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
private static int maxId = 0;
private static int nextId() { return ++maxId; }
@@ -311,4 +313,9 @@ public class SpellAbilityStackInstance implements IIdentifiable {
public StackItemView getView() {
return view;
}
@Override
public CardView getCardView() {
return CardView.get(getSourceCard());
}
}

View File

@@ -1,11 +1,12 @@
package forge.game.spellability;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.trackable.TrackableCollection;
import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty;
public class SpellAbilityView extends TrackableObject {
public class SpellAbilityView extends TrackableObject implements IHasCardView {
private static final long serialVersionUID = 2514234930798754769L;
public static SpellAbilityView get(SpellAbility spab) {
@@ -62,4 +63,9 @@ public class SpellAbilityView extends TrackableObject {
void updatePromptIfOnlyPossibleAbility(SpellAbility sa) {
set(TrackableProperty.PromptIfOnlyPossibleAbility, sa.promptIfOnlyPossibleAbility());
}
@Override
public CardView getCardView() {
return getHostCard();
}
}

View File

@@ -1,13 +1,14 @@
package forge.game.spellability;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.PlayerView;
import forge.trackable.TrackableCollection;
import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty;
import forge.util.FCollectionView;
public class StackItemView extends TrackableObject {
public class StackItemView extends TrackableObject implements IHasCardView {
private static final long serialVersionUID = 6733415646691356052L;
public static StackItemView get(SpellAbilityStackInstance si) {
@@ -113,4 +114,9 @@ public class StackItemView extends TrackableObject {
public String toString() {
return getText();
}
@Override
public CardView getCardView() {
return getSourceCard();
}
}

View File

@@ -16,9 +16,9 @@ import forge.card.CardZoom;
import forge.card.CardRenderer.CardStackPosition;
import forge.card.CardZoom.ActivateHandler;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.PlayerView;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.SpellAbilityView;
import forge.game.spellability.StackItemView;
import forge.item.PaperCard;
import forge.screens.match.MatchController;
@@ -63,11 +63,8 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
else if (item instanceof CardView) {
renderer = new CardItemRenderer();
}
else if (item instanceof SpellAbilityView) {
renderer = new SpellAbilityItemRenderer();
}
else if (item instanceof SpellAbilityStackInstance) {
renderer = new StackItemRenderer();
else if (item instanceof IHasCardView) {
renderer = new IHasCardViewItemRenderer();
}
else if (item instanceof PlayerView) {
renderer = new PlayerItemRenderer();
@@ -408,7 +405,7 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
}
}
//special renderer for SpellAbilities
protected class SpellAbilityItemRenderer extends ItemRenderer {
protected class IHasCardViewItemRenderer extends ItemRenderer {
private final TextRenderer textRenderer = new TextRenderer(true);
@Override
@@ -424,7 +421,7 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
@Override
public boolean tap(Integer index, T value, float x, float y, int count) {
if (x <= VStack.CARD_WIDTH + 2 * FList.PADDING) {
CardZoom.show(((SpellAbilityView)value).getHostCard());
CardZoom.show(((IHasCardView)value).getCardView());
return true;
}
return false;
@@ -432,59 +429,18 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
@Override
public boolean longPress(Integer index, T value, float x, float y) {
CardZoom.show(((SpellAbilityView)value).getHostCard());
CardZoom.show(((IHasCardView)value).getCardView());
return true;
}
@Override
public void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h) {
SpellAbilityView spellAbility = (SpellAbilityView)value;
CardRenderer.drawCardWithOverlays(g, spellAbility.getHostCard(), x, y, VStack.CARD_WIDTH, VStack.CARD_HEIGHT, CardStackPosition.Top);
CardRenderer.drawCardWithOverlays(g, ((IHasCardView)value).getCardView(), x, y, VStack.CARD_WIDTH, VStack.CARD_HEIGHT, CardStackPosition.Top);
float dx = VStack.CARD_WIDTH + FList.PADDING;
x += dx;
w -= dx;
textRenderer.drawText(g, spellAbility.toString(), font, foreColor, x, y, w, h, y, h, true, HAlignment.LEFT, true);
}
}
//special renderer for StackItems
protected class StackItemRenderer extends ItemRenderer {
private final TextRenderer textRenderer = new TextRenderer(true);
@Override
public FSkinFont getDefaultFont() {
return FSkinFont.get(14);
}
@Override
public float getItemHeight() {
return VStack.CARD_HEIGHT + 2 * FList.PADDING;
}
@Override
public boolean tap(Integer index, T value, float x, float y, int count) {
if (x <= VStack.CARD_WIDTH + 2 * FList.PADDING) {
CardZoom.show(((SpellAbilityStackInstance)value).getView().getSourceCard());
return true;
}
return false;
}
@Override
public boolean longPress(Integer index, T value, float x, float y) {
CardZoom.show(((SpellAbilityStackInstance)value).getView().getSourceCard());
return true;
}
@Override
public void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h) {
StackItemView stackItem = ((SpellAbilityStackInstance)value).getView();
CardRenderer.drawCardWithOverlays(g, stackItem.getSourceCard(), x, y, VStack.CARD_WIDTH, VStack.CARD_HEIGHT, CardStackPosition.Top);
float dx = VStack.CARD_WIDTH + FList.PADDING;
x += dx;
w -= dx;
textRenderer.drawText(g, stackItem.toString(), font, foreColor, x, y, w, h, y, h, true, HAlignment.LEFT, true);
textRenderer.drawText(g, value.toString(), font, foreColor, x, y, w, h, y, h, true, HAlignment.LEFT, true);
}
}
protected class PlayerItemRenderer extends ItemRenderer {