Search in sources :

Example 1 with SunlightRegenBatchPropagator

use of org.terasology.world.propagation.SunlightRegenBatchPropagator in project Terasology by MovingBlocks.

the class LightMerger method merge.

private void merge(Chunk chunk) {
    Chunk[] localChunks = assembleLocalChunks(chunk);
    localChunks[CENTER_INDEX] = chunk;
    List<BatchPropagator> propagators = Lists.newArrayList();
    propagators.add(new StandardBatchPropagator(new LightPropagationRules(), new LocalChunkView(localChunks, lightRules)));
    PropagatorWorldView regenWorldView = new LocalChunkView(localChunks, sunlightRegenRules);
    PropagationRules sunlightRules = new SunlightPropagationRules(regenWorldView);
    PropagatorWorldView sunlightWorldView = new LocalChunkView(localChunks, sunlightRules);
    BatchPropagator sunlightPropagator = new StandardBatchPropagator(sunlightRules, sunlightWorldView);
    propagators.add(new SunlightRegenBatchPropagator(sunlightRegenRules, regenWorldView, sunlightPropagator, sunlightWorldView));
    propagators.add(sunlightPropagator);
    for (BatchPropagator propagator : propagators) {
        // Propagate Inwards
        for (Side side : Side.values()) {
            Vector3i adjChunkPos = side.getAdjacentPos(chunk.getPosition());
            LitChunk adjChunk = chunkProvider.getChunkUnready(adjChunkPos);
            if (adjChunk != null) {
                propagator.propagateBetween(adjChunk, chunk, side.reverse(), false);
            }
        }
        // Propagate Outwards
        for (Side side : Side.values()) {
            Vector3i adjChunkPos = side.getAdjacentPos(chunk.getPosition());
            LitChunk adjChunk = chunkProvider.getChunk(adjChunkPos);
            if (adjChunk != null) {
                propagator.propagateBetween(chunk, adjChunk, side, true);
            }
        }
    }
    for (BatchPropagator propagator : propagators) {
        propagator.process();
    }
    chunk.deflateSunlight();
}
Also used : StandardBatchPropagator(org.terasology.world.propagation.StandardBatchPropagator) StandardBatchPropagator(org.terasology.world.propagation.StandardBatchPropagator) SunlightRegenBatchPropagator(org.terasology.world.propagation.SunlightRegenBatchPropagator) BatchPropagator(org.terasology.world.propagation.BatchPropagator) SunlightRegenBatchPropagator(org.terasology.world.propagation.SunlightRegenBatchPropagator) LitChunk(org.terasology.world.chunks.LitChunk) Chunk(org.terasology.world.chunks.Chunk) LitChunk(org.terasology.world.chunks.LitChunk) Side(org.terasology.math.Side) PropagatorWorldView(org.terasology.world.propagation.PropagatorWorldView) Vector3i(org.terasology.math.geom.Vector3i) LocalChunkView(org.terasology.world.propagation.LocalChunkView) PropagationRules(org.terasology.world.propagation.PropagationRules)

Aggregations

Side (org.terasology.math.Side)1 Vector3i (org.terasology.math.geom.Vector3i)1 Chunk (org.terasology.world.chunks.Chunk)1 LitChunk (org.terasology.world.chunks.LitChunk)1 BatchPropagator (org.terasology.world.propagation.BatchPropagator)1 LocalChunkView (org.terasology.world.propagation.LocalChunkView)1 PropagationRules (org.terasology.world.propagation.PropagationRules)1 PropagatorWorldView (org.terasology.world.propagation.PropagatorWorldView)1 StandardBatchPropagator (org.terasology.world.propagation.StandardBatchPropagator)1 SunlightRegenBatchPropagator (org.terasology.world.propagation.SunlightRegenBatchPropagator)1