Ejemplo n.º 1
0
    public void ExtrudeAroundPointsButtonPressed()
    {
        Mesh mesh = null;

        //
        if (DontLinkMeshGameObject || UseMeshObject == null)
        {
            mesh = CreateNewExtrudeMeshObject();
        }
        else
        {
            mesh = UseMeshObject.GetComponent <MeshFilter>().sharedMesh;
        }

        //get the current spline component if there's any
        SplineCreator = GetComponent <SplineCreator>();

        if (SplineCreator != null)
        {
            ExtrudeAroundPoints(mesh, SplineCreator.Beziers);
        }
        else
        {
            Debug.LogError("A SplineCreator component with splines needs to be attached to this GameObject in order to extrude a path");
        }
    }
        private void Apply(GStylizedTerrain t)
        {
            if (t.TerrainData == null)
            {
                return;
            }
            if (PrototypeIndices.Count == 0)
            {
                return;
            }
            if (Prototypes.Count == 0)
            {
                return;
            }
            RenderTexture  rt       = new RenderTexture(MaskResolution, MaskResolution, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
            List <Vector4> vertices = SplineCreator.GenerateVerticesWithFalloff();

            Internal_Apply(t, rt, vertices);
            Texture2D mask = GCommon.CreateTexture(MaskResolution, Color.clear);

            GCommon.CopyFromRT(mask, rt);
            mask.wrapMode = TextureWrapMode.Clamp;

            Color[] maskColors = mask.GetPixels();
            RemoveObjectFromTerrain(t, maskColors);

            rt.Release();
            GUtilities.DestroyObject(rt);
            GUtilities.DestroyObject(mask);
        }
Ejemplo n.º 3
0
 public void OnEnable()
 {
     Undo.undoRedoPerformed       += UndoCallback;
     _SplineCreator                = (SplineCreator)target;
     _SplineCreator.BranchCreators = ArrayUtility.ComponentFilter <SplineBranchCreator>(HierarchyUtility.GetChildrenOfAllParents(Selection.gameObjects));
     _DebugInspector               = new SplineDebugInspector <SplineCreator>(_SplineCreator);
 }
Ejemplo n.º 4
0
        private void Apply(GStylizedTerrain t)
        {
            if (t.TerrainData == null)
            {
                return;
            }
            RenderTexture  rt       = new RenderTexture(MaskResolution, MaskResolution, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
            List <Vector4> vertices = SplineCreator.GenerateVerticesWithFalloff();

            Internal_Apply(t, rt, vertices);
            Texture2D mask = GCommon.CreateTexture(MaskResolution, Color.clear);

            GCommon.CopyFromRT(mask, rt);
            mask.wrapMode = TextureWrapMode.Clamp;

            Color[] maskColors = mask.GetPixels();
            if (RemoveTrees)
            {
                RemoveTreeOnTerrain(t, maskColors);
            }
            if (RemoveGrasses)
            {
                RemoveGrassOnTerrain(t, maskColors);
                t.UpdateGrassPatches();
            }

            t.TerrainData.Foliage.ClearGrassDirtyRegions();
            t.TerrainData.SetDirty(GTerrainData.DirtyFlags.Foliage);

            rt.Release();
            GUtilities.DestroyObject(rt);
            GUtilities.DestroyObject(mask);
        }
Ejemplo n.º 5
0
 private void OnEnable()
 {
     SplineCreatorRef = (SplineCreator)target;
     if (SplineCreatorRef.Spline == null)
     {
         SplineCreatorRef.CreateSpline();
     }
     TargetSpline = SplineCreatorRef.Spline;
 }
Ejemplo n.º 6
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();                                   //Expose all public members
        SplineCreator creator = (SplineCreator)target;            //Cast the target (from Unity) as a SplineNode

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Update"))
        {
            creator.UpdateSpline();
        }
        if (GUILayout.Button("Remove"))
        {
            creator.RemoveSpline();
        }
        GUILayout.EndHorizontal();
    }
Ejemplo n.º 7
0
        private void Apply(GStylizedTerrain t)
        {
            if (t.TerrainData == null)
            {
                return;
            }
            List <Vector4> worldPoints = SplineCreator.GenerateVerticesWithFalloff();

            if (Channel == PaintChannel.AlbedoAndMetallic)
            {
                ApplyAlbedoAndMetallic(t, worldPoints);
            }
            else if (Channel == PaintChannel.Splat)
            {
                ApplySplat(t, worldPoints);
            }
            t.TerrainData.SetDirty(GTerrainData.DirtyFlags.Shading);
        }
Ejemplo n.º 8
0
        private void Apply(GStylizedTerrain t)
        {
            if (t.TerrainData == null)
            {
                return;
            }
            int            heightMapResolution = t.TerrainData.Geometry.HeightMapResolution;
            RenderTexture  rt       = new RenderTexture(heightMapResolution, heightMapResolution, 0, GGeometry.HeightMapRTFormat, RenderTextureReadWrite.Linear);
            List <Vector4> vertices = SplineCreator.GenerateVerticesWithFalloff();

            Internal_Apply(t, rt, vertices);

            Color[] oldHeightMapColors = t.TerrainData.Geometry.HeightMap.GetPixels();
            RenderTexture.active = rt;
            t.TerrainData.Geometry.HeightMap.ReadPixels(new Rect(0, 0, heightMapResolution, heightMapResolution), 0, 0);
            t.TerrainData.Geometry.HeightMap.Apply();
            RenderTexture.active = null;
            Color[] newHeightMapColors = t.TerrainData.Geometry.HeightMap.GetPixels();

            rt.Release();
            Object.DestroyImmediate(rt);

            List <Rect> dirtyRects = new List <Rect>(GCommon.CompareHeightMap(t.TerrainData.Geometry.ChunkGridSize, oldHeightMapColors, newHeightMapColors));

            for (int i = 0; i < dirtyRects.Count; ++i)
            {
                t.TerrainData.Geometry.SetRegionDirty(dirtyRects[i]);
            }
            t.TerrainData.SetDirty(GTerrainData.DirtyFlags.Geometry);

            for (int i = 0; i < dirtyRects.Count; ++i)
            {
                t.TerrainData.Foliage.SetTreeRegionDirty(dirtyRects[i]);
                t.TerrainData.Foliage.SetGrassRegionDirty(dirtyRects[i]);
            }
            t.UpdateTreesPosition();
            t.UpdateGrassPatches();
            t.TerrainData.Foliage.ClearTreeDirtyRegions();
            t.TerrainData.Foliage.ClearGrassDirtyRegions();
            t.TerrainData.SetDirty(GTerrainData.DirtyFlags.Foliage);
        }
Ejemplo n.º 9
0
    void OnGUI()
    {
        GUILayout.Label("Spline path object copy tool", EditorStyles.boldLabel);
        splinepath = EditorGUILayout.ObjectField("Path", splinepath, typeof(SplineCreator), true) as SplineCreator;
        gameObject = EditorGUILayout.ObjectField("Object", gameObject, typeof(GameObject), true) as GameObject;

        if (splinepath == null || gameObject == null)
        {
            GUI.enabled = false;
        }
        else
        {
            GUI.enabled = true;
        }

        amount = EditorGUILayout.IntField("Amount", amount);

        GUILayout.Space(5);

        if (GUILayout.Button("Generate"))
        {
            float deltaT = 1.0f / amount;

            //calculate for every point along every spline evenly
            foreach (var spline in splinepath.Beziers)
            {
                for (int i = 0; i < amount; i++)
                {
                    var t     = i * deltaT;
                    var point = spline.CalculateSplinePoint(t);

                    GameObject.Instantiate(gameObject, point, Quaternion.identity);
                }
            }
        }
    }
Ejemplo n.º 10
0
 public void SetCreator(SplineCreator creator)
 {
     LinkedSplineCreator = creator;
 }
 private void OnEnable()
 {
     //set target
     sc = (SplineCreator)target;
 }
Ejemplo n.º 12
0
 public void SetSplineCreator(SplineCreator creator)
 {
     SplineCreator      = creator;
     HasSplineComponent = false;
 }