changed MagicPermanentTriggerMap to EnumMap

master
melvin 2011-09-21 10:11:06 +08:00
parent 74dc2bcf22
commit 8738f0033f
3 changed files with 96 additions and 62 deletions

View File

@ -1051,10 +1051,14 @@ public class MagicGame {
// ***** STATICS *****
public final MagicPermanentStatic addStatic(final MagicPermanent permanent,final MagicStatic mstatic) {
final MagicPermanentStatic permanentStatic = new MagicPermanentStatic(getUniqueId(),permanent,mstatic);
statics.add(permanentStatic);
return permanentStatic;
public void addStatic(final MagicPermanent permanent) {
for (final MagicStatic mstatic : permanent.getCardDefinition().getStatics()) {
addStatic(permanent, mstatic);
}
}
public void addStatic(final MagicPermanent permanent, final MagicStatic mstatic) {
addStatic(new MagicPermanentStatic(getUniqueId(),permanent,mstatic));
}
public void addStatic(final MagicPermanentStatic permanentStatic) {
@ -1062,7 +1066,9 @@ public class MagicGame {
}
public void addStatics(final Collection<MagicPermanentStatic> aStatics) {
statics.addAll(aStatics);
for (final MagicPermanentStatic mpstatic : aStatics) {
addStatic(mpstatic);
}
}
public Collection<MagicPermanentStatic> getStatics(MagicLayer layer) {
@ -1070,13 +1076,11 @@ public class MagicGame {
}
public Collection<MagicPermanentStatic> removeTurnStatics() {
List<MagicPermanentStatic> removedStatics = new ArrayList<MagicPermanentStatic>();
statics.removeTurn(removedStatics);
return removedStatics;
return statics.removeTurn();
}
public void removeStatics(final MagicPermanent permanent,final Collection<MagicPermanentStatic> removedStatics) {
statics.remove(permanent, removedStatics);
public Collection<MagicPermanentStatic> removeStatics(final MagicPermanent permanent) {
return statics.remove(permanent);
}
public void removeStatic(final MagicPermanent permanent,final MagicStatic mstatic) {
@ -1091,31 +1095,36 @@ public class MagicGame {
this.immediate=immediate;
}
public MagicPermanentTrigger addTrigger(final MagicPermanent permanent,final MagicTrigger trigger) {
final MagicPermanentTrigger permanentTrigger=new MagicPermanentTrigger(getUniqueId(),permanent,trigger);
triggers.get(trigger.getType()).add(permanentTrigger);
return permanentTrigger;
public void addTrigger(final MagicPermanent permanent) {
for (final MagicTrigger trigger : permanent.getCardDefinition().getTriggers()) {
addTrigger(permanent, trigger);
}
}
public MagicPermanentTrigger addTrigger(final MagicPermanent permanent, final MagicTrigger trigger) {
return addTrigger(new MagicPermanentTrigger(getUniqueId(),permanent,trigger));
}
public void addTrigger(final MagicPermanentTrigger permanentTrigger) {
triggers.get(permanentTrigger.getTrigger().getType()).add(permanentTrigger);
public MagicPermanentTrigger addTrigger(final MagicPermanentTrigger permanentTrigger) {
triggers.add(permanentTrigger);
return permanentTrigger;
}
public MagicPermanentTrigger addTurnTrigger(final MagicPermanent permanent,final MagicTrigger trigger) {
final MagicPermanentTrigger permanentTrigger=addTrigger(permanent,trigger);
final MagicPermanentTrigger permanentTrigger = addTrigger(permanent,trigger);
turnTriggers.add(permanentTrigger);
return permanentTrigger;
}
public void addTurnTriggers(final List<MagicPermanentTrigger> triggersList) {
for (final MagicPermanentTrigger permanentTrigger : triggersList) {
triggers.get(permanentTrigger.getTrigger().getType()).add(permanentTrigger);
addTrigger(permanentTrigger);
}
turnTriggers.addAll(triggersList);
}
public void removeTurnTrigger(final MagicPermanentTrigger permanentTrigger) {
triggers.get(permanentTrigger.getTrigger().getType()).remove(permanentTrigger);
triggers.remove(permanentTrigger);
turnTriggers.remove(permanentTrigger);
}
@ -1123,24 +1132,15 @@ public class MagicGame {
if (turnTriggers.isEmpty()) {
return Collections.<MagicPermanentTrigger>emptyList();
}
final MagicPermanentTriggerList removedTriggers=new MagicPermanentTriggerList(turnTriggers);
for (final MagicPermanentTrigger permanentTrigger : turnTriggers) {
triggers.get(permanentTrigger.getTrigger().getType()).remove(permanentTrigger);
final MagicPermanentTriggerList removedTriggers = new MagicPermanentTriggerList(turnTriggers);
for (final MagicPermanentTrigger permanentTrigger : removedTriggers) {
removeTurnTrigger(permanentTrigger);
}
turnTriggers.clear();
return removedTriggers;
}
public void removeTriggers(final MagicPermanent permanent,final Collection<MagicPermanentTrigger> removedTriggers) {
for (final MagicTriggerType type : triggers.keySet()) {
for (final Iterator<MagicPermanentTrigger> iterator=triggers.get(type).iterator();iterator.hasNext();) {
final MagicPermanentTrigger permanentTrigger=iterator.next();
if (permanentTrigger.getPermanent()==permanent) {
iterator.remove();
removedTriggers.add(permanentTrigger);
}
}
}
public Collection<MagicPermanentTrigger> removeTriggers(final MagicPermanent permanent) {
return triggers.remove(permanent);
}
public void executeTrigger(

View File

@ -4,6 +4,7 @@ import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Map;
import java.util.EnumMap;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collection;
@ -42,14 +43,9 @@ public class MagicPermanentStaticMap {
public void add(final MagicPermanentStatic mpstatic) {
effects.get(mpstatic.getLayer()).add(mpstatic);
}
public void addAll(final Collection<MagicPermanentStatic> mpstatics) {
for (final MagicPermanentStatic mpstatic : mpstatics) {
add(mpstatic);
}
}
public void remove(final MagicPermanent permanent,final Collection<MagicPermanentStatic> removedStatics) {
public Collection<MagicPermanentStatic> remove(final MagicPermanent permanent) {
final Collection<MagicPermanentStatic> removedStatics = new ArrayList<MagicPermanentStatic>();
for (final Map.Entry<MagicLayer, SortedSet<MagicPermanentStatic>> layer : effects.entrySet()) {
final Collection<MagicPermanentStatic> statics = layer.getValue();
for (final Iterator<MagicPermanentStatic> iterator = statics.iterator();iterator.hasNext();) {
@ -60,9 +56,11 @@ public class MagicPermanentStaticMap {
}
}
}
return removedStatics;
}
public void removeTurn(final Collection<MagicPermanentStatic> removedStatics) {
public Collection<MagicPermanentStatic> removeTurn() {
final Collection<MagicPermanentStatic> removedStatics = new ArrayList<MagicPermanentStatic>();
for (final Map.Entry<MagicLayer, SortedSet<MagicPermanentStatic>> layer : effects.entrySet()) {
final Collection<MagicPermanentStatic> statics = layer.getValue();
for (final Iterator<MagicPermanentStatic> iterator = statics.iterator();iterator.hasNext();) {
@ -73,6 +71,7 @@ public class MagicPermanentStaticMap {
}
}
}
return removedStatics;
}
public void remove(final MagicPermanent permanent, final MagicStatic mstatic) {
@ -81,6 +80,7 @@ public class MagicPermanentStaticMap {
final MagicPermanentStatic permanentStatic = iterator.next();
if (permanentStatic.getPermanent() == permanent && permanentStatic.getStatic() == mstatic) {
iterator.remove();
break;
}
}
}

View File

@ -1,29 +1,63 @@
package magic.model.trigger;
import magic.model.MagicCopyMap;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Map;
import java.util.EnumMap;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collection;
public class MagicPermanentTriggerMap extends HashMap<MagicTriggerType,SortedSet<MagicPermanentTrigger>> {
import magic.model.MagicCopyMap;
import magic.model.MagicPermanent;
private static final long serialVersionUID = 1L;
public MagicPermanentTriggerMap() {
for (final MagicTriggerType type : MagicTriggerType.values()) {
put(type,new TreeSet<MagicPermanentTrigger>());
}
}
public class MagicPermanentTriggerMap {
private final Map<MagicTriggerType,SortedSet<MagicPermanentTrigger>> effects =
new EnumMap<MagicTriggerType,SortedSet<MagicPermanentTrigger>>(MagicTriggerType.class);
public MagicPermanentTriggerMap(final MagicCopyMap copyMap,final MagicPermanentTriggerMap source) {
for (final Map.Entry<MagicTriggerType,SortedSet<MagicPermanentTrigger>> entry : source.entrySet()) {
final SortedSet<MagicPermanentTrigger> triggers=new TreeSet<MagicPermanentTrigger>();
put(entry.getKey(),triggers);
for (final MagicPermanentTrigger permanentTrigger : entry.getValue()) {
triggers.add(new MagicPermanentTrigger(copyMap,permanentTrigger));
}
}
}
public MagicPermanentTriggerMap() {
for (MagicTriggerType type : MagicTriggerType.values()) {
effects.put(type, new TreeSet<MagicPermanentTrigger>());
}
}
public MagicPermanentTriggerMap(final MagicCopyMap copyMap, final MagicPermanentTriggerMap sourceMap) {
for (MagicTriggerType type : MagicTriggerType.values()) {
effects.put(type, new TreeSet<MagicPermanentTrigger>());
}
for (final Map.Entry<MagicTriggerType, SortedSet<MagicPermanentTrigger>> type : sourceMap.effects.entrySet()) {
for (final MagicPermanentTrigger mptrigger : type.getValue()) {
add(new MagicPermanentTrigger(copyMap, mptrigger));
}
}
}
public SortedSet<MagicPermanentTrigger> get(final MagicTriggerType type) {
return effects.get(type);
}
public void add(final MagicPermanentTrigger mptrigger) {
effects.get(mptrigger.getTrigger().getType()).add(mptrigger);
}
public Collection<MagicPermanentTrigger> remove(final MagicPermanent permanent) {
final Collection<MagicPermanentTrigger> removedTriggers = new ArrayList<MagicPermanentTrigger>();
for (final Map.Entry<MagicTriggerType, SortedSet<MagicPermanentTrigger>> type : effects.entrySet()) {
final Collection<MagicPermanentTrigger> triggers = type.getValue();
for (final Iterator<MagicPermanentTrigger> iterator = triggers.iterator();iterator.hasNext();) {
final MagicPermanentTrigger permanentTrigger = iterator.next();
if (permanentTrigger.getPermanent() == permanent) {
iterator.remove();
removedTriggers.add(permanentTrigger);
}
}
}
return removedTriggers;
}
public void remove(final MagicPermanentTrigger mptrigger) {
effects.get(mptrigger.getTrigger().getType()).remove(mptrigger);
}
}