|
|
|
#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<PackedScene>(ScenePath);
|
|
|
|
_controls = scene.Instantiate<TerrainEditingControls>();
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|