mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Resolve "Use hash set instead of enum set for Keyword sets"
This commit is contained in:
@@ -124,7 +124,8 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
|
||||
private final PlayerCollection mayLookFaceDownExile = new PlayerCollection();
|
||||
private final PlayerCollection mayLookTemp = new PlayerCollection();
|
||||
|
||||
private final Multimap<Long, Keyword> cantHaveKeywords = MultimapBuilder.hashKeys().enumSetValues(Keyword.class).build();
|
||||
// don't use Enum Set Values or it causes a slow down
|
||||
private final Multimap<Long, Keyword> cantHaveKeywords = MultimapBuilder.hashKeys().hashSetValues().build();
|
||||
|
||||
private final Map<CounterType, Long> counterTypeTimestamps = Maps.newHashMap();
|
||||
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
package forge.game.keyword;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.MultimapBuilder;
|
||||
|
||||
import forge.game.card.Card;
|
||||
|
||||
public class KeywordCollection implements Iterable<String>, Serializable {
|
||||
private static final long serialVersionUID = -2882986558147844702L;
|
||||
public class KeywordCollection implements Iterable<KeywordInterface> {
|
||||
|
||||
private boolean hidden = false;
|
||||
|
||||
private transient KeywordCollectionView view;
|
||||
private final Multimap<Keyword, KeywordInterface> map = MultimapBuilder.enumKeys(Keyword.class)
|
||||
// don't use enumKeys it causes a slow down
|
||||
private final Multimap<Keyword, KeywordInterface> map = MultimapBuilder.hashKeys()
|
||||
.arrayListValues().build();
|
||||
|
||||
public KeywordCollection() {
|
||||
@@ -157,35 +157,20 @@ public class KeywordCollection implements Iterable<String>, Serializable {
|
||||
return map.get(keyword);
|
||||
}
|
||||
|
||||
public List<String> asStringList() {
|
||||
List<String> result = Lists.newArrayList();
|
||||
for (KeywordInterface kw : getValues()) {
|
||||
result.add(kw.getOriginal());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setHostCard(final Card host) {
|
||||
for (KeywordInterface k : map.values()) {
|
||||
k.setHostCard(host);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<String> iterator() {
|
||||
return new Iterator<String>() {
|
||||
private final Iterator<KeywordInterface> iterator = map.values().iterator();
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return iterator.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String next() {
|
||||
KeywordInterface entry = iterator.next();
|
||||
return entry.getOriginal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
//Don't support this
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@@ -204,8 +189,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
|
||||
return view;
|
||||
}
|
||||
|
||||
public class KeywordCollectionView implements Iterable<String>, Serializable {
|
||||
private static final long serialVersionUID = 7536969077044188264L;
|
||||
public class KeywordCollectionView implements Iterable<KeywordInterface> {
|
||||
|
||||
protected KeywordCollectionView() {
|
||||
}
|
||||
@@ -229,9 +213,18 @@ public class KeywordCollection implements Iterable<String>, Serializable {
|
||||
return KeywordCollection.this.contains(keyword);
|
||||
}
|
||||
|
||||
public List<String> asStringList() {
|
||||
return KeywordCollection.this.asStringList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<String> iterator() {
|
||||
public Iterator<KeywordInterface> iterator() {
|
||||
return KeywordCollection.this.iterator();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<KeywordInterface> iterator() {
|
||||
return this.map.values().iterator();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1236,7 +1236,8 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
|
||||
public boolean hasProtectionFrom(final Card source, final boolean checkSBA, final boolean damageSource) {
|
||||
final boolean colorlessDamage = damageSource && source.hasKeyword("Colorless Damage Source");
|
||||
for (String kw : keywords) {
|
||||
for (KeywordInterface ki : keywords) {
|
||||
String kw = ki.getOriginal();
|
||||
if (kw.startsWith("Protection")) {
|
||||
if (kw.startsWith("Protection:")) { // uses isValid
|
||||
final String characteristic = kw.split(":")[1];
|
||||
@@ -3226,7 +3227,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
keywordEffect.updateAbilityTextForView();
|
||||
boolean headerAdded = false;
|
||||
StringBuilder kw = new StringBuilder();
|
||||
for(String k : keywords) {
|
||||
for(KeywordInterface k : keywords) {
|
||||
if(!headerAdded) {
|
||||
headerAdded = true;
|
||||
kw.append(this.getName()).append(" has: \n");
|
||||
|
||||
@@ -311,7 +311,7 @@ public class PlayerView extends GameEntityView {
|
||||
return getKeywords().contains(keyword);
|
||||
}
|
||||
void updateKeywords(Player p) {
|
||||
set(TrackableProperty.Keywords, ImmutableMultiset.copyOf(p.getKeywords()));
|
||||
set(TrackableProperty.Keywords, ImmutableMultiset.copyOf(p.getKeywords().asStringList()));
|
||||
}
|
||||
|
||||
public List<CardView> getCommanders() {
|
||||
|
||||
Reference in New Issue
Block a user