Skip to content

Commit

Permalink
Enable querying the biome list (#382)
Browse files Browse the repository at this point in the history
  • Loading branch information
BlackYps authored Dec 29, 2023
1 parent 2dde438 commit 77acf57
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.faforever.neroxis.generator;

import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.biomes.Biomes;
import com.faforever.neroxis.cli.CLIUtils;
import com.faforever.neroxis.cli.DebugMixin;
Expand Down Expand Up @@ -121,6 +122,12 @@ private void printStyles() {
System.out.println(Arrays.stream(MapStyle.values()).map(MapStyle::toString).collect(Collectors.joining("\n")));
}

@Command(name = "biomes", aliases = {
"--biomes"}, description = "Prints the biomes available", versionProvider = VersionProvider.class, usageHelpAutoWidth = true)
private void printBiomes() {
System.out.println(Arrays.stream(BiomeName.values()).map(BiomeName::toString).collect(Collectors.joining("\n")));
}

@Override
public Integer call() throws Exception {
Locale.setDefault(Locale.ROOT);
Expand Down Expand Up @@ -212,8 +219,8 @@ private void populateRequiredGeneratorParameters(GeneratorParameters.GeneratorPa
private void overwriteOptionalGeneratorParametersFromOptions(GeneratorParameters.GeneratorParametersBuilder generatorParametersBuilder) {
ParameterOptions parameterOptions = tuningOptions.getParameterOptions();
if (parameterOptions != null) {
if (parameterOptions.getBiome() != null) {
generatorParametersBuilder.biome(parameterOptions.getBiome());
if (parameterOptions.getBiomeName() != null) {
generatorParametersBuilder.biome(Biomes.loadBiome(parameterOptions.getBiomeName()));
}
if (parameterOptions.getLandDensity() != null) {
generatorParametersBuilder.landDensity(parameterOptions.getLandDensity());
Expand Down Expand Up @@ -367,7 +374,7 @@ private void parseOptions(byte[] optionBytes, GeneratorParameters.GeneratorParam
randomizeOptions(generatorParametersBuilder);

if (optionBytes.length == 11) {
generatorParametersBuilder.biome(Biomes.loadBiome(Biomes.BIOMES_LIST.get(optionBytes[3])));
generatorParametersBuilder.biome(Biomes.loadBiome(BiomeName.values()[optionBytes[3]]));
generatorParametersBuilder.landDensity(MathUtil.normalizeBin(optionBytes[4], NUM_BINS));
generatorParametersBuilder.plateauDensity(MathUtil.normalizeBin(optionBytes[5], NUM_BINS));
generatorParametersBuilder.mountainDensity(MathUtil.normalizeBin(optionBytes[6], NUM_BINS));
Expand Down Expand Up @@ -395,7 +402,7 @@ private void randomizeOptions(GeneratorParameters.GeneratorParametersBuilder gen
generatorParametersBuilder.reclaimDensity(MathUtil.discretePercentage(random.nextFloat(), NUM_BINS));
generatorParametersBuilder.mexDensity(MathUtil.discretePercentage(random.nextFloat(), NUM_BINS));
generatorParametersBuilder.biome(
Biomes.loadBiome(Biomes.BIOMES_LIST.get(random.nextInt(Biomes.BIOMES_LIST.size()))));
Biomes.loadBiome(BiomeName.values()[random.nextInt(BiomeName.values().length)]));
generatorParametersBuilder.terrainSymmetry(getValidTerrainSymmetry());
}

Expand All @@ -413,7 +420,7 @@ private void encodeMapName() {
optionArray = new byte[]{(byte) generatorParameters.spawnCount(),
(byte) (generatorParameters.mapSize() / 64),
(byte) generatorParameters.numTeams(),
(byte) Biomes.BIOMES_LIST.indexOf(generatorParameters.biome().name()),
(byte) generatorParameters.biome().name().ordinal(),
(byte) MathUtil.binPercentage(generatorParameters.landDensity(), NUM_BINS),
(byte) MathUtil.binPercentage(generatorParameters.plateauDensity(), NUM_BINS),
(byte) MathUtil.binPercentage(generatorParameters.mountainDensity(), NUM_BINS),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.faforever.neroxis.generator;

import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.biomes.Biomes;
import com.faforever.neroxis.util.Range;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

Expand All @@ -16,7 +18,7 @@ public record ParameterConstraints(Range landDensityRange,
Range spawnCountRange,
Range mapSizeRange,
Range numTeamsRange,
List<String> biomes) {
List<BiomeName> biomes) {
public static ParameterConstraintsBuilder builder() {
return new ParameterConstraintsBuilder();
}
Expand Down Expand Up @@ -96,7 +98,7 @@ public static class ParameterConstraintsBuilder {
Range mapSizeRange = Range.of(0, 2048);
Range numTeamsRange = Range.of(0, 16);
Range hydroCountRange = Range.of(0, 32);
List<String> biomes = Biomes.BIOMES_LIST;
List<BiomeName> biomes = Arrays.stream(BiomeName.values()).toList();

public ParameterConstraints build() {
return new ParameterConstraints(landDensityRange, mountainDensityRange, plateauDensityRange,
Expand Down Expand Up @@ -154,7 +156,7 @@ public ParameterConstraintsBuilder hydroCount(float min, float max) {
return this;
}

public ParameterConstraintsBuilder biomes(String... biomeNames) {
public ParameterConstraintsBuilder biomes(BiomeName... biomeNames) {
biomes = List.of(biomeNames);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.faforever.neroxis.generator.cli;

import com.faforever.neroxis.biomes.Biome;
import com.faforever.neroxis.biomes.Biomes;
import com.faforever.neroxis.cli.CLIUtils;
import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.generator.MapGenerator;
import com.faforever.neroxis.map.Symmetry;
import lombok.Getter;
Expand All @@ -23,7 +22,7 @@ public class ParameterOptions {
private Float reclaimDensity;
private Float mexDensity;
private Symmetry terrainSymmetry;
private Biome biome;
private BiomeName biomeName;

@Option(names = "--land-density", order = 1, description = "Land density for the generated map. Min: 0 Max: 1")
public void setLandDensity(float density) {
Expand Down Expand Up @@ -55,13 +54,13 @@ public void setMexDensity(Float density) {
this.mexDensity = CLIUtils.convertDensity(density, MapGenerator.NUM_BINS, spec);
}

@Option(names = "--terrain-symmetry", order = 7, description = "Base terrain symmetry for the map. Values: ${COMPLETION-CANDIDATES}")
@Option(names = "--terrain-symmetry", order = 7, description = "Base terrain symmetry for the generated map. Values: ${COMPLETION-CANDIDATES}")
public void setTerrainSymmetry(Symmetry terrainSymmetry) {
this.terrainSymmetry = terrainSymmetry;
}

@Option(names = "--biome", order = 8, description = "Texture biome for the generated map")
public void setBiome(String biome) {
this.biome = Biomes.loadBiome(biome);
@Option(names = "--biome", order = 8, description = "Texture biome for the generated map. Values: ${COMPLETION-CANDIDATES}")
public void setBiomeName(BiomeName biome) {
this.biomeName = biome;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.faforever.neroxis.util.DebugUtil;
import com.faforever.neroxis.util.Pipeline;

import static com.faforever.neroxis.biomes.BiomeName.*;

public class HighReclaimPropGenerator extends BasicPropGenerator {

@Override
Expand All @@ -14,7 +16,7 @@ public ParameterConstraints getParameterConstraints() {
.plateauDensity(.5f, 1f)
.rampDensity(0f, .5f)
.reclaimDensity(.8f, 1f)
.biomes("Desert", "Frithen", "Loki", "Moonlight", "Wonder")
.biomes(DESERT, FRITHEN, LOKI, MOONLIGHT, WONDER)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.faforever.neroxis.generator.terrain.TerrainGenerator;
import com.faforever.neroxis.generator.terrain.ValleyTerrainGenerator;

import static com.faforever.neroxis.biomes.BiomeName.*;

public class HighReclaimStyleGenerator extends StyleGenerator {

@Override
Expand All @@ -21,7 +23,7 @@ public ParameterConstraints getParameterConstraints() {
.plateauDensity(.5f, 1f)
.rampDensity(0f, .25f)
.reclaimDensity(.8f, 1f)
.biomes("Desert", "Frithen", "Loki", "Moonlight", "Wonder")
.biomes(DESERT, FRITHEN, LOKI, MOONLIGHT, WONDER)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.faforever.neroxis.generator;

import com.faforever.neroxis.biomes.Biomes;
import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.exporter.PreviewGenerator;
import com.faforever.neroxis.map.Army;
import com.faforever.neroxis.map.Group;
Expand Down Expand Up @@ -284,10 +284,10 @@ public void TestEqualityStyleSpecified(MapStyle style) {

@ParameterizedTest
@ArgumentsSource(BiomeArgumentProvider.class)
public void TestEqualityBiomeSpecified(String biome) {
public void TestEqualityBiomeSpecified(BiomeName biomeName) {
instance = new MapGenerator();

new CommandLine(instance).execute("--biome", biome, "--map-size", "256");
new CommandLine(instance).execute("--biome", biomeName.toString(), "--map-size", "256");
SCMap map1 = instance.getMap();
String mapName = instance.getMapName();
long generationTime1 = instance.getGenerationTime();
Expand Down Expand Up @@ -346,7 +346,7 @@ public void cleanup() throws IOException {
private static class BiomeArgumentProvider implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Biomes.BIOMES_LIST.stream().map(Arguments::of);
return Arrays.stream(BiomeName.values()).map(Arguments::of);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.faforever.neroxis.util.serial.biome.TerrainMaterials;
import com.faforever.neroxis.util.serial.biome.WaterSettings;

public record Biome(String name,
public record Biome(BiomeName name,
TerrainMaterials terrainMaterials,
PropMaterials propMaterials,
DecalMaterials decalMaterials,
Expand Down
23 changes: 23 additions & 0 deletions shared/src/main/java/com/faforever/neroxis/biomes/BiomeName.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.faforever.neroxis.biomes;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum BiomeName {
BRIMSTONE("Brimstone"),
DESERT("Desert"),
EARLYAUTUMN("EarlyAutumn"),
FRITHEN("Frithen"),
LOKI("Loki"),
MARS("Mars"),
MOONLIGHT("Moonlight"),
PRAYER("Prayer"),
STONES("Stones"),
SYRTIS("Syrtis"),
WINDINGRIVER("WindingRiver"),
WONDER("Wonder");

private final String folderName;
}
16 changes: 3 additions & 13 deletions shared/src/main/java/com/faforever/neroxis/biomes/Biomes.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
import com.faforever.neroxis.util.serial.biome.WaterSettings;
import lombok.Data;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

@Data
public class Biomes {
Expand All @@ -20,22 +17,15 @@ public class Biomes {
// ├-- props.json <required>
// ├-- WaterSettings.scmwtr <required>
// └-- Light.scmlighting <required>
public static final List<String> BIOMES_LIST = List.of("Brimstone", "Desert", "EarlyAutumn", "Frithen",
"Loki", "Mars", "Moonlight", "Prayer", "Stones",
"Syrtis", "WindingRiver", "Wonder");
private static final String CUSTOM_BIOMES_DIR = "/custom_biome/";

public static Biome loadBiome(String folderPath) {
public static Biome loadBiome(BiomeName biomeName) {
String folderPath = biomeName.getFolderName();
if (Biomes.class.getResource(CUSTOM_BIOMES_DIR + folderPath) != null) {
folderPath = CUSTOM_BIOMES_DIR + folderPath;
if (!folderPath.endsWith("/")) {
folderPath += "/";
}
} else {
folderPath = Path.of(folderPath).toString();
if (!folderPath.endsWith(File.separator)) {
folderPath += File.separator;
}
}

TerrainMaterials terrainMaterials;
Expand Down Expand Up @@ -78,7 +68,7 @@ public static Biome loadBiome(String folderPath) {
String.format("An error occurred while loading %s LightingSettings\n", folderPath), e);
}

return new Biome(terrainMaterials.getName(), terrainMaterials, propMaterials, decalMaterials, waterSettings,
return new Biome(biomeName, terrainMaterials, propMaterials, decalMaterials, waterSettings,
lightingSettings);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.faforever.neroxis.importer;

import com.faforever.neroxis.biomes.Biome;
import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.map.CubeMap;
import com.faforever.neroxis.map.Decal;
import com.faforever.neroxis.map.DecalGroup;
Expand Down Expand Up @@ -198,7 +199,7 @@ public static SCMap importSCMAP(Path folderPath) throws IOException {
in.close();

SCMap map = new SCMap(widthInt,
new Biome("loaded", mapTerrainMaterials, new PropMaterials(), new DecalMaterials(),
new Biome(null, mapTerrainMaterials, new PropMaterials(), new DecalMaterials(),
mapWaterSettings, mapLightingSettings));
map.setFilePrefix(file.getName().replace(".scmap", ""));
map.setMinorVersion(version);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.faforever.neroxis.toolsuite;

import com.faforever.neroxis.biomes.Biome;
import com.faforever.neroxis.biomes.BiomeName;
import com.faforever.neroxis.biomes.Biomes;
import com.faforever.neroxis.cli.DebugMixin;
import com.faforever.neroxis.cli.OutputFolderMixin;
Expand Down Expand Up @@ -461,9 +462,9 @@ private static class SymmetryRequiredSettings {
private Integer hydroCountPerPlayer;
private Biome biome;

@CommandLine.Option(names = "--biome", description = "Name of included biome or path to custom biome folder")
private void setBiome(String pathOrBiome) {
biome = Biomes.loadBiome(pathOrBiome);
@CommandLine.Option(names = "--biome", description = "Name of included biome")
private void setBiome(BiomeName biomeName) {
biome = Biomes.loadBiome(biomeName);
}
}
}

0 comments on commit 77acf57

Please sign in to comment.