/* * Copyright 2015 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.polyworld; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.SimpleUri; import org.terasology.math.Region3i; import org.terasology.math.geom.Vector3i; import org.terasology.polyworld.biome.BiomeModel; import org.terasology.polyworld.biome.WhittakerBiome; import org.terasology.polyworld.biome.WhittakerBiomeModelFacet; import org.terasology.polyworld.elevation.ElevationModel; import org.terasology.polyworld.elevation.ElevationModelFacet; import org.terasology.polyworld.graph.Corner; import org.terasology.polyworld.graph.Graph; import org.terasology.polyworld.graph.GraphFacet; import org.terasology.world.generation.Region; import org.terasology.world.generation.World; /** * Tests the flatness of lakes */ public class FlatLakeTest { private static final Logger logger = LoggerFactory.getLogger(FlatLakeTest.class); private IslandWorldGenerator worldGen; @Before public void setup() { TinyEnvironment.setup(); worldGen = new IslandWorldGenerator(new SimpleUri("polyworld:island")); worldGen.setWorldSeed("asdfasdf0"); worldGen.initialize(); } @Test public void testFlatness() { Region region = createRegion(0, 0, 512, 512); GraphFacet graphFacet = region.getFacet(GraphFacet.class); WhittakerBiomeModelFacet biomeModelFacet = region.getFacet(WhittakerBiomeModelFacet.class); ElevationModelFacet elevationModelFacet = region.getFacet(ElevationModelFacet.class); boolean tested = false; for (Graph graph : graphFacet.getAllGraphs()) { BiomeModel biomeModel = biomeModelFacet.get(graph); for (org.terasology.polyworld.graph.Region reg : graph.getRegions()) { WhittakerBiome biome = biomeModel.getBiome(reg); if (biome == WhittakerBiome.LAKE) { testRegion(elevationModelFacet.get(graph), reg); tested = true; } } } if (!tested) { logger.warn("No lakes found to test! Test skipped"); } } private void testRegion(ElevationModel elevationModel, org.terasology.polyworld.graph.Region reg) { logger.info("Testing lake at {}", reg); float centerElevation = elevationModel.getElevation(reg); float eps = 0.001f; for (Corner corner : reg.getCorners()) { Assert.assertEquals(centerElevation, elevationModel.getElevation(corner), eps); } } private Region createRegion(int minX, int minY, int maxX, int maxY) { Region3i area3d = Region3i.createFromMinMax(new Vector3i(minX, 0, minY), new Vector3i(maxX, 1, maxY)); World world = worldGen.getWorld(); Region region = world.getWorldData(area3d); return region; } }