diff --git a/res/gui/display_layout.xml b/res/gui/display_layout.xml index fb04667e842..989e8a1e88a 100644 --- a/res/gui/display_layout.xml +++ b/res/gui/display_layout.xml @@ -219,7 +219,7 @@ 254 0 - 902 + 926 827 @@ -230,7 +230,7 @@ 254 0 - 902 + 926 147 @@ -251,7 +251,7 @@ 254 147 - 902 + 926 10 @@ -266,7 +266,7 @@ 254 157 - 902 + 926 169 @@ -287,7 +287,7 @@ 254 326 - 902 + 926 10 @@ -302,8 +302,8 @@ 254 336 - 902 - 154 + 926 + 187 @@ -322,8 +322,8 @@ 254 - 490 - 902 + 523 + 926 10 @@ -337,9 +337,9 @@ 254 - 500 - 902 - 178 + 533 + 926 + 145 @@ -359,7 +359,7 @@ 254 678 - 902 + 926 10 @@ -374,7 +374,7 @@ 254 688 - 902 + 926 139 @@ -408,7 +408,7 @@ - 1156 + 1180 0 10 827 @@ -423,9 +423,9 @@ - 1166 + 1190 0 - 274 + 250 827 @@ -434,9 +434,9 @@ - 1166 + 1190 0 - 274 + 250 409 @@ -455,9 +455,9 @@ - 1166 + 1190 409 - 274 + 250 10 @@ -470,9 +470,9 @@ - 1166 + 1190 419 - 274 + 250 408 diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index f68eb122e0c..76b06bcc641 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -978,7 +978,7 @@ public class CardFactoryUtil list = list.filter(new CardListFilter() { public boolean addCard(Card c) { - return (c.getType().contains("Mercenary") || c.getKeyword().contains("Changeling")) && c.isPermanent() ; + return ( (c.getType().contains("Mercenary") || c.getKeyword().contains("Changeling")) ) && c.isPermanent() ; } }); @@ -1082,7 +1082,7 @@ public class CardFactoryUtil list = list.filter(new CardListFilter() { public boolean addCard(Card c) { - return (c.getType().contains("Rebel") || c.getKeyword().contains("Changeling")) && c.isPermanent() ; + return ( (c.getType().contains("Rebel") || c.getKeyword().contains("Changeling"))) && c.isPermanent() ; } }); diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index efe89b32b79..c34b6803840 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -3747,12 +3747,10 @@ public class CardFactory_Creatures { return false; } //because this card has Flash - public boolean canPlay() + public boolean canPlay() { - if (!AllZone.GameAction.isCardInPlay(card)) - return true; - else - return false; + return AllZone.GameAction.isCardInZone(card, AllZone.Human_Hand) || + AllZone.GameAction.isCardInZone(card, AllZone.Computer_Hand); } }); }//*************** END ************ END ************************** diff --git a/src/forge/CardFactory_Equipment.java b/src/forge/CardFactory_Equipment.java index 801c5e3d125..1bf48fa7ae5 100644 --- a/src/forge/CardFactory_Equipment.java +++ b/src/forge/CardFactory_Equipment.java @@ -1882,17 +1882,15 @@ class CardFactory_Equipment { } }; - boost.setDescription("Remove a charge counter from Umezawa's Jitte: Equipped creature gets +2/+2 until end of turn."); - boost.setStackDescription(cardName + " - Equipped creature gets +2/+2 untin end of turn."); + boost.setDescription("Remove a charge counter from Umezawa's Jitte: Equipped creature gets +2/+2 until end of turn."); + boost.setStackDescription(cardName + " - Equipped creature gets +2/+2 untin end of turn."); - equip.setBeforePayMana(runtime); equip.setDescription("Equip: 2"); card.addSpellAbility(equip); card.addSpellAbility(boost); card.addSpellAbility(negBoost); card.addSpellAbility(gainLife); - } //*************** END ************ END ************************** diff --git a/src/forge/CardFactory_Lands.java b/src/forge/CardFactory_Lands.java index 353a86935c7..e76d63fc0c0 100644 --- a/src/forge/CardFactory_Lands.java +++ b/src/forge/CardFactory_Lands.java @@ -3119,7 +3119,6 @@ class CardFactory_Lands { }//transmute - return card; } diff --git a/src/forge/CardList.java b/src/forge/CardList.java index 45b4ff4c637..f2f85711bd0 100644 --- a/src/forge/CardList.java +++ b/src/forge/CardList.java @@ -102,6 +102,17 @@ public class CardList implements Iterable return c; } + + public CardList getImageName(String name) + { + CardList c = new CardList(); + + for(int i = 0; i < size(); i++) + if(getCard(i).getImageName().equals(name)) + c.add(getCard(i)); + + return c; + } //cardType is like "Land" or "Goblin", returns a new CardList that is a subset of current CardList public CardList getType(String cardType) { diff --git a/src/forge/CombatUtil.java b/src/forge/CombatUtil.java index 1cc1e685951..7b593de5b5e 100644 --- a/src/forge/CombatUtil.java +++ b/src/forge/CombatUtil.java @@ -584,7 +584,17 @@ public class CombatUtil PlayerZone play = AllZone.getZone(c); CardList clist = new CardList(play.getCards()); clist = clist.getName("Umezawa's Jitte"); - Card jitte = clist.get(0); + Card jitte; + if(clist.size() > 0) + jitte = clist.get(0); + else //jitte belongs to opponent + { + PlayerZone oppPlay = AllZone.getZone(Constant.Zone.Play, AllZone.GameAction.getOpponent(c.getController())); + CardList crdList = new CardList(oppPlay.getCards()); + crdList.getName("Umezawa's Jitte"); + jitte = crdList.get(0); + } + jitte.addCounter(Counters.CHARGE, 2); } } diff --git a/src/forge/ImageCache.java b/src/forge/ImageCache.java index 1c79a5ee73a..98796b85ac3 100644 --- a/src/forge/ImageCache.java +++ b/src/forge/ImageCache.java @@ -3,6 +3,7 @@ import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import javax.imageio.ImageIO; @@ -84,6 +85,20 @@ public class ImageCache implements NewConstants { /** * Put to cache. */ + + if (cache.size() >= 35) { + int count = 10; + ArrayList imgNames = new ArrayList(count); + for (String imgName : cache.keySet()) { + imgNames.add(imgName); + count--; + if (count == 0) + break; + } + for (String imgName : imgNames) + cache.remove(imgName); + } + cache.put(name, resized); return resized; diff --git a/src/forge/InputControl.java b/src/forge/InputControl.java index 7305df8f0ed..21c82ef6e43 100644 --- a/src/forge/InputControl.java +++ b/src/forge/InputControl.java @@ -1,5 +1,6 @@ package forge; - import java.util.*; + +import java.util.*; //@SuppressWarnings("unused") // java.util.* public class InputControl extends MyObservable implements java.io.Serializable @@ -182,6 +183,36 @@ package forge; } else if(phase.equals(Constant.Phase.End_Of_Turn)) { + System.out.println("Cache size: " + ImageCache.cache.size()); + + CardList visibleCards = new CardList(); + PlayerZone hPlay = AllZone.Human_Play; + PlayerZone hand = AllZone.Human_Hand; + PlayerZone cPlay = AllZone.Computer_Play; + + visibleCards.addAll(hPlay.getCards()); + visibleCards.addAll(hand.getCards()); + visibleCards.addAll(cPlay.getCards()); + + ArrayList list = new ArrayList(); + + Iterator iter = ImageCache.cache.keySet().iterator(); + while(iter.hasNext()) { + String cardName = iter.next(); + if ( !(cardName.startsWith("Swamp") || cardName.startsWith("Mountain") || cardName.startsWith("Island") + || cardName.startsWith("Plains") || cardName.startsWith("Forest")) && + visibleCards.getImageName(cardName).size() == 0 ) { + list.add(cardName); + } + } + + for (String s : list) + { + ImageCache.cache.remove(s); + System.out.println("Removing " + s + " from cache."); + } + + if(AllZone.Display.stopEOT()) return new Input_EOT(); else