public static GameObject CreatePeakBasis(int res, int materialID) { var dataArray = new GeneratedMeshPartInfo[res, res, res]; GeneratedMeshPartInfo tube = GeneratedMeshPartInfo.Tube, endFlat = GeneratedMeshPartInfo.StickHead; tube.SetMaterial(materialID); endFlat.SetMaterial(materialID); int quarter = res / 4, half = res / 2; int a = half - quarter, b = half + quarter; int h = 0, y = 0; float sqrDist = (half - a) * (half - a); for (int x = a; x < b; x++) { for (int z = a; z < b; z++) { float d = (half - x) * (half - x) + (half - z) * (half - z); d /= sqrDist; d = 1 - d; if (d < 0) { d = 0; } h = (int)((res - 1) * d * d + (0.5f - Random.value) * (res / 8f)); if (h >= res) { h = res; } y = 0; for (; y < h - 1; y++) { dataArray[x, y, z] = tube; } if (Random.value > 0.5f) { dataArray[x, y, z] = GeneratedMeshPartInfo.MakeCutToUp((byte)Random.Range(0, 4), materialID); } else { dataArray[x, y, z] = endFlat; } } } for (y = 0; y < res - 1; y++) { dataArray[half, y, half] = tube; } dataArray[half, y, half] = endFlat; // оптимизация массива внутри return(ConstructGeneratedMesh(dataArray, materialID)); }
static GeneratedMeshPartInfo() { StickHead = new GeneratedMeshPartInfo( new MeshType[7] { MeshType.Quad, MeshType.Quad, MeshType.Quad, MeshType.Quad, MeshType.Quad, MeshType.NoMesh, MeshType.NoMesh }, 0 ); Tube = new GeneratedMeshPartInfo( new MeshType[7] { MeshType.Quad, MeshType.Quad, MeshType.Quad, MeshType.Quad, MeshType.NoMesh, MeshType.NoMesh, MeshType.NoMesh }, 0 ); }
public static GameObject GetModernRuinPart(int size) { GeneratedMeshPartInfo[,,] dataArray; switch (size) { case 1: { dataArray = new GeneratedMeshPartInfo[1, 1, 1]; dataArray[0, 0, 0] = GeneratedMeshPartInfo.StickHead; return(ConstructGeneratedMesh(dataArray, PoolMaster.MATERIAL_WHITEWALL_ID)); } case 2: { dataArray = new GeneratedMeshPartInfo[2, 2, 2]; dataArray[0, 0, 0] = GeneratedMeshPartInfo.Tube; dataArray[0, 1, 0] = GeneratedMeshPartInfo.MakeCutToUp((byte)Random.Range(0, 4), ResourceType.GRAPHONIUM_ID); float f = Random.value; if (f > 0.5f) { dataArray[1, 0, 1] = f > 0.75f ? GeneratedMeshPartInfo.StickHead : GeneratedMeshPartInfo.MakeCutToUp(1, ResourceType.GRAPHONIUM_ID); } return(ConstructGeneratedMesh(dataArray, PoolMaster.MATERIAL_WHITEWALL_ID)); } case 3: { dataArray = new GeneratedMeshPartInfo[3, 3, 3]; dataArray[1, 0, 1] = GeneratedMeshPartInfo.Tube; dataArray[1, 1, 1] = GeneratedMeshPartInfo.Tube; dataArray[1, 2, 1] = GeneratedMeshPartInfo.MakeCutToUp((byte)Random.Range(0, 4), ResourceType.GRAPHONIUM_ID); return(ConstructGeneratedMesh(dataArray, PoolMaster.MATERIAL_WHITEWALL_ID)); } } return(null); }