package fr.lyrgard.hexScape.gui.desktop.action;
import java.awt.event.ActionEvent;
import java.util.Iterator;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import fr.lyrgard.hexScape.bus.CoreMessageBus;
import fr.lyrgard.hexScape.message.RemoveMarkerMessage;
import fr.lyrgard.hexScape.model.CurrentUserInfo;
import fr.lyrgard.hexScape.model.Universe;
import fr.lyrgard.hexScape.model.card.CardInstance;
import fr.lyrgard.hexScape.model.game.Game;
import fr.lyrgard.hexScape.model.marker.HiddenMarkerDefinition;
import fr.lyrgard.hexScape.model.marker.MarkerDefinition;
import fr.lyrgard.hexScape.model.marker.MarkerInstance;
import fr.lyrgard.hexScape.model.marker.StackableMarkerInstance;
import fr.lyrgard.hexScape.model.player.Player;
public class RemoveAllMarkersOfTypeForPlayerdAction extends AbstractAction {
private static final long serialVersionUID = 2139602334359226593L;
private static final ImageIcon icon = new ImageIcon(ChooseMapAction.class.getResource("/gui/icons/remove.png"));
private MarkerDefinition markerType;
public RemoveAllMarkersOfTypeForPlayerdAction(MarkerDefinition markerType) {
super("Remove all " + markerType.getName() + " from your cards", icon);
this.markerType = markerType;
}
public void actionPerformed(ActionEvent e) {
String playerId = CurrentUserInfo.getInstance().getPlayerId();
String gameId = CurrentUserInfo.getInstance().getGameId();
Game game = Universe.getInstance().getGamesByGameIds().get(gameId);
if (game != null) {
Player player = game.getPlayer(playerId);
if (player != null) {
for (CardInstance card : player.getArmy().getCards()) {
Iterator<MarkerInstance> it = card.getMarkers().iterator();
while (it.hasNext()) {
MarkerInstance marker = it.next();
boolean toRemove = false;
if (markerType.getId().equals(marker.getMarkerDefinitionId())) {
toRemove= true;
} else if (markerType instanceof HiddenMarkerDefinition) {
for (MarkerDefinition type : ((HiddenMarkerDefinition)markerType).getPossibleMarkersHidden()) {
if (type.getId().equals(marker.getMarkerDefinitionId())) {
toRemove = true;
break;
}
}
}
if (toRemove) {
int number = 1;
if (marker instanceof StackableMarkerInstance) {
number = ((StackableMarkerInstance)marker).getNumber();
}
it.remove();
RemoveMarkerMessage message = new RemoveMarkerMessage(card.getId(), marker.getId(), number);
CoreMessageBus.post(message);
}
}
}
}
}
}
}