diff --git a/Source/Editor/Viewport/Previews/MaterialPreview.cs b/Source/Editor/Viewport/Previews/MaterialPreview.cs index 41275ef9a..4f7d71b18 100644 --- a/Source/Editor/Viewport/Previews/MaterialPreview.cs +++ b/Source/Editor/Viewport/Previews/MaterialPreview.cs @@ -35,6 +35,8 @@ namespace FlaxEditor.Viewport.Previews private StaticModel _previewModel; private Decal _decal; private Terrain _terrain; + private Spline _spline; + private SplineModel _splineModel; private ParticleEffect _particleEffect; private MaterialBase _particleEffectMaterial; private ParticleEmitter _particleEffectEmitter; @@ -140,6 +142,7 @@ namespace FlaxEditor.Viewport.Previews MaterialBase guiMaterial = null; MaterialBase terrainMaterial = null; MaterialBase particleMaterial = null; + MaterialBase deformableMaterial = null; bool usePreviewActor = true; if (_material != null) { @@ -173,7 +176,8 @@ namespace FlaxEditor.Viewport.Previews particleMaterial = _material; break; case MaterialDomain.Deformable: - // TODO: preview Deformable material (eg. by using Spline with Spline Model) + usePreviewActor = false; + deformableMaterial = _material; break; default: throw new ArgumentOutOfRangeException(); } @@ -282,6 +286,25 @@ namespace FlaxEditor.Viewport.Previews } } } + + // Deformable + if (deformableMaterial && _spline == null) + { + _spline = new Spline(); + _spline.AddSplineLocalPoint(new Vector3(0, 0, -50.0f), false); + _spline.AddSplineLocalPoint(new Vector3(0, 0, 50.0f)); + _splineModel = new SplineModel + { + Scale = new Vector3(0.45f), + Parent = _spline, + }; + Task.AddCustomActor(_spline); + } + if (_splineModel != null) + { + _splineModel.Model = _previewModel.Model; + _splineModel.SetMaterial(0, deformableMaterial); + } } /// @@ -298,6 +321,8 @@ namespace FlaxEditor.Viewport.Previews Object.Destroy(ref _previewModel); Object.Destroy(ref _decal); Object.Destroy(ref _terrain); + Object.Destroy(ref _spline); + Object.Destroy(ref _splineModel); Object.Destroy(ref _particleEffect); Object.Destroy(ref _particleEffectEmitter); Object.Destroy(ref _particleEffectSystem); diff --git a/Source/Engine/Level/Actors/SplineModel.cpp b/Source/Engine/Level/Actors/SplineModel.cpp index 7380bf920..69fcf90bc 100644 --- a/Source/Engine/Level/Actors/SplineModel.cpp +++ b/Source/Engine/Level/Actors/SplineModel.cpp @@ -95,7 +95,7 @@ void SplineModel::OnModelLoaded() void SplineModel::OnSplineUpdated() { // Skip updates when actor is disabled or something is missing - if (!_spline || !Model || !Model->IsLoaded() || !IsActiveInHierarchy() || !IsDuringPlay() || _spline->GetSplinePointsCount() < 2) + if (!_spline || !Model || !Model->IsLoaded() || !IsActiveInHierarchy() || _spline->GetSplinePointsCount() < 2) { _box = BoundingBox(_transform.Translation, _transform.Translation); BoundingSphere::FromBox(_box, _sphere);