// 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(); } } }