use of com.janfic.games.computercombat.util.Filter in project computercombat by janfic.
the class GameRules method generateMovesWithSelection.
private static List<UseAbilityMove> generateMovesWithSelection(int index, Card card, MatchState state, List<Component> selectedComponents, List<Card> selectedCards) {
List<UseAbilityMove> moves = new ArrayList<>();
String uid = state.currentPlayerMove;
System.out.println(card);
System.out.println(card.getAbility());
List<Filter> selectFilters = card.getAbility().getSelectFilters();
if (index >= selectFilters.size()) {
List<Component> selectedComponentsClone = new ArrayList<>(selectedComponents);
List<Card> selectedCardsClone = new ArrayList<>(selectedCards);
moves.add(new UseAbilityMove(uid, card, selectedComponentsClone, selectedCardsClone));
} else {
Filter filter = selectFilters.get(index);
if (filter instanceof ComponentFilter) {
List<Component> sComps = new ArrayList<>(selectedComponents);
List<Card> sCards = new ArrayList<>(selectedCards);
List<Component> selectableComponents = state.getComponentsByFilter((ComponentFilter) filter, new UseAbilityMove(uid, card, sComps, sCards));
for (Component selectableComponent : selectableComponents) {
sComps.add(selectableComponent);
moves.addAll(generateMovesWithSelection(index + 1, card, state, sComps, sCards));
sComps.remove(sComps.size() - 1);
}
} else if (filter instanceof CardFilter) {
List<Component> sComps = new ArrayList<>(selectedComponents);
List<Card> sCards = new ArrayList<>(selectedCards);
List<Card> selectableCards = state.getCardsByFilter((CardFilter) filter, new UseAbilityMove(uid, card, sComps, sCards));
for (Card selectableCard : selectableCards) {
sCards.add(selectableCard);
moves.addAll(generateMovesWithSelection(index + 1, card, state, sComps, sCards));
sCards.remove(sCards.size() - 1);
}
}
}
return moves;
}
use of com.janfic.games.computercombat.util.Filter in project computercombat by janfic.
the class CollectAbility method doAbility.
@Override
public List<MoveResult> doAbility(MatchState state, Move move) {
List<MoveResult> results = new ArrayList<>();
List<MoveAnimation> anim = new ArrayList<>();
anim.add(Ability.consumeCardProgress(state, move));
results.add(new MoveResult(move, MatchState.record(state), anim));
UseAbilityMove useAbility = (UseAbilityMove) move;
int index = state.activeEntities.get(useAbility.getPlayerUID()).indexOf(useAbility.getCard());
state.activeEntities.get(useAbility.getPlayerUID()).get(index).setProgress(0);
Stream<Component> components = state.getComponentsAsList().stream();
for (CollectFilter filter : filters) {
components = components.filter((c) -> {
return filter.filter(state, move, c);
});
}
List<Component> list = components.collect(Collectors.toList());
Collections.shuffle(list);
int count = amount.analyze(state, move);
list = list.subList(0, Math.min(count, list.size()));
Component[] c = list.toArray(new Component[0]);
for (Component component : c) {
component.getMatchNeighbors().add(-1);
}
List<MoveResult> result = state.results(move);
results.addAll(result);
return results;
}
Aggregations