public VoxelGeometryVolumeRequest[] Pull(int pullCount, Vector3 sortPriorityPosition = default)
        {
            for (var index = 0; index < pullCount; index++)
            {
                var count = _requests.Count;

                if (count < 1)
                {
                    break;
                }

                var bestRequest  = new VoxelGeometryVolumeRequest();
                var bestIndex    = 0;
                var bestDistance = float.MaxValue;

                for (var i = 0; i < count; i++)
                {
                    var request       = _requests[i];
                    var chunkPosition = new Vector3(
                        request.chunkPosition.x * request.chunkSize.x,
                        request.chunkPosition.y * request.chunkSize.y,
                        request.chunkPosition.z * request.chunkSize.z);
                    var currentDistance    = Vector3.Distance(sortPriorityPosition, chunkPosition);
                    var currentDistanceAbs = Mathf.Abs(currentDistance);

                    if (bestDistance > currentDistanceAbs)
                    {
                        bestRequest  = request;
                        bestDistance = currentDistance;
                        bestIndex    = i;
                    }
                }

                _requests.RemoveAt(bestIndex);

                _pullBuffer.Add(bestRequest);
            }

            var pullBuffer = _pullBuffer.ToArray();

            _pullBuffer.Clear();

            return(pullBuffer);
        }
Exemplo n.º 2
0
        public VoxelGeometryChunkResponse Execute(VoxelGeometryVolumeRequest geometryVolumeRequest)
        {
            _currentGeometryChunkCommand.geometryVolumeRequest = geometryVolumeRequest;

            _currentGeometryChunkCommand.Execute();

            var elementLengths = _currentGeometryChunkCommand.elementLengths;
            var verticesLength = elementLengths[0];
            var indicesLength  = elementLengths[1];

            var vertices = new Vector3[verticesLength];
            var colors   = new Color32[verticesLength];
            var indices  = new int[indicesLength];

            Array.Copy(_vertices, vertices, verticesLength);
            Array.Copy(_colors, colors, verticesLength);
            Array.Copy(_indices, indices, indicesLength);

            var command = _currentGeometryChunkCommand.geometryVolumeRequest;

            var chunkIndex = VoxelChunkUtility.GetIndex(command.chunkPosition);

            return(new VoxelGeometryChunkResponse(chunkIndex, vertices, indices, colors));
        }
 public void Push(VoxelGeometryVolumeRequest geometryVolumeRequest)
 {
     _requests.Add(geometryVolumeRequest);
 }