public float ValueSample(Vector3Int local, Vector3Int global)
    {
        uint type;

        return((float)Sampler.GetIsoValue(local, global, out type));

        if (IsInBounds(local.x, local.y, local.z))
        {
            return(GetBlockValue(local.x, local.y, local.z));
        }
        else
        {
            Vector3Int         chunk           = VoxelConversions.VoxelToChunk(global);
            Vector3Int         chunklocalVoxel = VoxelConversions.GlobalToLocalChunkCoord(chunk, global);
            SmoothVoxelBuilder builder         = (SmoothVoxelBuilder)controller.GetBuilder(chunk.x, chunk.y, chunk.z);
            if (builder != null)
            {
                return(builder.GetBlockValue(chunklocalVoxel.x, chunklocalVoxel.y, chunklocalVoxel.z));
            }
            else
            {
                return((float)Sampler.GetIsoValue(chunklocalVoxel, global, out type));
            }
        }
    }
Exemple #2
0
 public void Close()
 {
     _destroyed = true;
     if (builder != null)
     {
         builder.Dispose();
         builder         = null;
         builderInstance = null;
     }
 }
Exemple #3
0
 public void createChunkBuilder()
 {
     builder = new SmoothVoxelBuilder(TerrainController.Instance,
                                      chunkPosition,
                                      VoxelSettings.voxelsPerMeter,
                                      VoxelSettings.MeterSizeX,
                                      VoxelSettings.MeterSizeY,
                                      VoxelSettings.MeterSizeZ);
     builder.SetBlockTypes(TerrainController.Instance.BlocksArray, TerrainController.Instance.AtlasUvs);
     builderInstance = (SmoothVoxelBuilder)builder;
 }
Exemple #4
0
    public static void SpawnChunk(Vector3Int chunkPos, ISampler sampler, IPageController controller)
    {
        Vector3 worldPos       = VoxelConversions.ChunkCoordToWorld(chunkPos);
        double  voxelsPerMeter = SmoothVoxelSettings.voxelsPerMeter;

        SmoothVoxelBuilder builder = new SmoothVoxelBuilder(controller, chunkPos);

        builder.SetBlockTypes(controller.BlockTypes, null);
        builder.CalculateVariables(voxelsPerMeter, SmoothVoxelSettings.MeterSizeX, SmoothVoxelSettings.MeterSizeY, SmoothVoxelSettings.MeterSizeZ);
        builder.Generate(sampler);

        SmoothChunk chunk = GameObject.Instantiate(controller.ChunkPrefab).GetComponent <SmoothChunk>();

        chunk.name = string.Format("Chunk_{0}.{1}.{2}", chunkPos.x, chunkPos.y, chunkPos.z);
        chunk.Init(chunkPos, worldPos, null, controller, 1, builder);
    }
Exemple #5
0
 public void Init(Vector3Int chunkPos, Vector3 worldPos, IModule module, IPageController controller, int lodLevel, SmoothVoxelBuilder smoothBuilder)
 {
     editQueue          = new List <BlockChange>();
     _lockObj           = new object();
     surface            = new List <Vector3Int>();
     chunkPosition      = chunkPos;
     surfaceModule      = module;
     LODlevel           = lodLevel;
     oldLODlevel        = lodLevel;
     pageController     = controller;
     transform.position = worldPos;
     transform.parent   = controller.getGameObject().transform;
     globalPosition     = transform.position;
     _renderer          = gameObject.GetComponent <MeshRenderer>();
     _filter            = gameObject.GetComponent <MeshFilter>();
     _collider          = gameObject.GetComponent <MeshCollider>();
     //_renderer.material.SetTexture("_MainTex", TerrainController.Instance.textureAtlas);
     //_player = TerrainController.Instance.player;
     builderInstance = smoothBuilder;
     builder         = smoothBuilder;
 }
Exemple #6
0
    public static void CreateChunk(Vector3Int chunkPos, ISampler sampler, IPageController controller)
    {
        Vector3 worldPos       = VoxelConversions.ChunkCoordToWorld(chunkPos);
        double  voxelsPerMeter = SmoothVoxelSettings.voxelsPerMeter;

        SmoothVoxelBuilder builder = new SmoothVoxelBuilder(controller, chunkPos);

        builder.SetBlockTypes(controller.BlockTypes, null);
        builder.CalculateVariables(voxelsPerMeter, SmoothVoxelSettings.MeterSizeX, SmoothVoxelSettings.MeterSizeY, SmoothVoxelSettings.MeterSizeZ);
        builder.Generate(sampler);

        System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
        watch.Start();

        MeshData meshData = builder.Render(false);

        watch.Stop();
        Debug.Log("Chunk Generated at " + watch.Elapsed);
        //if (meshData.vertices.Length == 0)
        //    return;

        Loom.QueueOnMainThread(() => {
            SmoothChunk chunk = GameObject.Instantiate(controller.ChunkPrefab).GetComponent <SmoothChunk>();
            chunk.name        = string.Format("Chunk_{0}.{1}.{2}", chunkPos.x, chunkPos.y, chunkPos.z);
            chunk.Init(chunkPos, worldPos, null, controller, 1, builder);
            chunk.Render(meshData, true);
            Loom.QueueAsyncTask("gen2", () => controller.AddChunk(chunkPos, chunk));

            /*if (!TerrainController.Instance.Chunks.ContainsKey(chunkPos))
             * {
             *  SmoothChunk chunk = GameObject.Instantiate(TerrainController.Instance.chunkPrefab).GetComponent<SmoothChunk>();
             *  chunk.name = string.Format("Chunk_{0}.{1}.{2}", chunkPos.x, chunkPos.y, chunkPos.z);
             *  chunk.Init(chunkPos, worldPos, null, controller, 1, builder);
             *  chunk.Render(meshData);
             *  TerrainController.Instance.AddChunk(chunkPos, chunk);
             * }*/
        });
    }
Exemple #7
0
 public void Close()
 {
     builder.Dispose();
     builder         = null;
     builderInstance = null;
 }