99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
|
|
|
|
using System;
|
|
using FlaxEditor.SceneGraph.Actors;
|
|
using FlaxEditor.Viewport;
|
|
using FlaxEditor.Viewport.Modes;
|
|
|
|
namespace FlaxEditor.Tools.Foliage
|
|
{
|
|
/// <summary>
|
|
/// Foliage instances editing mode.
|
|
/// </summary>
|
|
/// <seealso cref="FlaxEditor.Viewport.Modes.EditorGizmoMode" />
|
|
public class EditFoliageGizmoMode : EditorGizmoMode
|
|
{
|
|
private int _selectedInstanceIndex = -1;
|
|
|
|
/// <summary>
|
|
/// The foliage painting gizmo.
|
|
/// </summary>
|
|
public EditFoliageGizmo Gizmo;
|
|
|
|
/// <summary>
|
|
/// The foliage editing selection outline.
|
|
/// </summary>
|
|
public EditFoliageSelectionOutline SelectionOutline;
|
|
|
|
/// <summary>
|
|
/// Gets the selected foliage actor (see <see cref="Modules.SceneEditingModule"/>).
|
|
/// </summary>
|
|
public FlaxEngine.Foliage SelectedFoliage
|
|
{
|
|
get
|
|
{
|
|
var sceneEditing = Editor.Instance.SceneEditing;
|
|
var foliageNode = sceneEditing.SelectionCount == 1 ? sceneEditing.Selection[0] as FoliageNode : null;
|
|
return (FlaxEngine.Foliage)foliageNode?.Actor;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The selected foliage instance index.
|
|
/// </summary>
|
|
public int SelectedInstanceIndex
|
|
{
|
|
get => _selectedInstanceIndex;
|
|
set
|
|
{
|
|
if (_selectedInstanceIndex == value)
|
|
return;
|
|
|
|
_selectedInstanceIndex = value;
|
|
SelectedInstanceIndexChanged?.Invoke();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Occurs when selected instance index gets changed.
|
|
/// </summary>
|
|
public event Action SelectedInstanceIndexChanged;
|
|
|
|
/// <inheritdoc />
|
|
public override void Init(MainEditorGizmoViewport viewport)
|
|
{
|
|
base.Init(viewport);
|
|
|
|
Gizmo = new EditFoliageGizmo(viewport, this);
|
|
SelectionOutline = FlaxEngine.Object.New<EditFoliageSelectionOutline>();
|
|
SelectionOutline.GizmoMode = this;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void Dispose()
|
|
{
|
|
FlaxEngine.Object.Destroy(ref SelectionOutline);
|
|
|
|
base.Dispose();
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void OnActivated()
|
|
{
|
|
base.OnActivated();
|
|
|
|
Viewport.Gizmos.Active = Gizmo;
|
|
Viewport.OverrideSelectionOutline(SelectionOutline);
|
|
SelectedInstanceIndex = -1;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void OnDeactivated()
|
|
{
|
|
Viewport.OverrideSelectionOutline(null);
|
|
|
|
base.OnDeactivated();
|
|
}
|
|
}
|
|
}
|