Ejemplo n.º 1
0
    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));
    }
Ejemplo n.º 2
0
 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
         );
 }
Ejemplo n.º 3
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);
    }