package com.cardshifter.modapi.resources; import com.cardshifter.modapi.actions.ActionPerformEvent; import com.cardshifter.modapi.base.ComponentRetriever; import com.cardshifter.modapi.base.ECSGame; import com.cardshifter.modapi.base.ECSSystem; import com.cardshifter.modapi.base.Entity; import java.util.Set; /** * A System to recount resources if required after an action has been performed. */ public class ResourceRecountSystem implements ECSSystem { private ComponentRetriever<ResourceModifierComponent> modifier = ComponentRetriever.singleton(ResourceModifierComponent.class); @Override public void startGame(ECSGame game) { game.getEvents().registerHandlerAfter(this, ActionPerformEvent.class, this::recount); } private void recount(ActionPerformEvent event) { ResourceModifierComponent mod = modifier.get(event.getEntity()); int count = mod.getModifiedResourcesCount(); if (count == 0) { return; } Set<Entity> entities = event.getEntity().getGame() .getEntitiesWithComponent(ECSResourceMap.class); entities.stream() .map(e -> e.getComponent(ECSResourceMap.class)) .forEach(e -> mod.getModifiedResources() .forEach(res -> e.get(res).ifPresent(resData -> resData.get()))); System.out.println("Recounted " + count + " resources for " + entities.size() + " entities."); } }