package games.strategy.triplea.delegate.dataObjects; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import games.strategy.engine.data.Unit; public class CasualtyList implements Serializable { private static final long serialVersionUID = 6501752134047891398L; protected List<Unit> m_killed; protected List<Unit> m_damaged; /** * Creates a new CasualtyList. * * @param damaged * (can have multiple of the same unit, to show multiple hits to that unit) */ public CasualtyList(final List<Unit> killed, final List<Unit> damaged) { if (killed == null) { throw new IllegalArgumentException("null killed"); } if (damaged == null) { throw new IllegalArgumentException("null damaged"); } m_killed = new ArrayList<>(killed); m_damaged = new ArrayList<>(damaged); } /** * Creates a new blank CasualtyList with empty lists. */ public CasualtyList() { m_killed = new ArrayList<>(); m_damaged = new ArrayList<>(); } /** * @return list of killed units. */ public List<Unit> getKilled() { return m_killed; } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public List<Unit> getDamaged() { return m_damaged; } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public List<Unit> getKilledAndDamaged() { final List<Unit> all = new ArrayList<>(m_killed); all.addAll(m_damaged); return all; } public void addToKilled(final Unit deadUnit) { m_killed.add(deadUnit); } public void addToKilled(final Collection<Unit> deadUnits) { m_killed.addAll(deadUnits); } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void addToDamaged(final Unit damagedUnit) { m_damaged.add(damagedUnit); } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void addToDamaged(final Collection<Unit> damagedUnits) { m_damaged.addAll(damagedUnits); } public void removeFromKilled(final Unit deadUnit) { m_killed.remove(deadUnit); } public void removeFromKilled(final Collection<Unit> deadUnits) { m_killed.removeAll(deadUnits); } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void removeOnceFromDamaged(final Unit damagedUnit) { m_damaged.remove(damagedUnit); } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void removeOnceFromDamaged(final Collection<Unit> damagedUnits) { m_damaged.removeAll(damagedUnits); } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void removeAllFromDamaged(final Unit damagedUnit) { while (m_damaged.contains(damagedUnit)) { m_damaged.remove(damagedUnit); } } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void removeAllFromDamaged(final Collection<Unit> damagedUnits) { for (final Unit u : damagedUnits) { while (m_damaged.contains(u)) { m_damaged.remove(u); } } } /** * Can have multiple of the same unit, to show multiple hits to that unit. */ public void addAll(final CasualtyList casualtyList) { m_damaged.addAll(casualtyList.getDamaged()); m_killed.addAll(casualtyList.getKilled()); } public void clear() { m_killed.clear(); m_damaged.clear(); } public int size() { return m_killed.size() + m_damaged.size(); } @Override public String toString() { return "Selected Casualties: Damaged: [" + m_damaged + "], Killed: [" + m_killed + "]"; } }