/// <summary> /// Creates a new block with a specified color value index /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> /// <param name="color"></param> public static void AddCube(int x, int y, int z, int color) { if (Singleton == null) { return; } int chunkX = Mathf.FloorToInt(x / 16f); int chunkY = Mathf.FloorToInt(y / 16f); int chunkZ = Mathf.FloorToInt(z / 16f); int chunkKey = Singleton.Vector3ToInt(chunkX, chunkY, chunkZ); ChunkController chunk = Singleton.GetChunkByBlock(x, y, z); if (chunk == null) { chunk = Singleton.CreateChunk(chunkX, chunkY, chunkZ); Singleton.chunks.Add(chunkKey, chunk); } int paletteWidth = ColorPaletteManager.GetPaletteWidth(); int colorX = color % paletteWidth; int colorY = Mathf.FloorToInt(color / paletteWidth); chunk.AddCube(Mathf.Abs(x - chunkX * 16), Mathf.Abs(y - chunkY * 16), Mathf.Abs(z - chunkZ * 16), colorX, colorY); }
public static Mesh GetCompleteMesh() { if (Singleton == null) { return(null); } var chunks = Singleton.chunks.Values.ToArray(); var combines = new CombineInstance[chunks.Length]; for (int i = 0; i < chunks.Length; i++) { ChunkController chunk = chunks[i]; combines[i].mesh = chunk.GetMesh(); combines[i].transform = chunk.transform.localToWorldMatrix; } var wholeMesh = new Mesh(); wholeMesh.CombineMeshes(combines); wholeMesh.RecalculateNormals(); wholeMesh.RecalculateTangents(); wholeMesh.RecalculateBounds(); return(wholeMesh); }
public static void RemoveChunk(int x, int y, int z) { if (Singleton == null) { return; } ChunkController chunk = Singleton.GetChunk(x, y, z); if (chunk == null) { return; } Destroy(chunk.gameObject); Singleton.chunks.Remove(Singleton.Vector3ToInt(x, y, z)); }
public static void RemoveCube(int x, int y, int z) { if (Singleton == null) { return; } int chunkX = Mathf.FloorToInt(x / 16f); int chunkY = Mathf.FloorToInt(y / 16f); int chunkZ = Mathf.FloorToInt(z / 16f); ChunkController chunk = Singleton.GetChunkByBlock(x, y, z); if (chunk == null) { return; } chunk.RemoveCube(Mathf.Abs(x - chunkX * 16), Mathf.Abs(y - chunkY * 16), Mathf.Abs(z - chunkZ * 16)); }
/// <summary> /// Creates a new block using the current closestColor /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> public static void AddCube(int x, int y, int z) { if (Singleton == null) { return; } int chunkX = Mathf.FloorToInt(x / 16f); int chunkY = Mathf.FloorToInt(y / 16f); int chunkZ = Mathf.FloorToInt(z / 16f); int chunkKey = Singleton.Vector3ToInt(chunkX, chunkY, chunkZ); ChunkController chunk = Singleton.GetChunkByBlock(x, y, z); if (chunk == null) { chunk = Singleton.CreateChunk(chunkX, chunkY, chunkZ); Singleton.chunks.Add(chunkKey, chunk); } var closestColor = ColorpickerController.GetClosestColor(); chunk.AddCube(Mathf.Abs(x - chunkX * 16), Mathf.Abs(y - chunkY * 16), Mathf.Abs(z - chunkZ * 16), closestColor.x, closestColor.y); }