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/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/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/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/card/package-info.java -text
forge-game/src/main/java/forge/game/combat/AttackConstraints.java -text forge-game/src/main/java/forge/game/combat/AttackConstraints.java -text
forge-game/src/main/java/forge/game/combat/AttackRequirement.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.CardFactoryUtil;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Expressions; import forge.util.Expressions;
@@ -20,7 +22,7 @@ import com.google.common.collect.Maps;
* Base class for Triggers,ReplacementEffects and StaticAbilities. * Base class for Triggers,ReplacementEffects and StaticAbilities.
* *
*/ */
public abstract class CardTraitBase extends GameObject { public abstract class CardTraitBase extends GameObject implements IHasCardView {
/** The host card. */ /** The host card. */
protected Card hostCard; 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; package forge.game.spellability;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.card.mana.ManaCost; import forge.card.mana.ManaCost;
import forge.game.CardTraitBase; import forge.game.CardTraitBase;
import forge.game.Game; import forge.game.Game;

View File

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

View File

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

View File

@@ -1,13 +1,14 @@
package forge.game.spellability; package forge.game.spellability;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.PlayerView; import forge.game.player.PlayerView;
import forge.trackable.TrackableCollection; import forge.trackable.TrackableCollection;
import forge.trackable.TrackableObject; import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty; import forge.trackable.TrackableProperty;
import forge.util.FCollectionView; import forge.util.FCollectionView;
public class StackItemView extends TrackableObject { public class StackItemView extends TrackableObject implements IHasCardView {
private static final long serialVersionUID = 6733415646691356052L; private static final long serialVersionUID = 6733415646691356052L;
public static StackItemView get(SpellAbilityStackInstance si) { public static StackItemView get(SpellAbilityStackInstance si) {
@@ -113,4 +114,9 @@ public class StackItemView extends TrackableObject {
public String toString() { public String toString() {
return getText(); 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.CardRenderer.CardStackPosition;
import forge.card.CardZoom.ActivateHandler; import forge.card.CardZoom.ActivateHandler;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.game.card.IHasCardView;
import forge.game.player.PlayerView; import forge.game.player.PlayerView;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.spellability.SpellAbilityView;
import forge.game.spellability.StackItemView; import forge.game.spellability.StackItemView;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.screens.match.MatchController; import forge.screens.match.MatchController;
@@ -63,11 +63,8 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
else if (item instanceof CardView) { else if (item instanceof CardView) {
renderer = new CardItemRenderer(); renderer = new CardItemRenderer();
} }
else if (item instanceof SpellAbilityView) { else if (item instanceof IHasCardView) {
renderer = new SpellAbilityItemRenderer(); renderer = new IHasCardViewItemRenderer();
}
else if (item instanceof SpellAbilityStackInstance) {
renderer = new StackItemRenderer();
} }
else if (item instanceof PlayerView) { else if (item instanceof PlayerView) {
renderer = new PlayerItemRenderer(); renderer = new PlayerItemRenderer();
@@ -408,7 +405,7 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
} }
} }
//special renderer for SpellAbilities //special renderer for SpellAbilities
protected class SpellAbilityItemRenderer extends ItemRenderer { protected class IHasCardViewItemRenderer extends ItemRenderer {
private final TextRenderer textRenderer = new TextRenderer(true); private final TextRenderer textRenderer = new TextRenderer(true);
@Override @Override
@@ -424,7 +421,7 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
@Override @Override
public boolean tap(Integer index, T value, float x, float y, int count) { public boolean tap(Integer index, T value, float x, float y, int count) {
if (x <= VStack.CARD_WIDTH + 2 * FList.PADDING) { if (x <= VStack.CARD_WIDTH + 2 * FList.PADDING) {
CardZoom.show(((SpellAbilityView)value).getHostCard()); CardZoom.show(((IHasCardView)value).getCardView());
return true; return true;
} }
return false; return false;
@@ -432,59 +429,18 @@ public class FChoiceList<T> extends FList<T> implements ActivateHandler {
@Override @Override
public boolean longPress(Integer index, T value, float x, float y) { public boolean longPress(Integer index, T value, float x, float y) {
CardZoom.show(((SpellAbilityView)value).getHostCard()); CardZoom.show(((IHasCardView)value).getCardView());
return true; return true;
} }
@Override @Override
public void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h) { 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, ((IHasCardView)value).getCardView(), x, y, VStack.CARD_WIDTH, VStack.CARD_HEIGHT, CardStackPosition.Top);
CardRenderer.drawCardWithOverlays(g, spellAbility.getHostCard(), x, y, VStack.CARD_WIDTH, VStack.CARD_HEIGHT, CardStackPosition.Top);
float dx = VStack.CARD_WIDTH + FList.PADDING; float dx = VStack.CARD_WIDTH + FList.PADDING;
x += dx; x += dx;
w -= dx; w -= dx;
textRenderer.drawText(g, spellAbility.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);
}
}
//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);
} }
} }
protected class PlayerItemRenderer extends ItemRenderer { protected class PlayerItemRenderer extends ItemRenderer {