// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using System;
using FlaxEditor.SceneGraph.Actors;
using FlaxEngine;
namespace FlaxEditor.SceneGraph
{
///
/// Helper base class for actor sub nodes (eg. link points, child parts).
///
///
///
[HideInEditor]
public abstract class ActorChildNode : SceneGraphNode
{
///
/// The node index.
///
public readonly int Index;
///
/// Gets a value indicating whether this node can be selected directly without selecting parent actor node first.
///
public virtual bool CanBeSelectedDirectly => false;
///
/// Initializes a new instance of the class.
///
/// The child id.
/// The child index.
protected ActorChildNode(Guid id, int index)
: base(id)
{
Index = index;
}
///
public override string Name => ParentNode.Name + "." + Index;
///
public override SceneNode ParentScene => ParentNode.ParentScene;
///
public override bool CanTransform => ParentNode.CanTransform;
///
public override bool IsActive => ParentNode.IsActive;
///
public override bool IsActiveInHierarchy => ParentNode.IsActiveInHierarchy;
///
public override int OrderInParent
{
get => Index;
set { }
}
///
public override bool CanDelete => false;
///
public override bool CanCopyPaste => false;
///
public override bool CanDuplicate => false;
///
public override bool CanDrag => false;
///
public override object EditableObject => ParentNode.EditableObject;
///
public override object UndoRecordObject => ParentNode.UndoRecordObject;
///
public override void Dispose()
{
// Unlink from the parent
if (parentNode is ActorNode parentActorNode && parentActorNode.ActorChildNodes != null)
{
parentActorNode.ActorChildNodes.Remove(this);
}
base.Dispose();
}
}
///
/// Helper base class for actor sub nodes (eg. link points, child parts).
///
/// The parent actor type.
///
///
public abstract class ActorChildNode : ActorChildNode where T : ActorNode
{
///
/// The actor node.
///
protected T _node;
///
/// Initializes a new instance of the class.
///
/// The parent actor node.
/// The child id.
/// The child index.
protected ActorChildNode(T node, Guid id, int index)
: base(id, index)
{
_node = node;
}
///
public override void OnDispose()
{
_node = null;
base.OnDispose();
}
}
}