package com.cardshifter.modapi.resources; import java.util.List; import java.util.function.Predicate; import java.util.function.ToIntFunction; import com.cardshifter.modapi.base.ECSGame; import com.cardshifter.modapi.base.ECSSystem; import com.cardshifter.modapi.base.Entity; import com.cardshifter.modapi.phase.PhaseStartEvent; public class RestoreResourcesToSystem implements ECSSystem { private final Predicate<Entity> entityPredicate; private final ResourceRetriever resource; private final ToIntFunction<Entity> valueGetter; public RestoreResourcesToSystem(Predicate<Entity> entities, ECSResource resource, ToIntFunction<Entity> valueGetter) { this.entityPredicate = entities; this.resource = ResourceRetriever.forResource(resource); this.valueGetter = valueGetter; } @Override public void startGame(ECSGame game) { game.getEvents().registerHandlerAfter(this, PhaseStartEvent.class, this::restoreResources); } private void restoreResources(PhaseStartEvent event) { ECSGame game = event.getNewPhase().getOwner().getGame(); List<Entity> entities = game.findEntities(entityPredicate); entities.forEach(this::restoreResource); } private void restoreResource(Entity entity) { int value = valueGetter.applyAsInt(entity); resource.resFor(entity).set(value); } @Override public String toString() { return "RestoreResourcesToSystem [entityPredicate=" + entityPredicate + ", resource=" + resource + ", valueGetter=" + valueGetter + "]"; } }