From 838fa76c8294f29b251f847dd1235020633ac2d7 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Tue, 5 Aug 2025 21:29:35 +0200 Subject: [PATCH] Add VariantSelector --- .../dynamic/variants/VariantSelector.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/variants/VariantSelector.java b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/variants/VariantSelector.java index bfe66b04..a32c9285 100644 --- a/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/variants/VariantSelector.java +++ b/BauSystem/BauSystem_RegionDynamic/src/de/steamwar/bausystem/region/dynamic/variants/VariantSelector.java @@ -19,8 +19,13 @@ package de.steamwar.bausystem.region.dynamic.variants; +import lombok.NonNull; + import java.io.File; +import java.time.LocalDate; +import java.util.Objects; import java.util.Optional; +import java.util.Random; public interface VariantSelector { @@ -29,4 +34,35 @@ public interface VariantSelector { default VariantSelector or(VariantSelector other) { 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)]); + }; + } }