Пример #1
0
    void Update()
    {
        if (MeshAdded)
        {
            MeshAdded = false;

            var prefabMeshes = DeformedMesh.DMBranches[DeformedMesh.SplinePlus.SPData.Selections._BranchKey].PrefabMeshes;
            var prefabMesh   = new PrefabMesh();
            prefabMesh.Prefab    = NewMeshAdded;
            prefabMesh.LayerName = NewMeshAdded.name;
            var importedMat = prefabMesh.Prefab.GetComponent <MeshRenderer>().sharedMaterial;
            if (importedMat != null)
            {
                prefabMesh.Material = importedMat;
            }
            else
            {
                prefabMesh.Material = (Material)EditorGUIUtility.Load("Assets/ElseForty/Assets/Materials/Base.mat");
            }
            prefabMeshes.Add(prefabMesh);
            DeformedMesh._Layer = prefabMeshes.Count - 1;

            UpdateMaterials();
            DeformedMesh.IsUpdateBase = true;
            DeformedMesh.DrawMeshOnEachBranch();
        }
    }
Пример #2
0
    void DuplicateMeshLayer()
    {
        var prefabMeshes  = DeformedMesh.DMBranches[DeformedMesh.SplinePlus.SPData.Selections._BranchKey].PrefabMeshes;
        var origMeshLayer = prefabMeshes[DeformedMesh._Layer];

        var prefabMesh = new PrefabMesh();

        prefabMesh.Prefab    = origMeshLayer.Prefab;
        prefabMesh.LayerName = origMeshLayer.Prefab.name;

        prefabMesh.UniqueMat = origMeshLayer.UniqueMat;
        prefabMesh.Material  = origMeshLayer.Material;
        prefabMesh._mat      = origMeshLayer._mat;

        prefabMesh.RandomOffset   = origMeshLayer.RandomOffset;
        prefabMesh.RandomRotation = origMeshLayer.RandomRotation;
        prefabMesh.RandomScale    = origMeshLayer.RandomScale;

        prefabMesh.Offset       = origMeshLayer.Offset;
        prefabMesh.Rotation     = origMeshLayer.Rotation;
        prefabMesh.Scale        = origMeshLayer.Scale;
        prefabMesh.UniformScale = origMeshLayer.UniformScale;


        prefabMesh.ROffset   = origMeshLayer.ROffset;
        prefabMesh.RRotation = origMeshLayer.RRotation;
        prefabMesh.RScale    = origMeshLayer.RScale;

        prefabMesh.RUniformScale = origMeshLayer.RUniformScale;

        prefabMesh.Uniform = origMeshLayer.Uniform;

        prefabMesh.Tiling = origMeshLayer.Tiling;

        prefabMesh.Spacing       = origMeshLayer.Spacing;
        prefabMesh.RandomSpacing = origMeshLayer.RandomSpacing;
        prefabMesh.LinkedSpacing = origMeshLayer.LinkedSpacing;

        prefabMesh.Placement = origMeshLayer.Placement;

        prefabMesh.LockRot      = origMeshLayer.LockRot;
        prefabMesh.LockRotation = origMeshLayer.LockRotation;

        prefabMesh._Axis            = origMeshLayer._Axis;
        prefabMesh._DeformationType = origMeshLayer._DeformationType;

        prefabMesh.Mirror       = origMeshLayer.Mirror;
        prefabMesh.MirrorOffset = origMeshLayer.MirrorOffset;
        prefabMesh._MirrorAxis  = origMeshLayer._MirrorAxis;

        prefabMesh.Visible = origMeshLayer.Visible;

        prefabMeshes.Add(prefabMesh);
        DeformedMesh._Layer = prefabMeshes.Count - 1;

        UpdateMaterials();
        DeformedMesh.IsUpdateBase = true;
        DeformedMesh.DrawMeshOnEachBranch();
    }
Пример #3
0
    Mesh MeshDeformation(Mesh mesh, Branch branch, DMBranch dMBranch, PrefabMesh prefabMesh, int n)
    {
        var     newVertices   = new Vector3[mesh.vertices.Length];
        float   verDistOnAxis = 0;
        Vector3 VerPosOnAxis  = Vector3.zero;

        for (int i = 0; i < newVertices.Length; i++)
        {
            verDistOnAxis = dMBranch.PrefabMeshes[n].VerticesPosition[i].z;
            VerPosOnAxis  = dMBranch.PrefabMeshes[n].VerticesPosition[i];

            if (prefabMesh._MeshTrim == MeshTrim.Both)
            {
                VerPosOnAxis.z = 0;
            }
            else if (prefabMesh._MeshTrim == MeshTrim.Left)
            {
                if (verDistOnAxis > 0)
                {
                    VerPosOnAxis.z = 0;
                }
            }
            else if (prefabMesh._MeshTrim == MeshTrim.Right)
            {
                if (verDistOnAxis < branch.BranchDistance)
                {
                    VerPosOnAxis.z = 0;
                }
                if (verDistOnAxis > branch.BranchDistance)
                {
                    VerPosOnAxis.z -= branch.BranchDistance;
                }
            }
            else
            {
                if (verDistOnAxis > 0 && verDistOnAxis < branch.BranchDistance)
                {
                    VerPosOnAxis.z = 0;
                }
                if (verDistOnAxis > branch.BranchDistance)
                {
                    VerPosOnAxis.z -= branch.BranchDistance;
                }
            }


            var distanceData = DistanceDataClass.DataExtraction(branch, verDistOnAxis);
            newVertices[i] = (distanceData.Rotation * VerPosOnAxis) + distanceData.Position;
        }
        mesh.vertices = newVertices;
        return(mesh);
    }