private void UpdateMeshData(Vector3 pPos) { for (int p = 0; p < 6; p++) { if (!IsVoxelSolid(pPos + VoxelData.FaceChecks[p])) { EBlockId blockID = chunkData.map[(int)pPos.x, (int)pPos.y, (int)pPos.z]; vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 0]]); vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 1]]); vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 2]]); vertices.Add(pPos + VoxelData.VoxelVerts[VoxelData.VoxelTris[p, 3]]); for (int i = 0; i < 4; i++) { normals.Add(VoxelData.FaceChecks[p]); } AddTexture(World.Instance.BlockManager.GetTexture(blockID, p)); triangles.Add(vertexIndex); triangles.Add(vertexIndex + 1); triangles.Add(vertexIndex + 2); triangles.Add(vertexIndex + 2); triangles.Add(vertexIndex + 1); triangles.Add(vertexIndex + 3); vertexIndex += 4; } } }
public void EditVoxel(Vector3 pPos, EBlockId pNewID) { int xCheck = Mathf.FloorToInt(pPos.x); int yCheck = Mathf.FloorToInt(pPos.y); int zCheck = Mathf.FloorToInt(pPos.z); xCheck -= Mathf.FloorToInt(chunkObject.transform.position.x); zCheck -= Mathf.FloorToInt(chunkObject.transform.position.z); chunkData.map[xCheck, yCheck, zCheck] = pNewID; World.Instance.WorldData.AddToModifiedChunkList(chunkData); UpdateSurroundingVoxels(xCheck, yCheck, zCheck); UpdateChunk(); }
internal float GetDuration(EBlockId pId) { switch (pId) { case EBlockId.Yellow: return(0.2f); case EBlockId.Blue: return(0.5f); case EBlockId.Pink: return(1f); case EBlockId.Orange: return(2f); case EBlockId.Stone: return(0.2f); case EBlockId.Bedrock: return(int.MaxValue); } return(0); }
public void TryDestroyVoxel(Vector3 pPos, float pMouseHoldTime) { int xCheck = Mathf.FloorToInt(pPos.x); int yCheck = Mathf.FloorToInt(pPos.y); int zCheck = Mathf.FloorToInt(pPos.z); xCheck -= Mathf.FloorToInt(chunkObject.transform.position.x); zCheck -= Mathf.FloorToInt(chunkObject.transform.position.z); EBlockId id = chunkData.map[xCheck, yCheck, zCheck]; float duration = World.Instance.BlockManager.GetDuration(id); string durationText = id == EBlockId.Bedrock ? "undestructable" : duration.ToString("0.0"); string debugText = $"Try destroy: {pMouseHoldTime:0.0}/{durationText}"; World.Instance.DebugScreen.DestroyText = debugText; Debug.Log(debugText); if (duration < pMouseHoldTime) { EditVoxel(pPos, EBlockId.None); } }
internal int GetTexture(EBlockId pId, int pFace) { return(blockTypes[pId].GetTexture(pFace)); }
internal bool IsSolid(EBlockId pId) { return(pId != EBlockId.None); }
private void Init() { map = new EBlockId[Settings.Get.ChunkWidth, Settings.Get.ChunkHeight, Settings.Get.ChunkWidth]; }
public bool IsVoxelSolid(Vector3 pPos) { EBlockId voxel = World.Instance.WorldData.GetVoxel(pPos); return(World.Instance.BlockManager.IsSolid(voxel)); }