package games.strategy.engine.data; import java.util.Collection; import java.util.Set; import games.strategy.util.IntegerMap; import games.strategy.util.Util; public class UnitHitsChange extends Change { private static final long serialVersionUID = 2862726651812142713L; private final IntegerMap<Unit> m_hits; private final IntegerMap<Unit> m_undoHits; private UnitHitsChange(final IntegerMap<Unit> hits, final IntegerMap<Unit> undoHits) { m_hits = hits; m_undoHits = undoHits; } public Collection<Unit> getUnits() { return m_hits.keySet(); } public UnitHitsChange(final IntegerMap<Unit> hits) { m_hits = hits.copy(); m_undoHits = new IntegerMap<>(); for (final Unit item : m_hits.keySet()) { m_undoHits.put(item, item.getHits()); } } @Override protected void perform(final GameData data) { for (final Unit item : m_hits.keySet()) { item.setHits(m_hits.getInt(item)); } final Set<Unit> units = m_hits.keySet(); for (final Territory element : data.getMap().getTerritories()) { if (Util.someIntersect(element.getUnits().getUnits(), units)) { element.notifyChanged(); } } } @Override public Change invert() { return new UnitHitsChange(m_undoHits, m_hits); } }