public void SetMaterialMaps() { for (var z = Size.Z - 1; z >= 0; z--) { for (var y = 0; y < Size.Y; y++) { for (var x = 0; x < Size.X; x++) { byte ID = (byte)ChunkMap[z, y, x]; if (ID != 0) { SideParams sp = SideParams.GetSideParamsFromBlock(worldResources, IndexInWorldArray, new Vector3(x, y, z)); sp.ID = ID; sp.Position = new Vector3(Position.x + x, Position.y + z, Position.z + y); if (sp.IsFullDisabled() == false) { MaterialMaps[ID - 1].Map.Add(sp); } } } } } }
public static SideParams GetSideParamsFromBlock(WorldResources worldRes, Point chunkPosInWorldArray, Vector3 blockPos, bool chunkEdges = true) { ArrayDimensions CMSize = new ArrayDimensions(worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(0), worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(1), worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(2)); SideParams sp = new SideParams(); if (blockPos.x - 1 < 0) { if (chunkPosInWorldArray.X - 1 < 0) { sp.Left = chunkEdges; } else { if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y, (int)chunkPosInWorldArray.X - 1].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)CMSize.X - 1] == 0) { sp.Left = true; } else { sp.Left = false; } } } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)blockPos.x - 1] == 0) { sp.Left = true; } } if (blockPos.y - 1 < 0) { if (chunkPosInWorldArray.Y - 1 < 0) { sp.Backward = chunkEdges; //false } else { if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y - 1, (int)chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)CMSize.Y - 1, (int)blockPos.x] == 0) { sp.Backward = true; } else { sp.Backward = false; } } } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y - 1, (int)blockPos.x] == 0) { sp.Backward = true; } } if (blockPos.z - 1 < 0) { sp.Down = false; } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z - 1, (int)blockPos.y, (int)blockPos.x] == 0) { sp.Down = true; } } if (blockPos.x + 1 >= CMSize.X) { if (chunkPosInWorldArray.X + 1 >= worldRes.WorldMap.GetLength(1)) { sp.Right = chunkEdges; // false } else { if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y, (int)chunkPosInWorldArray.X + 1].ChunkMap[(int)blockPos.z, (int)blockPos.y, 0] == 0) { sp.Right = true; } else { sp.Right = false; } } } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)blockPos.x + 1] == 0) { sp.Right = true; } } if (blockPos.y + 1 >= CMSize.Y) { if (chunkPosInWorldArray.Y + 1 >= worldRes.WorldMap.GetLength(0)) { sp.Forward = chunkEdges; // false } else { if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y + 1, (int)chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, 0, (int)blockPos.x] == 0) { sp.Forward = true; } else { sp.Forward = false; } } } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y + 1, (int)blockPos.x] == 0) { sp.Forward = true; } } if (blockPos.z + 1 >= CMSize.Z) { sp.Up = false; } else { if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z + 1, (int)blockPos.y, (int)blockPos.x] == 0) { sp.Up = true; } } return(sp); }