Skip to content

Commit

Permalink
Fix undo for shape render material
Browse files Browse the repository at this point in the history
  • Loading branch information
FilipAlg committed Feb 23, 2024
1 parent 683d7d6 commit 7984686
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions Editor/AGXUnityEditor/Tools/ShapeTool.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
using System;
using AGXUnity.Collide;
using AGXUnity.Rendering;
using System;
using System.Linq;
using UnityEngine;
using UnityEditor;
using AGXUnity.Collide;
using AGXUnity.Rendering;

using UnityEngine;
using GUI = AGXUnity.Utils.GUI;
using Object = UnityEngine.Object;

Expand Down Expand Up @@ -172,36 +171,41 @@ from material in renderer.sharedMaterials
if ( distinctMaterials.Length == 1 )
isExtended = ShapeVisualMaterialGUI( "Common Render Material",
distinctMaterials[ 0 ],
newMaterial => shapeVisual.SetMaterial( newMaterial ) );
newMaterial => shapeVisual.SetMaterial( newMaterial ),
shapeVisual );
else
isExtended = InspectorGUI.Foldout( EditorData.Instance.GetData( Shape, "Render Materials" ),
GUI.MakeLabel( "Render Materials" ) );

if ( isExtended )
using ( InspectorGUI.IndentScope.Single )
for ( int i = 0; i < materials.Length; ++i ) {
ShapeVisualMaterialGUI( names[ i ],
materials[ i ],
newMaterial => shapeVisual.ReplaceMaterial( i, newMaterial ) );
newMaterial => shapeVisual.ReplaceMaterial( i, newMaterial ),
shapeVisual );
}
}
else if ( materials.Length == 1 ) {
ShapeVisualMaterialGUI( "Render Material",
materials[ 0 ],
newMaterial => shapeVisual.ReplaceMaterial( 0, newMaterial ) );
newMaterial => shapeVisual.ReplaceMaterial( 0, newMaterial ),
shapeVisual );
}
}

private bool ShapeVisualMaterialGUI( string name, Material material, Action<Material> onNewMaterial )
private bool ShapeVisualMaterialGUI( string name, Material material, Action<Material> onNewMaterial, ShapeVisual undoRoot )
{
var editorData = EditorData.Instance.GetData( Shape, "Visual_" + name );
var result = InspectorGUI.FoldoutObjectField( GUI.MakeLabel( name ),
material,
typeof( Material ),
editorData,
false ) as Material;
if ( result != material )
if ( result != material ) {
Undo.RecordObjects( undoRoot.GetComponentsInChildren<MeshRenderer>(), "Set shape visual material" );
onNewMaterial?.Invoke( result );
EditorUtility.SetDirty( undoRoot );
}

return editorData.Bool;
}
Expand Down

0 comments on commit 7984686

Please sign in to comment.