package games.strategy.engine.data; import java.util.Collection; import java.util.Set; import games.strategy.triplea.TripleAUnit; import games.strategy.util.IntegerMap; import games.strategy.util.Util; public class BombingUnitDamageChange extends Change { private static final long serialVersionUID = -6425858423179501847L; private final IntegerMap<Unit> hits; private final IntegerMap<Unit> undoHits; private BombingUnitDamageChange(final IntegerMap<Unit> hits, final IntegerMap<Unit> undoHits) { this.hits = hits; this.undoHits = undoHits; } public Collection<Unit> getUnits() { return hits.keySet(); } public BombingUnitDamageChange(final IntegerMap<Unit> hits) { for (final Unit u : hits.keySet()) { if (!(u instanceof TripleAUnit)) { throw new IllegalArgumentException("BombingUnitDamage can only apply to a TripleAUnit object"); } } this.hits = hits.copy(); undoHits = new IntegerMap<>(); for (final Unit item : this.hits.keySet()) { undoHits.put(item, item.getHits()); } } @Override protected void perform(final GameData data) { for (final Unit item : hits.keySet()) { ((TripleAUnit) item).setUnitDamage(hits.getInt(item)); } final Set<Unit> units = hits.keySet(); for (final Territory element : data.getMap().getTerritories()) { if (Util.someIntersect(element.getUnits().getUnits(), units)) { element.notifyChanged(); } } } @Override public Change invert() { return new BombingUnitDamageChange(undoHits, hits); } }