Add VariantSelector

This commit is contained in:
2025-08-05 21:29:35 +02:00
parent 6e70d16370
commit 838fa76c82
@@ -19,8 +19,13 @@
package de.steamwar.bausystem.region.dynamic.variants; package de.steamwar.bausystem.region.dynamic.variants;
import lombok.NonNull;
import java.io.File; import java.io.File;
import java.time.LocalDate;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Random;
public interface VariantSelector { public interface VariantSelector {
@@ -29,4 +34,35 @@ public interface VariantSelector {
default VariantSelector or(VariantSelector other) { default VariantSelector or(VariantSelector other) {
return (minX, minZ) -> selectVariant(minX, minZ).or(() -> other.selectVariant(minX, minZ)); return (minX, minZ) -> selectVariant(minX, minZ).or(() -> other.selectVariant(minX, minZ));
} }
static VariantSelector AtDate(int day, int month, File file) {
return (minX, minZ) -> {
LocalDate date = LocalDate.now();
if (date.getDayOfMonth() == day && date.getMonthValue() == month) {
return Optional.of(file);
} else {
return Optional.empty();
}
};
}
static VariantSelector File(@NonNull File file) {
return (minX, minZ) -> Optional.of(file);
}
static VariantSelector StableVariants(@NonNull File directory) {
File[] files = directory.listFiles();
return (minX, minZ) -> {
Random rand = new Random(Objects.hash(minX, minZ));
return Optional.of(files[rand.nextInt(files.length)]);
};
}
static VariantSelector RandomVariants(@NonNull File directory) {
File[] files = directory.listFiles();
Random rand = new Random();
return (minX, minZ) -> {
return Optional.of(files[rand.nextInt(files.length)]);
};
}
} }