package com.cardshifter.modapi.resources;
import com.cardshifter.modapi.base.Component;
import com.cardshifter.modapi.base.Entity;
import java.util.*;
import java.util.stream.Stream;
public class ResourceModifierComponent extends Component implements ECSResourceStrategy {
private final Map<ECSResource, List<EntityModifier>> strategies = new HashMap<>();
public void addModifier(ECSResource resource, EntityModifier modifier) {
this.strategies.putIfAbsent(resource, new LinkedList<>());
List<EntityModifier> list = this.strategies.get(resource);
list.add(modifier);
list.sort(Comparator.comparingInt(em -> em.getPriority()));
}
public Stream<ECSResource> getModifiedResources() {
return strategies.keySet().stream();
}
@Override
public int getResource(Entity entity, ECSResource resource, int actualValue) {
Iterable<EntityModifier> modifiers = strategies.get(resource);
if (modifiers == null) {
return actualValue;
}
int value = actualValue;
for (EntityModifier modifier : modifiers) {
if (modifier.isActive() && modifier.appliesTo(entity)) {
value = modifier.getResource(entity, resource, value);
}
}
return value;
}
@Override
public String toString() {
return getClass().getSimpleName() + ": " + strategies;
}
public int getModifiedResourcesCount() {
return strategies.size();
}
}