#if TOOLS [Tool] public partial class TerrainEditingPlugin : EditorPlugin { const string ScenePath = "res://addons/terrain-editing/TerrainEditingControls.tscn"; // The container to which the editing controls get added to when Terrain is selected. const CustomControlContainer Container = CustomControlContainer.SpatialEditorSideRight; TerrainEditingControls _controls; public override bool _Handles(GodotObject obj) => obj is Terrain; public override void _EnterTree() { var scene = GD.Load(ScenePath); _controls = scene.Instantiate(); } public override void _ExitTree() { if (_controls == null) return; if (_controls.GetParent() != null) RemoveControlFromContainer(Container, _controls); _controls.Free(); _controls = null; } public override void _MakeVisible(bool visible) { if (visible) AddControlToContainer(Container, _controls); else if (_controls.GetParent() != null) RemoveControlFromContainer(Container, _controls); } } #endif