// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. using System; using FlaxEditor.Viewport; using FlaxEditor.Viewport.Modes; using FlaxEngine; namespace FlaxEditor.Tools.Terrain { /// /// Terrain management and editing tool. /// /// [HideInEditor] public class EditTerrainGizmoMode : EditorGizmoMode { /// /// The terrain properties editing modes. /// public enum Modes { /// /// Terrain chunks editing mode. /// Edit, /// /// Terrain patches adding mode. /// Add, /// /// Terrain patches removing mode. /// Remove, /// /// Terrain exporting mode. /// Export, } private Modes _mode; /// /// The terrain editing gizmo. /// public EditTerrainGizmo Gizmo; /// /// The patch coordinates of the last picked patch. /// public Int2 SelectedPatchCoord { get; private set; } /// /// The chunk coordinates (relative to the patch) of the last picked chunk. /// public Int2 SelectedChunkCoord { get; private set; } /// /// Occurs when mode gets changed. /// public event Action ModeChanged; /// /// The active edit mode. /// public Modes EditMode { get => _mode; set { if (_mode != value) { _mode = value; ModeChanged?.Invoke(); } } } /// /// Occurs when selected patch or/and chunk coord gets changed (after picking by user). /// public event Action SelectedChunkCoordChanged; /// public override void Init(MainEditorGizmoViewport viewport) { base.Init(viewport); EditMode = Modes.Edit; Gizmo = new EditTerrainGizmo(viewport, this); } /// public override void OnActivated() { base.OnActivated(); Viewport.Gizmos.Active = Gizmo; } /// /// Sets the selected chunk coordinates. /// /// The patch coord. /// The chunk coord. public void SetSelectedChunk(ref Int2 patchCoord, ref Int2 chunkCoord) { if (SelectedPatchCoord != patchCoord || SelectedChunkCoord != chunkCoord) { SelectedPatchCoord = patchCoord; SelectedChunkCoord = chunkCoord; OnSelectedTerrainChunkChanged(); } } private void OnSelectedTerrainChunkChanged() { SelectedChunkCoordChanged?.Invoke(); } } }