package de.slikey.effectlib.math; import de.slikey.effectlib.util.ConfigUtils; import org.bukkit.configuration.ConfigurationSection; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; public class SequenceTransform implements Transform { private List<Sequence> steps; private class Sequence { private final Transform transform; private final double start; public Sequence(ConfigurationSection configuration) { this.transform = Transforms.loadTransform(configuration, "transform"); this.start = configuration.getDouble("start", 0); } public double getStart() { return start; } public double get(double t) { return transform.get(t); } }; @Override public void load(ConfigurationSection parameters) { steps = new ArrayList<Sequence>(); Collection<ConfigurationSection> stepConfigurations = ConfigUtils.getNodeList(parameters, "steps"); if (stepConfigurations != null) { for (ConfigurationSection stepConfig : stepConfigurations) { steps.add(new Sequence(stepConfig)); } } Collections.reverse(steps); } @Override public double get(double t) { double value = 0; for (Sequence step : steps) { if (step.getStart() <= t) { return step.get(t); } } return value; } }