Add support for Deformable material preview
This commit is contained in:
@@ -35,6 +35,8 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
private StaticModel _previewModel;
|
private StaticModel _previewModel;
|
||||||
private Decal _decal;
|
private Decal _decal;
|
||||||
private Terrain _terrain;
|
private Terrain _terrain;
|
||||||
|
private Spline _spline;
|
||||||
|
private SplineModel _splineModel;
|
||||||
private ParticleEffect _particleEffect;
|
private ParticleEffect _particleEffect;
|
||||||
private MaterialBase _particleEffectMaterial;
|
private MaterialBase _particleEffectMaterial;
|
||||||
private ParticleEmitter _particleEffectEmitter;
|
private ParticleEmitter _particleEffectEmitter;
|
||||||
@@ -140,6 +142,7 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
MaterialBase guiMaterial = null;
|
MaterialBase guiMaterial = null;
|
||||||
MaterialBase terrainMaterial = null;
|
MaterialBase terrainMaterial = null;
|
||||||
MaterialBase particleMaterial = null;
|
MaterialBase particleMaterial = null;
|
||||||
|
MaterialBase deformableMaterial = null;
|
||||||
bool usePreviewActor = true;
|
bool usePreviewActor = true;
|
||||||
if (_material != null)
|
if (_material != null)
|
||||||
{
|
{
|
||||||
@@ -173,7 +176,8 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
particleMaterial = _material;
|
particleMaterial = _material;
|
||||||
break;
|
break;
|
||||||
case MaterialDomain.Deformable:
|
case MaterialDomain.Deformable:
|
||||||
// TODO: preview Deformable material (eg. by using Spline with Spline Model)
|
usePreviewActor = false;
|
||||||
|
deformableMaterial = _material;
|
||||||
break;
|
break;
|
||||||
default: throw new ArgumentOutOfRangeException();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@@ -298,6 +321,8 @@ namespace FlaxEditor.Viewport.Previews
|
|||||||
Object.Destroy(ref _previewModel);
|
Object.Destroy(ref _previewModel);
|
||||||
Object.Destroy(ref _decal);
|
Object.Destroy(ref _decal);
|
||||||
Object.Destroy(ref _terrain);
|
Object.Destroy(ref _terrain);
|
||||||
|
Object.Destroy(ref _spline);
|
||||||
|
Object.Destroy(ref _splineModel);
|
||||||
Object.Destroy(ref _particleEffect);
|
Object.Destroy(ref _particleEffect);
|
||||||
Object.Destroy(ref _particleEffectEmitter);
|
Object.Destroy(ref _particleEffectEmitter);
|
||||||
Object.Destroy(ref _particleEffectSystem);
|
Object.Destroy(ref _particleEffectSystem);
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ void SplineModel::OnModelLoaded()
|
|||||||
void SplineModel::OnSplineUpdated()
|
void SplineModel::OnSplineUpdated()
|
||||||
{
|
{
|
||||||
// Skip updates when actor is disabled or something is missing
|
// 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);
|
_box = BoundingBox(_transform.Translation, _transform.Translation);
|
||||||
BoundingSphere::FromBox(_box, _sphere);
|
BoundingSphere::FromBox(_box, _sphere);
|
||||||
|
|||||||
Reference in New Issue
Block a user