Search in sources :

Example 1 with Chunk

use of org.terasology.world.chunks.Chunk in project Terasology by MovingBlocks.

the class RenderableWorldImpl method onChunkLoaded.

@Override
public void onChunkLoaded(Vector3i chunkCoordinates) {
    if (renderableRegion.encompasses(chunkCoordinates)) {
        Chunk chunk = chunkProvider.getChunk(chunkCoordinates);
        if (chunk != null) {
            chunksInProximityOfCamera.add(chunk);
            Collections.sort(chunksInProximityOfCamera, new ChunkFrontToBackComparator());
        } else {
            logger.warn("Warning: onChunkLoaded called for a null chunk!");
        }
    }
}
Also used : Chunk(org.terasology.world.chunks.Chunk) RenderableChunk(org.terasology.world.chunks.RenderableChunk)

Example 2 with Chunk

use of org.terasology.world.chunks.Chunk in project Terasology by MovingBlocks.

the class ServerImpl method processReceivedChunks.

private void processReceivedChunks() {
    if (remoteWorldProvider != null) {
        List<Chunk> chunks = Lists.newArrayListWithExpectedSize(chunkQueue.size());
        chunkQueue.drainTo(chunks);
        for (Chunk chunk : chunks) {
            remoteWorldProvider.receiveChunk(chunk);
        }
    }
}
Also used : Chunk(org.terasology.world.chunks.Chunk)

Example 3 with Chunk

use of org.terasology.world.chunks.Chunk in project Terasology by MovingBlocks.

the class LocalChunkProvider method createWorldView.

private ChunkViewCore createWorldView(Region3i region, Vector3i offset) {
    Chunk[] chunks = new Chunk[region.sizeX() * region.sizeY() * region.sizeZ()];
    for (Vector3i chunkPos : region) {
        Chunk chunk = chunkCache.get(chunkPos);
        if (chunk == null) {
            return null;
        }
        chunkPos.sub(region.minX(), region.minY(), region.minZ());
        int index = TeraMath.calculate3DArrayIndex(chunkPos, region.size());
        chunks[index] = chunk;
    }
    return new ChunkViewCoreImpl(chunks, region, offset, blockManager.getBlock(BlockManager.AIR_ID));
}
Also used : ChunkViewCoreImpl(org.terasology.world.internal.ChunkViewCoreImpl) Vector3i(org.terasology.math.geom.Vector3i) Chunk(org.terasology.world.chunks.Chunk) ManagedChunk(org.terasology.world.chunks.ManagedChunk)

Example 4 with Chunk

use of org.terasology.world.chunks.Chunk in project Terasology by MovingBlocks.

the class LocalChunkProvider method createOrLoadChunk.

private void createOrLoadChunk(Vector3i chunkPos) {
    Chunk chunk = chunkCache.get(chunkPos);
    if (chunk == null && !preparingChunks.contains(chunkPos)) {
        preparingChunks.add(chunkPos);
        pipeline.doTask(new AbstractChunkTask(chunkPos) {

            @Override
            public String getName() {
                return "Create or Load Chunk";
            }

            @Override
            public void run() {
                ChunkStore chunkStore = storageManager.loadChunkStore(getPosition());
                Chunk chunk;
                EntityBufferImpl buffer = new EntityBufferImpl();
                if (chunkStore == null) {
                    chunk = new ChunkImpl(getPosition(), blockManager, biomeManager);
                    generator.createChunk(chunk, buffer);
                } else {
                    chunk = chunkStore.getChunk();
                }
                InternalLightProcessor.generateInternalLighting(chunk);
                chunk.deflate();
                TShortObjectMap<TIntList> mappings = createBatchBlockEventMappings(chunk);
                readyChunks.offer(new ReadyChunkInfo(chunk, mappings, chunkStore, buffer.getAll()));
            }
        });
    }
}
Also used : ChunkImpl(org.terasology.world.chunks.internal.ChunkImpl) AbstractChunkTask(org.terasology.world.chunks.pipeline.AbstractChunkTask) ReadyChunkInfo(org.terasology.world.chunks.internal.ReadyChunkInfo) EntityBufferImpl(org.terasology.world.generation.impl.EntityBufferImpl) TShortObjectMap(gnu.trove.map.TShortObjectMap) Chunk(org.terasology.world.chunks.Chunk) ManagedChunk(org.terasology.world.chunks.ManagedChunk) ChunkStore(org.terasology.persistence.ChunkStore)

Example 5 with Chunk

use of org.terasology.world.chunks.Chunk in project Terasology by MovingBlocks.

the class LocalChunkProvider method dispose.

@Override
public void dispose() {
    shutdown();
    for (Chunk chunk : chunkCache.getAllChunks()) {
        unloadChunkInternal(chunk.getPosition());
        chunk.dispose();
    }
    chunkCache.clear();
    /*
         * The chunk monitor needs to clear chunk references, so it's important
         * that no new chunk get created
         */
    ChunkMonitor.fireChunkProviderDisposed(this);
}
Also used : Chunk(org.terasology.world.chunks.Chunk) ManagedChunk(org.terasology.world.chunks.ManagedChunk)

Aggregations

Chunk (org.terasology.world.chunks.Chunk)50 Vector3i (org.terasology.math.geom.Vector3i)31 Test (org.junit.Test)28 ChunkImpl (org.terasology.world.chunks.internal.ChunkImpl)18 ReadyChunkInfo (org.terasology.world.chunks.internal.ReadyChunkInfo)9 ManagedChunk (org.terasology.world.chunks.ManagedChunk)8 ChunkViewCoreImpl (org.terasology.world.internal.ChunkViewCoreImpl)8 ChunkStore (org.terasology.persistence.ChunkStore)7 EntityRef (org.terasology.entitySystem.entity.EntityRef)5 ChunkViewCore (org.terasology.world.internal.ChunkViewCore)5 ChunkProvider (org.terasology.world.chunks.ChunkProvider)3 TIntList (gnu.trove.list.TIntList)2 TShortObjectHashMap (gnu.trove.map.hash.TShortObjectHashMap)2 EntityStore (org.terasology.entitySystem.entity.EntityStore)2 EngineEntityManager (org.terasology.entitySystem.entity.internal.EngineEntityManager)2 Event (org.terasology.entitySystem.event.Event)2 LocationComponent (org.terasology.logic.location.LocationComponent)2 Side (org.terasology.math.Side)2 StorageManager (org.terasology.persistence.StorageManager)2 Block (org.terasology.world.block.Block)2