package net.zomis.cardshifter.ecs.usage;
import com.cardshifter.modapi.actions.ActionAllowedCheckEvent;
import com.cardshifter.modapi.actions.ActionPerformEvent;
import com.cardshifter.modapi.actions.SpecificActionSystem;
import com.cardshifter.modapi.base.ComponentRetriever;
import com.cardshifter.modapi.base.Entity;
import com.cardshifter.modapi.base.Retriever;
import com.cardshifter.modapi.cards.BattlefieldComponent;
import com.cardshifter.modapi.cards.CardComponent;
import com.cardshifter.modapi.cards.Cards;
import com.cardshifter.modapi.resources.ECSResource;
import com.cardshifter.modapi.resources.ResourceRetriever;
import java.util.function.Predicate;
public class ScrapSystem extends SpecificActionSystem {
private final ResourceRetriever resource;
private final Predicate<Entity> predicate;
public ScrapSystem(ECSResource resource, Predicate<Entity> predicate) {
super("Scrap");
this.resource = ResourceRetriever.forResource(resource);
this.predicate = predicate;
}
@Retriever private ComponentRetriever<CardComponent> card;
@Override
protected void isAllowed(ActionAllowedCheckEvent event) {
if (!Cards.isOwnedByCurrentPlayer(event.getEntity())) {
event.setAllowed(false);
}
if (!Cards.isOnZone(event.getEntity(), BattlefieldComponent.class)) {
event.setAllowed(false);
}
if (resource.getOrDefault(event.getEntity(), 0) <= 0) {
event.setAllowed(false);
}
if (!predicate.test(event.getEntity())) {
event.setAllowed(false);
}
}
@Override
protected void onPerform(ActionPerformEvent event) {
forceScrap(event.getEntity());
}
public void forceScrap(Entity entity) {
Entity cardOwner = Cards.getOwner(entity);
int scrapValue = resource.getOrDefault(entity, 0);
resource.resFor(cardOwner).change(scrapValue);
entity.destroy();
}
}