using NativeMapDoc;
using System.ComponentModel.DataAnnotations;
namespace Editor.MapDoc;
///
/// A map node which allows a target group and its children to be placed with a new position
/// and orientation in the world without creating a new copy.
///
/// Multiple MapInstance classes may reference the same target allowing it to be placed in
/// multiple locations, but allowing any edits to be applied to all instances.
///
[Display( Name = "Instance" ), Icon( "content_copy" )]
public sealed class MapInstance : MapNode
{
internal CMapInstance instanceNative;
internal MapInstance( HandleCreationData _ ) { }
public MapInstance( MapDocument mapDocument = null )
{
ThreadSafe.AssertIsMainThread();
// Default to the active map document if none specificed
mapDocument ??= MapEditor.Hammer.ActiveMap;
Assert.IsValid( mapDocument );
using var h = IHandle.MakeNextHandle( this );
mapDocument.native.CreateMapInstance();
}
internal override void OnNativeInit( CMapNode ptr )
{
base.OnNativeInit( ptr );
instanceNative = (CMapInstance)ptr;
}
internal override void OnNativeDestroy()
{
base.OnNativeDestroy();
instanceNative = default;
}
///
/// The target map node this MapInstance references to copy.
///
public MapNode Target
{
get => instanceNative.GetTarget();
set => instanceNative.SetTarget( value );
}
}