Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions AGXUnity/Attributes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -243,4 +243,12 @@ public DynamicallyShowInInspector( string name, bool isMethod = false, bool inve
public string Name { get; private set; }
public bool Invert { get; private set; }
}

[AttributeUsage( AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false )]
public class DelayedInspectorAttribute : Attribute
{
public DelayedInspectorAttribute()
{
}
}
}
3 changes: 2 additions & 1 deletion AGXUnity/IO/OpenPLX/OpenPLXUnityMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -805,11 +805,12 @@ GameObject MapTerrain( openplx.Terrain.Terrain terrain )
rbComp.MotionControl = agx.RigidBody.MotionControl.KINEMATICS;

var terrainComp = terrainGO.AddComponent<MovableTerrain>();
terrainComp.PlacementMode = MovableTerrain.Placement.Manual;

terrainComp.ElementSize = (float)terrain.element_size();
terrainComp.MaximumDepth = (float)terrain.max_depth();
terrainComp.SizeCells = new Vector2Int( (int)terrain.num_elements_y(), (int)terrain.num_elements_x() );
terrainComp.InvertDepthDirection = false;
terrainComp.MaxDepthAsInitialHeight = false;

var terrainMat = terrain.material();
if ( !terrainMat.is_default_terrain_material() ) {
Expand Down
1 change: 1 addition & 0 deletions AGXUnity/Model/DeformableTerrainBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ public DeformableTerrainProperties TerrainProperties
[IgnoreSynchronization]
[DisableInRuntimeInspector]
[ClampAboveZeroInInspector( true )]
[DelayedInspector]
public float MaximumDepth
{
get { return m_maximumDepth; }
Expand Down
20 changes: 15 additions & 5 deletions AGXUnity/Model/DeformableTerrainFailureVolume.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,40 @@ namespace AGXUnity.Model
[HelpURL( "https://us.download.algoryx.se/AGXUnity/documentation/current/editor_interface.html#soil-failure-volumes" )]
public class DeformableTerrainFailureVolume : ScriptComponent
{
[field: SerializeField]
public bool AddAllTerrainsOnStart { get; set; } = true;

private HashSet<DeformableTerrainBase> m_terrains = new HashSet<DeformableTerrainBase>();
[field: SerializeField]
private List<DeformableTerrainBase> m_terrains = new List<DeformableTerrainBase>();

public DeformableTerrainBase[] Terrains => m_terrains.ToArray();

public bool Add( DeformableTerrainBase terrain )
{
return m_terrains.Add( terrain );
if ( m_terrains.Contains( terrain ) ) {
Debug.LogWarning( $"Failure volume '{name}' already contains terrain '{terrain.name}'" );
return false;
}
m_terrains.Add( terrain );
return true;
}

public bool Remove( DeformableTerrainBase terrain )
{
if ( !m_terrains.Contains( terrain ) ) {
Debug.LogWarning( $"Failure volume '{name}' does not contain terrain '{terrain.name}'" );
return false;
}
return m_terrains.Remove( terrain );
}

protected override bool Initialize()
{
if ( AddAllTerrainsOnStart ) {
#if UNITY_2022_2_OR_NEWER
m_terrains.UnionWith( FindObjectsByType<DeformableTerrainBase>( FindObjectsSortMode.None ) );
m_terrains.AddRange( FindObjectsByType<DeformableTerrainBase>( FindObjectsSortMode.None ).Where( t => !m_terrains.Contains( t ) ) );
#else
m_terrains.UnionWith( FindObjectsOfType<DeformableTerrainBase>() );
m_terrains.AddRange( FindObjectsOfType<DeformableTerrainBase>().Where( t => !m_terrains.Contains( t ) ) );
#endif
}
return base.Initialize();
Expand All @@ -59,5 +70,4 @@ private void TriggerFailure()
terr.ConvertToDynamicMassInShape( shape );
}
}

}
Loading