// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. using System; using FlaxEditor.SceneGraph.Actors; using FlaxEditor.Viewport; using FlaxEditor.Viewport.Modes; namespace FlaxEditor.Tools.Foliage { /// /// Foliage instances editing mode. /// /// public class EditFoliageGizmoMode : EditorGizmoMode { private int _selectedInstanceIndex = -1; /// /// The foliage painting gizmo. /// public EditFoliageGizmo Gizmo; /// /// The foliage editing selection outline. /// public EditFoliageSelectionOutline SelectionOutline; /// /// Gets the selected foliage actor (see ). /// 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; } } /// /// The selected foliage instance index. /// public int SelectedInstanceIndex { get => _selectedInstanceIndex; set { if (_selectedInstanceIndex == value) return; _selectedInstanceIndex = value; SelectedInstanceIndexChanged?.Invoke(); } } /// /// Occurs when selected instance index gets changed. /// public event Action SelectedInstanceIndexChanged; /// public override void Init(MainEditorGizmoViewport viewport) { base.Init(viewport); Gizmo = new EditFoliageGizmo(viewport, this); SelectionOutline = FlaxEngine.Object.New(); SelectionOutline.GizmoMode = this; } /// public override void Dispose() { FlaxEngine.Object.Destroy(ref SelectionOutline); base.Dispose(); } /// public override void OnActivated() { base.OnActivated(); Viewport.Gizmos.Active = Gizmo; Viewport.OverrideSelectionOutline(SelectionOutline); SelectedInstanceIndex = -1; } /// public override void OnDeactivated() { Viewport.OverrideSelectionOutline(null); base.OnDeactivated(); } } }