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)); } } }
public void Close() { _destroyed = true; if (builder != null) { builder.Dispose(); builder = null; builderInstance = null; } }
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; }
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); }
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; }
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); * }*/ }); }
public void Close() { builder.Dispose(); builder = null; builderInstance = null; }