Search in sources :

Example 16 with ChunkImpl

use of org.terasology.engine.world.chunks.internal.ChunkImpl in project Terasology by MovingBlocks.

the class InternalLightGeneratorTest method testBlockedSunlightPropagation.

@Test
public void testBlockedSunlightPropagation() {
    Chunk chunk = new ChunkImpl(0, 0, 0, blockManager, extraDataManager);
    for (Vector3ic pos : new BlockRegion(0, 4, 0).setSize(Chunks.SIZE_X, 1, Chunks.SIZE_Z)) {
        chunk.setBlock(pos, solidBlock);
    }
    InternalLightProcessor.generateInternalLighting(chunk);
    for (Vector3ic pos : new BlockRegion(0, 0, 0).setSize(Chunks.SIZE_X, 5, Chunks.SIZE_Z)) {
        assertEquals(0, chunk.getSunlight(pos), () -> "Incorrect lighting at " + pos);
    }
}
Also used : ChunkImpl(org.terasology.engine.world.chunks.internal.ChunkImpl) Vector3ic(org.joml.Vector3ic) BlockRegion(org.terasology.engine.world.block.BlockRegion) Chunk(org.terasology.engine.world.chunks.Chunk) Test(org.junit.jupiter.api.Test)

Example 17 with ChunkImpl

use of org.terasology.engine.world.chunks.internal.ChunkImpl in project Terasology by MovingBlocks.

the class InternalLightGeneratorTest method testUnblockedSunlightPropagationAfterHittingMaxRegen.

@Test
public void testUnblockedSunlightPropagationAfterHittingMaxRegen() {
    Chunk chunk = new ChunkImpl(0, 0, 0, blockManager, extraDataManager);
    InternalLightProcessor.generateInternalLighting(chunk);
    for (Vector3ic pos : new BlockRegion(0, 15, 0).setSize(Chunks.SIZE_X, Chunks.SIZE_Y - 15, Chunks.SIZE_Z)) {
        assertEquals(0, chunk.getSunlight(pos));
    }
    for (Vector3ic pos : new BlockRegion(0, 0, 0).setSize(Chunks.SIZE_X, Chunks.SIZE_Y - Chunks.MAX_SUNLIGHT_REGEN, Chunks.SIZE_Z)) {
        byte expectedSunlight = (byte) Math.min(Chunks.SIZE_Y - Chunks.SUNLIGHT_REGEN_THRESHOLD - pos.y() - 1, Chunks.MAX_SUNLIGHT);
        assertEquals(expectedSunlight, chunk.getSunlight(pos), () -> "Incorrect lighting at " + pos);
    }
}
Also used : ChunkImpl(org.terasology.engine.world.chunks.internal.ChunkImpl) Vector3ic(org.joml.Vector3ic) BlockRegion(org.terasology.engine.world.block.BlockRegion) Chunk(org.terasology.engine.world.chunks.Chunk) Test(org.junit.jupiter.api.Test)

Example 18 with ChunkImpl

use of org.terasology.engine.world.chunks.internal.ChunkImpl in project Terasology by MovingBlocks.

the class BetweenChunkPropagationTest method testPropagateSunlightAppearingMidChunk.

@Test
public void testPropagateSunlightAppearingMidChunk() {
    Chunk topChunk = new ChunkImpl(new Vector3i(0, 1, 0), blockManager, extraDataManager);
    Chunk bottomChunk = new ChunkImpl(new Vector3i(0, 0, 0), blockManager, extraDataManager);
    provider.addChunk(topChunk);
    provider.addChunk(bottomChunk);
    for (Vector3ic pos : new BlockRegion(0, 0, 0).setSize(Chunks.SIZE_X, 1, Chunks.SIZE_Z)) {
        topChunk.setSunlight(pos, (byte) 0);
        topChunk.setSunlightRegen(pos, (byte) 0);
    }
    for (Vector3ic pos : new BlockRegion(8, 0, 8).setSize(Chunks.SIZE_X - 16, 1, Chunks.SIZE_Z - 16)) {
        topChunk.setSunlight(pos, (byte) 0);
        topChunk.setSunlightRegen(pos, (byte) 32);
    }
    InternalLightProcessor.generateInternalLighting(bottomChunk);
    propagator.propagateBetween(topChunk, bottomChunk, Side.BOTTOM, false);
    propagator.process();
    sunlightPropagator.process();
    for (int i = 0; i < 15; ++i) {
        assertEquals(14 - i, bottomChunk.getSunlight(7, 33 + i, 16), "Incorrect value at " + (33 + i));
    }
    for (int i = 2; i < 33; ++i) {
        assertEquals(14, bottomChunk.getSunlight(7, i, 16), "Incorrect value at " + i);
    }
}
Also used : ChunkImpl(org.terasology.engine.world.chunks.internal.ChunkImpl) Vector3ic(org.joml.Vector3ic) Vector3i(org.joml.Vector3i) BlockRegion(org.terasology.engine.world.block.BlockRegion) Chunk(org.terasology.engine.world.chunks.Chunk) Test(org.junit.jupiter.api.Test)

