public object Clone()
        {
            var clone = new NodeMetaData((BranchDataWrapper)BranchDataWrapper?.Clone(), (PropertyAndTagHolder)_tagAndPropertyHolder.Clone());

            clone.OptionalNode       = OptionalNode;
            clone.OptionalEndpoint   = OptionalEndpoint;
            clone.ChildOptionalNodes = ChildOptionalNodes.ToList();
            return(clone);
        }
        private NodeMetaData(BranchDataWrapper branchDataWrapper = null, PropertyAndTagHolder holder = null)
        {
            BranchDataWrapper = branchDataWrapper;

            if (holder != null)
            {
                holder.GetTags().ForEach(AddTag);
                holder.GetProperties().ForEach(tuple => AddProperty(tuple.Item1, tuple.Item2));
            }
        }
 public new AbstractDungeonStructureBuilderFinisher SetBranchData(BranchDataWrapper wrapper) => (AbstractDungeonStructureBuilderFinisher)base.SetBranchData(wrapper);
 public AbstractDungeonStructureBuilder SetBranchData(BranchDataWrapper wrapper) => this.Also(x => newInstance.BranchDataWrapper = wrapper);
 public NodeMetaDataBuilder SetBranchData(BranchDataWrapper wrapper) => this.Also(x => _metaData.BranchDataWrapper = wrapper);