ShamanicRitual fixed

This commit is contained in:
2026-03-19 16:15:00 +01:00
parent 91be6bddc0
commit d183479d82
@@ -4,60 +4,55 @@ import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard;
import it.polimi.ingsw.gc14.Model.Player; import it.polimi.ingsw.gc14.Model.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ShamanicRitual extends EventCard { public class ShamanicRitual extends EventCard {
int prestigeToAdd; int prestigeToAdd;
int getPrestigeToRemove; int prestigeToRemove;
public ShamanicRitual(int Era, int prestigeToAdd, int getPrestigeToRemove) { public ShamanicRitual(int Era, int prestigeToAdd, int prestigeToRemove) {
super(Era, EventType.SHAMANIC_RITUAL); super(Era, EventType.SHAMANIC_RITUAL);
this.prestigeToAdd = prestigeToAdd; this.prestigeToAdd = prestigeToAdd;
this.getPrestigeToRemove = getPrestigeToRemove; this.prestigeToRemove = prestigeToRemove;
} }
// TODO è completamente scorretto... da controllare numero icone sciamani // TODO è completamente scorretto... da controllare numero icone sciamani
@Override @Override
public void activateEvent (ArrayList <Player> playerList){ public void activateEvent (ArrayList <Player> playerList){
int maxPrestige = playerList.get(0).getPrestigeValue(); Map<Player, Integer> playerMap = new HashMap<>();
int minPrestige = playerList.get(0).getPrestigeValue(); int tmpIcons = 0;
ArrayList <Player> maxPrestigePlayer = new ArrayList<>();
ArrayList <Player> minPrestigePlayer = new ArrayList<>();
for (Player player : playerList) { for (Player player : playerList) {
if (player.getPrestigeValue() > maxPrestige) { tmpIcons = player.shamans.stream().mapToInt(sh -> sh.getIcon()).sum();
maxPrestige = player.getPrestigeValue(); if (player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 5)) {
} tmpIcons = tmpIcons+3;
if (player.getPrestigeValue() < minPrestige) {
minPrestige = player.getPrestigeValue();
} }
playerMap.put(player, tmpIcons);
} }
for (Player player : playerList) { int maxIcon = playerMap.values().stream().mapToInt(Integer::intValue).max().orElse(0);
int count = (int) player.getBuildingCards().stream().filter(b -> b.getEffectId() == 1).count(); int minIcon = playerMap.values().stream().mapToInt(Integer::intValue).min().orElse(0);
player.addPrestige(3 * count);
if (player.getPrestigeValue() == maxPrestige) { List<Player> maxIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == maxIcon).map(Map.Entry::getKey).collect(Collectors.toList());
maxPrestigePlayer.add(player); List<Player> minIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == minIcon).map(Map.Entry::getKey).collect(Collectors.toList());
}
if (player.getPrestigeValue() == minPrestige) {
minPrestigePlayer.add(player);
}
player.removePrestige(3 * count);
}
for (Player player : maxPrestigePlayer) { for (Player player : maxIconsPlayer) {
player.addPrestige(prestigeToAdd);
if (player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 6)) { if (player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 6)) {
player.addPrestige(prestigeToAdd *2);
} else {
player.addPrestige(prestigeToAdd); player.addPrestige(prestigeToAdd);
} }
} }
for (Player player : minPrestigePlayer) {
if (!(player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 2))){
player.removePrestige(getPrestigeToRemove);
}
}
for (Player player : minIconsPlayer) {
if (!(player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 2))) {
player.removePrestige(prestigeToRemove);
}
}
} }