Example 19 with ChunkImpl

use of org.terasology.engine.world.chunks.internal.ChunkImpl in project Terasology by MovingBlocks.

the class BetweenChunkPropagationTest method testBetweenChunksWithOverhang.

@Test
public void testBetweenChunksWithOverhang() {
    Chunk topChunk = new ChunkImpl(new Vector3i(0, 1, 0), blockManager, extraDataManager);
    Chunk bottomChunk = new ChunkImpl(new Vector3i(0, 0, 0), blockManager, extraDataManager);
    provider.addChunk(topChunk);
    provider.addChunk(bottomChunk);
    for (Vector3ic pos : new BlockRegion(0, 0, 0).setSize(Chunks.SIZE_X, 1, Chunks.SIZE_Z)) {
        topChunk.setSunlight(pos, Chunks.MAX_SUNLIGHT);
        topChunk.setSunlightRegen(pos, Chunks.MAX_SUNLIGHT_REGEN);
    }
    for (Vector3ic pos : new BlockRegion(16, 48, 0, 31, 48, 31)) {
        bottomChunk.setBlock(pos, solid);
    }
    InternalLightProcessor.generateInternalLighting(bottomChunk);
    propagator.propagateBetween(topChunk, bottomChunk, Side.BOTTOM, false);
    propagator.process();
    sunlightPropagator.process();
    for (int z = 0; z < Chunks.SIZE_Z; ++z) {
        assertEquals(14, bottomChunk.getSunlight(16, 47, z));
    }
    for (int z = 0; z < Chunks.SIZE_Z; ++z) {
        assertEquals(13, bottomChunk.getSunlight(17, 47, z));
    }
}
Also used : ChunkImpl(org.terasology.engine.world.chunks.internal.ChunkImpl) Vector3ic(org.joml.Vector3ic) Vector3i(org.joml.Vector3i) BlockRegion(org.terasology.engine.world.block.BlockRegion) Chunk(org.terasology.engine.world.chunks.Chunk) Test(org.junit.jupiter.api.Test)

Example 20 with ChunkImpl

use of org.terasology.engine.world.chunks.internal.ChunkImpl in project Terasology by MovingBlocks.

the class BetweenChunkPropagationTest method testBetweenChunksSimpleSunlightRegenOnly.

@Test
public void testBetweenChunksSimpleSunlightRegenOnly() {
    Chunk topChunk = new ChunkImpl(new Vector3i(0, 1, 0), blockManager, extraDataManager);
    Chunk bottomChunk = new ChunkImpl(new Vector3i(0, 0, 0), blockManager, extraDataManager);
    provider.addChunk(topChunk);
    provider.addChunk(bottomChunk);
    for (Vector3ic pos : new BlockRegion(0, 0, 0).setSize(Chunks.SIZE_X, 1, Chunks.SIZE_Z)) {
        topChunk.setSunlight(pos, Chunks.MAX_SUNLIGHT);
        topChunk.setSunlightRegen(pos, Chunks.MAX_SUNLIGHT_REGEN);
    }
    InternalLightProcessor.generateInternalLighting(bottomChunk);
    propagator.propagateBetween(topChunk, bottomChunk, Side.BOTTOM, true);
    propagator.process();
    for (Vector3ic pos : Chunks.CHUNK_REGION) {
        assertEquals(Chunks.MAX_SUNLIGHT_REGEN, bottomChunk.getSunlightRegen(pos), () -> "Incorrect at position " + pos);
    }
}
Also used : ChunkImpl(org.terasology.engine.world.chunks.internal.ChunkImpl) Vector3ic(org.joml.Vector3ic) Vector3i(org.joml.Vector3i) BlockRegion(org.terasology.engine.world.block.BlockRegion) Chunk(org.terasology.engine.world.chunks.Chunk) Test(org.junit.jupiter.api.Test)

Aggregations

ChunkImpl (org.terasology.engine.world.chunks.internal.ChunkImpl)23 Chunk (org.terasology.engine.world.chunks.Chunk)19 Test (org.junit.jupiter.api.Test)17 Vector3i (org.joml.Vector3i)14 Vector3ic (org.joml.Vector3ic)14 BlockRegion (org.terasology.engine.world.block.BlockRegion)11 EntityRef (org.terasology.engine.entitySystem.entity.EntityRef)4 ChunkStore (org.terasology.engine.persistence.ChunkStore)4 ChunkProvider (org.terasology.engine.world.chunks.ChunkProvider)3 Map (java.util.Map)2 EngineEntityManager (org.terasology.engine.entitySystem.entity.internal.EngineEntityManager)2 Event (org.terasology.engine.entitySystem.event.Event)2 StorageManager (org.terasology.engine.persistence.StorageManager)2 OnChunkLoaded (org.terasology.engine.world.chunks.event.OnChunkLoaded)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 Collection (java.util.Collection)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 Vector3f (org.joml.Vector3f)1 BeforeEach (org.junit.jupiter.api.BeforeEach)1 LocationComponent (org.terasology.engine.logic.location.LocationComponent)1