Files
FlaxEngine/Source/Editor/Tools/Foliage/EditFoliageSelectionOutline.cs
W2.Wizard 20ba37e223 Cleanup 3
2021-02-21 11:09:04 +01:00

74 lines
2.3 KiB
C#

// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using FlaxEditor.Gizmo;
using FlaxEngine;
namespace FlaxEditor.Tools.Foliage
{
/// <summary>
/// The custom outline for drawing the selected foliage instances outlines.
/// </summary>
/// <seealso cref="FlaxEditor.Gizmo.SelectionOutline" />
[HideInEditor]
public class EditFoliageSelectionOutline : SelectionOutline
{
private StaticModel _staticModel;
/// <summary>
/// The parent mode.
/// </summary>
public EditFoliageGizmoMode GizmoMode;
/// <inheritdoc />
public override bool CanRender
{
get
{
if (!HasDataReady)
return false;
var foliage = GizmoMode.SelectedFoliage;
if (!foliage)
return false;
var instanceIndex = GizmoMode.SelectedInstanceIndex;
if (instanceIndex < 0 || instanceIndex >= foliage.InstancesCount)
return false;
return true;
}
}
/// <inheritdoc />
protected override void DrawSelectionDepth(GPUContext context, SceneRenderTask task, GPUTexture customDepth)
{
var foliage = GizmoMode.SelectedFoliage;
if (!foliage)
return;
var instanceIndex = GizmoMode.SelectedInstanceIndex;
if (instanceIndex < 0 || instanceIndex >= foliage.InstancesCount)
return;
// Draw single instance
var instance = foliage.GetInstance(instanceIndex);
var model = foliage.GetFoliageType(instance.Type).Model;
if (model)
{
Transform instanceWorld = foliage.Transform.LocalToWorld(instance.Transform);
if (!_staticModel)
{
_staticModel = new StaticModel
{
StaticFlags = StaticFlags.None
};
}
_staticModel.Model = model;
_staticModel.Transform = instanceWorld;
_actors.Add(_staticModel);
Renderer.DrawSceneDepth(context, task, customDepth, _actors);
}
}
}
}