package com.cardshifter.gdx.ui.zones; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction; import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup; import com.cardshifter.api.outgoing.CardInfoMessage; import com.cardshifter.api.outgoing.ZoneMessage; import com.cardshifter.gdx.ZoomCardCallback; import com.cardshifter.gdx.ui.CardshifterClientContext; import com.cardshifter.gdx.ui.EntityView; import com.cardshifter.gdx.ui.cards.CardView; import com.cardshifter.gdx.ui.cards.CardViewHidden; import com.cardshifter.gdx.ui.cards.CardViewSmall; import java.util.Map; public class DefaultZoneView extends ZoneView implements ZoomCardCallback { private final HorizontalGroup group; private final CardshifterClientContext context; private float initialCardViewWidth = 0; private float initialCardViewHeight = 0; private boolean cardZoomedIn = false; public DefaultZoneView(CardshifterClientContext context, ZoneMessage message, Map<Integer, EntityView> viewMap) { super(message); this.group = new HorizontalGroup(); this.group.space(5); this.group.fill(); this.context = context; for (int id : message.getEntities()) { viewMap.put(id, addCard(new CardInfoMessage(message.getId(), id, null))); } } @Override public final CardView onAddCard(CardInfoMessage message) { CardView view; if (message.getProperties() == null) { view = new CardViewHidden(context, message.getId()); } else { view = new CardViewSmall(context, message, this, false); } group.addActor(view.getActor()); return view; } @Override public Actor getActor() { return group; } /* @Override public void zoomCard(CardViewSmall cardView) { this.gameScreen.zoomCard(cardView); System.out.println("Zoom card found in DefaultZoneView"); } @Override public void endZoom(CardViewSmall cardView) { System.out.println("DefaultZoneView ending zoom"); } */ @Override public void zoomCard(final CardViewSmall cardView) { if (this.cardZoomedIn) { return; } final CardViewSmall cardViewCopy = new CardViewSmall(this.context, cardView.cardInfo, this, true); cardViewCopy.getActor().setPosition(Gdx.graphics.getWidth()/2.7f, Gdx.graphics.getHeight()/30); this.context.getStage().addActor(cardViewCopy.getActor()); this.initialCardViewWidth = cardView.getActor().getWidth(); this.initialCardViewHeight = cardView.getActor().getHeight(); SequenceAction sequence = new SequenceAction(); Runnable adjustForZoom = new Runnable() { @Override public void run() { cardViewCopy.zoom(); } }; sequence.addAction(Actions.sizeTo(Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()*0.9f, 0.2f)); sequence.addAction(Actions.run(adjustForZoom)); cardViewCopy.getActor().addAction(sequence); this.cardZoomedIn = true; } @Override public void endZoom(final CardViewSmall cardView) { if (cardView.isZoomed){ SequenceAction sequence = new SequenceAction(); Runnable endZoom = new Runnable() { @Override public void run() { cardView.endZoom(); cardView.getActor().remove(); DefaultZoneView.this.cardZoomedIn = false; } }; sequence.addAction(Actions.sizeTo(this.initialCardViewWidth, this.initialCardViewHeight, 0.2f)); sequence.addAction(Actions.run(endZoom)); cardView.getActor().addAction(sequence); } } }