forked from SteamWar/SteamWar
Add VariantSelector
This commit is contained in:
+36
@@ -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)]);
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user