Support extracting art from plane cards

This commit is contained in:
drdev
2015-12-05 22:35:28 +00:00
parent 930c08cce0
commit 67c70bffbb
8 changed files with 131 additions and 9 deletions

2
.gitattributes vendored
View File

@@ -1335,6 +1335,7 @@ forge-gui-mobile/src/forge/screens/online/OnlineMenu.java -text
forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java -text
forge-gui-mobile/src/forge/screens/planarconquest/ConquestPlaneSelector.java -text
forge-gui-mobile/src/forge/screens/planarconquest/ConquestPrefsScreen.java -text
forge-gui-mobile/src/forge/screens/planarconquest/LoadConquestScreen.java -text
forge-gui-mobile/src/forge/screens/planarconquest/NewConquestScreen.java -text
@@ -1385,6 +1386,7 @@ forge-gui-mobile/src/forge/toolbox/FScrollPane.java -text
forge-gui-mobile/src/forge/toolbox/FSpinner.java -text
forge-gui-mobile/src/forge/toolbox/FTextArea.java -text
forge-gui-mobile/src/forge/toolbox/FTextField.java -text
forge-gui-mobile/src/forge/toolbox/FTimer.java -text
forge-gui-mobile/src/forge/toolbox/FToggleSwitch.java -text
forge-gui-mobile/src/forge/toolbox/GuiChoose.java -text
forge-gui-mobile/src/forge/toolbox/GuiDialog.java -text

View File

@@ -19,6 +19,16 @@ public abstract class ForgeAnimation {
}
}
public void stop() {
if (!activeAnimations.contains(this)) { return; } //prevent stopping the same animation multiple times
activeAnimations.remove(this);
onEnd(false);
if (activeAnimations.isEmpty()) { //when all animations have stopped, turn continuous rendering back off
Forge.stopContinuousRendering();
}
}
public static void advanceAll() {
if (activeAnimations.isEmpty()) { return; }

View File

@@ -81,12 +81,14 @@ public class CardRenderer {
//extract card art from the given card
public static FImageComplex getCardArt(IPaperCard pc) {
return getCardArt(ImageKeys.getImageKey(pc, false), pc.getRules().getSplitType() == CardSplitType.Split);
CardType type = pc.getRules().getType();
return getCardArt(ImageKeys.getImageKey(pc, false), pc.getRules().getSplitType() == CardSplitType.Split, type.isPlane() || type.isPhenomenon());
}
public static FImageComplex getCardArt(CardView card) {
return getCardArt(card.getCurrentState().getImageKey(), card.isSplitCard());
CardTypeView type = card.getCurrentState().getType();
return getCardArt(card.getCurrentState().getImageKey(), card.isSplitCard(), type.isPlane() || type.isPhenomenon());
}
public static FImageComplex getCardArt(String imageKey, boolean isSplitCard) {
public static FImageComplex getCardArt(String imageKey, boolean isSplitCard, boolean isHorizontalCard) {
FImageComplex cardArt = cardArtCache.get(imageKey);
if (cardArt == null) {
Texture image = ImageCache.getImage(imageKey, true);
@@ -103,6 +105,16 @@ public class CardRenderer {
y = 0; //delay adjusting y and h until drawn
w *= 106f / 250f;
}
else if (isHorizontalCard) { //allow rotated image for horizontal cards
if (h > w) { //rotate image if its not the correct orientation
w = h;
h = image.getWidth();
}
x = w * 40f / 430f;
y = h * 40f / 300f;
w *= 349f / 430f;
h *= 156f / 300f;
}
else {
x = w * 0.1f;
y = h * 0.11f;

View File

@@ -93,7 +93,7 @@ public class MatchController extends AbstractGuiGame {
avatar = new FTextureRegionImage(FSkin.getAvatars().get(p.getAvatarIndex()));
}
else { //handle lobby players with art from cards
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false);
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false, false);
}
}
return avatar;

View File

@@ -0,0 +1,60 @@
package forge.screens.planarconquest;
import forge.Graphics;
import forge.assets.FImage;
import forge.card.CardRenderer;
import forge.item.PaperCard;
import forge.planarconquest.ConquestPlane;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FTimer;
import forge.util.collect.FCollectionView;
public class ConquestPlaneSelector extends FDisplayObject {
private static final ConquestPlane[] planes = ConquestPlane.values();
private final FTimer timer = new FTimer(2.5f) {
@Override
protected void tick() {
FCollectionView<PaperCard> planeCards = getSelectedPlane().getPlaneCards();
if (++artIndex == planeCards.size()) {
artIndex = 0;
}
currentArt = CardRenderer.getCardArt(planeCards.get(artIndex));
}
};
private int selectedIndex, artIndex;
private FImage currentArt;
public ConquestPlaneSelector() {
reset();
}
public ConquestPlane getSelectedPlane() {
return planes[selectedIndex];
}
public void activate() {
timer.start();
}
public void deactivate() {
timer.stop();
}
public void reset() {
selectedIndex = 0;
artIndex = 0;
currentArt = CardRenderer.getCardArt(getSelectedPlane().getPlaneCards().get(artIndex));
}
@Override
public void draw(Graphics g) {
float w = getWidth();
float h = getHeight();
if (currentArt != null) {
float artHeight = w * currentArt.getHeight() / currentArt.getWidth();
g.drawImage(currentArt, 0, (h - artHeight) / 2, w, artHeight);
}
}
}

View File

@@ -132,8 +132,7 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
}
private static class SelectStartingPlaneStep extends WizardStep<NewConquestScreenModel> {
private static final ConquestPlane[] planes = ConquestPlane.values();
private int selectedIndex;
private final ConquestPlaneSelector planeSelector = add(new ConquestPlaneSelector());
protected SelectStartingPlaneStep() {
super("Select Starting Plane");
@@ -141,21 +140,27 @@ public class NewConquestScreen extends MultiStepWizardScreen<NewConquestScreenMo
@Override
protected void doLayout(float width, float height) {
planeSelector.setBounds(0, 0, width, height);
}
@Override
protected void reset() {
selectedIndex = 0;
planeSelector.reset();
}
@Override
protected void onActivate(NewConquestScreenModel model) {
planeSelector.activate();
}
@Override
protected boolean updateModelAndAdvance(NewConquestScreenModel model) {
model.startingPlane = planes[selectedIndex];
return model.startingPlane != null;
model.startingPlane = planeSelector.getSelectedPlane();
if (model.startingPlane != null) {
planeSelector.deactivate();
return true;
}
return false;
}
}

View File

@@ -0,0 +1,29 @@
package forge.toolbox;
import forge.animation.ForgeAnimation;
public abstract class FTimer extends ForgeAnimation {
private final float interval;
private float elapsed;
public FTimer(float interval0) {
interval = interval0;
}
@Override
protected boolean advance(float dt) {
elapsed += dt;
while (elapsed >= interval) {
tick();
elapsed -= interval;
}
return true;
}
protected abstract void tick();
@Override
protected void onEnd(boolean endingAll) {
elapsed = 0;
}
}

View File

@@ -295,6 +295,10 @@ public enum ConquestPlane {
return commanders;
}
public FCollectionView<PaperCard> getPlaneCards() {
return planeCards;
}
public String toString() {
return name;
}