public WaypointNetworkAsset( WaypointNetworkAsset original )
            : base(original.Name, original.Collection)
        {
            this.Position = original.Position;
            this.Size = original.Size;
            this.waypoints = new WaypointAsset[ original.Nodes.Length ];
            for( int i = 0; i < this.Waypoints.Length; i++ )
            // Create new waypoint assets - based on the nodes of the original
            {
                this.Waypoints[ i ] = new WaypointAsset( ( WaypointAsset )original.Nodes[ i ], this );
            }

            this.Tags = new int[ original.Tags.Length ];
            for( int i = 0; i < original.Tags.Length; i++ )
            // Copy the tag indexes
            {
                this.Tags[ i ] = original.Tags[ i ];
            }

            for( int cellIDX = 0; cellIDX < this.waypoints.Length; cellIDX++ )
            // Create connections going from OUR node at the same index as THEIR node to same - just with to
            {
                this.waypoints[ cellIDX ].Connections = new ConnectionAsset[ original.Nodes[ cellIDX ].Connections.Length ];
                for( int connectionIDX = 0; connectionIDX < this.waypoints[ cellIDX ].Connections.Length; connectionIDX++ )
                {
                    this.waypoints[ cellIDX ].Connections[ connectionIDX ] = new ConnectionAsset(
                        this.waypoints[ Array.IndexOf( original.Nodes, original.Nodes[ cellIDX ].Connections[ connectionIDX ].From ) ],
                        this.waypoints[ Array.IndexOf( original.Nodes, original.Nodes[ cellIDX ].Connections[ connectionIDX ].To ) ],
                        original.Nodes[ cellIDX ].Connections[ connectionIDX ].Width,
                        this.Collection );

                    this.waypoints[ cellIDX ].Connections[ connectionIDX ].Tags = new int[ original.Nodes[ cellIDX ].Connections[ connectionIDX ].Tags.Length ];
                    for( int tagIDX = 0; tagIDX < original.Nodes[ cellIDX ].Connections[ connectionIDX ].Tags.Length; tagIDX++ )
                    // Copy the tag indexes
                    {
                        this.waypoints[ cellIDX ].Connections[ connectionIDX ].Tags[ tagIDX ] = original.Nodes[ cellIDX ].Connections[ connectionIDX ].Tags[ tagIDX ];
                    }
                }
            }
        }
        public WaypointNetworkAsset(WaypointNetworkAsset original) : base(original.Name, original.Collection)
        {
            this.Position  = original.Position;
            this.Size      = original.Size;
            this.waypoints = new WaypointAsset[original.Nodes.Length];
            for (int i = 0; i < this.Waypoints.Length; i++)
            // Create new waypoint assets - based on the nodes of the original
            {
                this.Waypoints[i] = new WaypointAsset(( WaypointAsset )original.Nodes[i], this);
            }

            this.Tags = new int[original.Tags.Length];
            for (int i = 0; i < original.Tags.Length; i++)
            // Copy the tag indexes
            {
                this.Tags[i] = original.Tags[i];
            }

            for (int cellIDX = 0; cellIDX < this.waypoints.Length; cellIDX++)
            // Create connections going from OUR node at the same index as THEIR node to same - just with to
            {
                this.waypoints[cellIDX].Connections = new ConnectionAsset[original.Nodes[cellIDX].Connections.Length];
                for (int connectionIDX = 0; connectionIDX < this.waypoints[cellIDX].Connections.Length; connectionIDX++)
                {
                    this.waypoints[cellIDX].Connections[connectionIDX] = new ConnectionAsset(
                        this.waypoints[Array.IndexOf(original.Nodes, original.Nodes[cellIDX].Connections[connectionIDX].From)],
                        this.waypoints[Array.IndexOf(original.Nodes, original.Nodes[cellIDX].Connections[connectionIDX].To)],
                        original.Nodes[cellIDX].Connections[connectionIDX].Width,
                        this.Collection);

                    this.waypoints[cellIDX].Connections[connectionIDX].Tags = new int[original.Nodes[cellIDX].Connections[connectionIDX].Tags.Length];
                    for (int tagIDX = 0; tagIDX < original.Nodes[cellIDX].Connections[connectionIDX].Tags.Length; tagIDX++)
                    // Copy the tag indexes
                    {
                        this.waypoints[cellIDX].Connections[connectionIDX].Tags[tagIDX] = original.Nodes[cellIDX].Connections[connectionIDX].Tags[tagIDX];
                    }
                }
            }
        }