Merge branch 'trackerRevealLKI' into 'master'

PlayerControllerHuman: fix reveal on LKI card list

See merge request core-developers/forge!2848
This commit is contained in:
Sol
2020-06-07 14:44:16 +00:00
6 changed files with 26 additions and 9 deletions

View File

@@ -546,11 +546,16 @@ public class Game {
} }
public Card findByView(CardView view) { public Card findByView(CardView view) {
if (view == null) {
return null;
}
CardIdVisitor visit = new CardIdVisitor(view.getId()); CardIdVisitor visit = new CardIdVisitor(view.getId());
if (ZoneType.Stack.equals(view.getZone())) { if (ZoneType.Stack.equals(view.getZone())) {
visit.visitAll(getStackZone()); visit.visitAll(getStackZone());
} else { } else if (view.getController() != null && view.getZone() != null) {
visit.visitAll(getPlayer(view.getController()).getZone(view.getZone())); visit.visitAll(getPlayer(view.getController()).getZone(view.getZone()));
} else { // fallback if view doesn't has controller or zone set for some reason
forEachCardInGame(visit);
} }
return visit.getFound(); return visit.getFound();
} }

View File

@@ -56,6 +56,7 @@ import forge.game.zone.ZoneType;
import forge.item.IPaperCard; import forge.item.IPaperCard;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.trackable.TrackableProperty; import forge.trackable.TrackableProperty;
import forge.trackable.Tracker;
import forge.util.*; import forge.util.*;
import forge.util.collect.FCollection; import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
@@ -304,11 +305,14 @@ public class Card extends GameEntity implements Comparable<Card> {
* @see IPaperCard * @see IPaperCard
*/ */
public Card(final int id0, final IPaperCard paperCard0, final Game game0) { public Card(final int id0, final IPaperCard paperCard0, final Game game0) {
this(id0, paperCard0, game0, game0 == null ? null : game0.getTracker());
}
public Card(final int id0, final IPaperCard paperCard0, final Game game0, final Tracker tracker0) {
super(id0); super(id0);
game = game0; game = game0;
paperCard = paperCard0; paperCard = paperCard0;
view = new CardView(id0, game == null ? null : game.getTracker()); view = new CardView(id0, tracker0);
currentState = new CardState(view.getCurrentState(), this); currentState = new CardState(view.getCurrentState(), this);
states.put(CardStateName.Original, currentState); states.put(CardStateName.Original, currentState);
view.updateChangedColorWords(this); view.updateChangedColorWords(this);

View File

@@ -206,7 +206,7 @@ public final class CardUtil {
.build() .build()
); );
final Card newCopy = new Card(in.getId(), in.getPaperCard(), in.getGame()); final Card newCopy = new Card(in.getId(), in.getPaperCard(), in.getGame(), null);
newCopy.setSetCode(in.getSetCode()); newCopy.setSetCode(in.getSetCode());
newCopy.setOwner(in.getOwner()); newCopy.setOwner(in.getOwner());
newCopy.setController(in.getController(), 0); newCopy.setController(in.getController(), 0);

View File

@@ -876,7 +876,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
try { try {
clone = (SpellAbility) clone(); clone = (SpellAbility) clone();
clone.id = lki ? id : nextId(); clone.id = lki ? id : nextId();
clone.view = new SpellAbilityView(clone); clone.view = new SpellAbilityView(clone, lki || host.getGame() == null ? null : host.getGame().getTracker());
// don't use setHostCard to not trigger the not copied parts yet // don't use setHostCard to not trigger the not copied parts yet

View File

@@ -8,6 +8,7 @@ import forge.game.card.CardView;
import forge.game.card.IHasCardView; import forge.game.card.IHasCardView;
import forge.trackable.TrackableObject; import forge.trackable.TrackableObject;
import forge.trackable.TrackableProperty; import forge.trackable.TrackableProperty;
import forge.trackable.Tracker;
public class SpellAbilityView extends TrackableObject implements IHasCardView { public class SpellAbilityView extends TrackableObject implements IHasCardView {
private static final long serialVersionUID = 2514234930798754769L; private static final long serialVersionUID = 2514234930798754769L;
@@ -25,7 +26,10 @@ public class SpellAbilityView extends TrackableObject implements IHasCardView {
} }
SpellAbilityView(final SpellAbility sa) { SpellAbilityView(final SpellAbility sa) {
super(sa.getId(), sa.getHostCard() == null || sa.getHostCard().getGame() == null ? null : sa.getHostCard().getGame().getTracker()); this(sa, sa.getHostCard() == null || sa.getHostCard().getGame() == null ? null : sa.getHostCard().getGame().getTracker());
}
SpellAbilityView(final SpellAbility sa, Tracker tracker) {
super(sa.getId(), tracker);
updateHostCard(sa); updateHostCard(sa);
updateDescription(sa); updateDescription(sa);
updatePromptIfOnlyPossibleAbility(sa); updatePromptIfOnlyPossibleAbility(sa);

View File

@@ -747,12 +747,16 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
} }
@Override @Override
public void reveal(final CardCollectionView cards, final ZoneType zone, final Player owner, final String message) { public void reveal(final CardCollectionView cards, final ZoneType zone, final Player owner, String message) {
reveal(CardView.getCollection(cards), zone, PlayerView.get(owner), message); reveal(cards, zone, PlayerView.get(owner), message);
} }
@Override @Override
public void reveal(final List<CardView> cards, final ZoneType zone, final PlayerView owner, String message) { public void reveal(final List<CardView> cards, final ZoneType zone, final PlayerView owner, String message) {
reveal(getCardList(cards), zone, owner, message);
}
protected void reveal(final CardCollectionView cards, final ZoneType zone, final PlayerView owner, String message) {
if (StringUtils.isBlank(message)) { if (StringUtils.isBlank(message)) {
message = localizer.getMessage("lblLookCardInPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase()); message = localizer.getMessage("lblLookCardInPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase());
} else { } else {
@@ -760,8 +764,8 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
} }
final String fm = MessageUtil.formatMessage(message, getLocalPlayerView(), owner); final String fm = MessageUtil.formatMessage(message, getLocalPlayerView(), owner);
if (!cards.isEmpty()) { if (!cards.isEmpty()) {
tempShowCards(getCardList(cards)); tempShowCards(cards);
getGui().reveal(fm, cards); getGui().reveal(fm, CardView.getCollection(cards));
endTempShowCards(); endTempShowCards();
} else { } else {
getGui().message(MessageUtil.formatMessage(localizer.getMessage("lblThereNoCardInPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase()), getGui().message(MessageUtil.formatMessage(localizer.getMessage("lblThereNoCardInPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase()),