diff --git a/forge-game/src/main/java/forge/game/spellability/StackItemView.java b/forge-game/src/main/java/forge/game/spellability/StackItemView.java index efe19f0786e..1a0ef4755a5 100644 --- a/forge-game/src/main/java/forge/game/spellability/StackItemView.java +++ b/forge-game/src/main/java/forge/game/spellability/StackItemView.java @@ -38,6 +38,7 @@ public class StackItemView extends TrackableObject implements IHasCardView { updateAbility(si); updateOptionalTrigger(si); updateSubInstance(si); + updateOptionalCost(si); } public String getKey() { @@ -47,6 +48,55 @@ public class StackItemView extends TrackableObject implements IHasCardView { set(TrackableProperty.Key, si.getSpellAbility(false).yieldKey()); } + public String getOptionalCostString() { + return get(TrackableProperty.OptionalCosts); + } + void updateOptionalCost(SpellAbilityStackInstance si) { + String OptionalCostString = ""; + boolean kicked = false; + boolean entwined = false; + boolean buyback = false; + boolean retraced = false; + boolean jumpstart = false; + boolean additional = false; + boolean alternate = false; + boolean generic = false; + + for (OptionalCost cost : si.getSpellAbility(false).getOptionalCosts()) { + if (cost == OptionalCost.Kicker1 || cost == OptionalCost.Kicker2) + kicked = true; + if (cost == OptionalCost.Entwine) + entwined = true; + if (cost == OptionalCost.Buyback) + buyback = true; + if (cost == OptionalCost.Retrace) + retraced = true; + if (cost == OptionalCost.Jumpstart) + jumpstart = true; + if (cost == OptionalCost.Flash) + additional = true; + if (cost == OptionalCost.Generic) + generic = true; + if (cost == OptionalCost.AltCost) + alternate = true; + } + if (!alternate) { + if (kicked && !generic) + OptionalCostString += "Kicked"; + if (entwined) + OptionalCostString += OptionalCostString.equals("") ? "Entwined" : ", Entwined"; + if (buyback) + OptionalCostString += OptionalCostString.equals("") ? "Buyback" : ", Buyback"; + if (retraced) + OptionalCostString += OptionalCostString.equals("") ? "Retraced" : ", Retraced"; + if (jumpstart) + OptionalCostString += OptionalCostString.equals("") ? "Jumpstart" : ", Jumpstart"; + if (additional || generic) + OptionalCostString += OptionalCostString.equals("") ? "Additional" : ", Additional"; + } + set(TrackableProperty.OptionalCosts, OptionalCostString); + } + public int getSourceTrigger() { return get(TrackableProperty.SourceTrigger); } diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 64319a6ba1e..1f0ad806d57 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -187,6 +187,7 @@ public enum TrackableProperty { SubInstance(TrackableTypes.StackItemViewType), Ability(TrackableTypes.BooleanType), OptionalTrigger(TrackableTypes.BooleanType), + OptionalCosts(TrackableTypes.StringType), //Combat AttackersWithDefenders(TrackableTypes.GenericMapType, FreezeMode.IgnoresFreeze), diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 498f857d045..763c8170e1f 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -364,6 +364,7 @@ public class VStack extends FDropDown { float y = 0; float w = getWidth(); float h = preferredHeight; + CardView sourceCard = stackInstance.getSourceCard(); boolean needAlpha = (activeStackInstance != stackInstance); if (needAlpha) { //use alpha for non-active items on stack @@ -382,16 +383,17 @@ public class VStack extends FDropDown { x += PADDING; y += PADDING; - CardRenderer.drawCardWithOverlays(g, stackInstance.getSourceCard(), x, y, CARD_WIDTH, CARD_HEIGHT, CardStackPosition.Top, true, false, false); + CardRenderer.drawCardWithOverlays(g, sourceCard, x, y, CARD_WIDTH, CARD_HEIGHT, CardStackPosition.Top, true, false, false); x += CARD_WIDTH + PADDING; w -= x + PADDING - BORDER_THICKNESS; h -= y + PADDING - BORDER_THICKNESS; - String name = stackInstance.getSourceCard().getName(); + String name = sourceCard.getName(); int index = text.indexOf(name); String newtext = ""; - String cId = "(" + stackInstance.getSourceCard().getId() + ")"; + String cId = "(" + sourceCard.getId() + ")"; + String optionalCostString = !stackInstance.getOptionalCostString().equals("") ? " ("+ stackInstance.getOptionalCostString() + ")" : ""; if (index == -1) { newtext = TextUtil.fastReplace(TextUtil.fastReplace(text.trim(),"--","-"),"- -","-"); @@ -405,7 +407,7 @@ public class VStack extends FDropDown { newtext = TextUtil.fastReplace(trimSecond, " "+cId, name); if(newtext.equals("\n"+name)) - textRenderer.drawText(g, name + " " + cId, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true); + textRenderer.drawText(g, name + " " + cId + optionalCostString, FONT, foreColor, x, y, w, h, y, h, true, Align.left, true); else { newtext = TextUtil.fastReplace(TextUtil.fastReplace(newtext,name+" -","-"), "\n ", "\n"); newtext = "\n"+ TextUtil.fastReplace(newtext.trim(),"--","-");