Example #1
0
        public Space3D <Mesh> Completed()
        {
            var system = new Space3D <Mesh>();

            foreach (var work in processed)
            {
                var mesh = Compile(work.Fab);
                system.Set(work.Blocks.Coordinate, mesh);
            }
            processed.Clear();
            return(system);
        }
Example #2
0
        public void Enqueue(ChunkBlocks blocks)
        {
            if (queue.Contains(blocks.X, blocks.Y, blocks.Z))
            {
                return;
            }

            var work = new WorkItem()
            {
                Blocks = blocks
            };

            queue.Set(blocks.X, blocks.Y, blocks.Z, work);
        }
Example #3
0
    private void UpdateChunks()
    {
        var processed = factory.Completed();

        if (!processed.IsEmpty)
        {
            foreach (var entity in processed)
            {
                var coord  = entity.Coordinate;
                var mesh   = entity.Element;
                var blocks = chunkBlocks.Get(coord);
                var chunk  = Chunk.Create(blocks, material, coord.x, coord.y, coord.z, gameObject, mesh);
                chunks.Set(coord, chunk);
            }
        }
    }
Example #4
0
    public void Ping(Vector3Int position)
    {
        var current = generators.Get(MathHelper.Anchor(position.x, position.y, position.z, REGION));

        chunkBlocks.Ping(position, radius, v =>
        {
            var coord = MathHelper.Anchor(v.x, v.y, v.z, REGION);
            if (!generators.TryGet(ref coord, out ChunkGenerator biome))
            {
                biome = current.Transitions[(int)(Random.value * (current.Transitions.Length))];
                generators.Set(coord, biome);
            }

            var chunk  = new ChunkBlocks(v.x, v.y, v.z, SIZE);
            var result = biome.Generate(v, chunk, SIZE);
            factory.Enqueue(result);
            return(result);
        });
Example #5
0
    private void Start()
    {
        radius      = new Vector3Int(16, 3, 16);
        chunks      = new Space3D <Chunk>();
        generators  = new Space3D <ChunkGenerator>();
        chunkBlocks = new Space3D <ChunkBlocks>();
        factory     = new ChunkFactory();

        var chunk = player.Chunk();

        generators.Set(MathHelper.Anchor(chunk.x, chunk.y, chunk.z, REGION), start);

        Ping(player.Chunk());
        for (int i = 0; i < STARTUP_PROCESSED_CHUNKS; i++)
        {
            factory.Process(player.Chunk());
        }
    }