/*public static void Apply(HarmonyInstance harmony)
         * {
         *  var fix = typeof(BuildingDecorationDetour).GetMethod("LoadPaths");
         *  harmony.Patch(OriginalMethod, new HarmonyMethod(fix), null, null);
         *
         * }*/

        /*public static void Revert(HarmonyInstance harmony)
         * {
         *  harmony.Unpatch(OriginalMethod, HarmonyPatchType.Prefix);
         * }*/

        /*private static MethodInfo OriginalMethod => typeof(BuildingDecoration).GetMethod("LoadPaths");*/

        #endregion DETOUR

        private static HashSet <ConnectionPoint> ReleaseCollidingSegments()
        {
            // We obtain a list of nodes adjacent to the deleted segment to know where to reconnect
            HashSet <ConnectionPoint> borderNodes = new HashSet <ConnectionPoint>();

            if (ToolControllerDetour.CollidingSegmentsCache2 == null)
            {
                return(null);
            }
            foreach (ushort segment in ToolControllerDetour.CollidingSegmentsCache2)
            {
                //Debug.Log("Releasing segment " + segment);
                NetSegment netSegment = NetAccess.GetSegment(segment);

                // We keep untouchable segments
                if ((netSegment.m_flags & NetSegment.Flags.Untouchable) != NetSegment.Flags.None)
                {
                    continue;
                }

                bool inverted = ((netSegment.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None);

                borderNodes.Add(new ConnectionPoint(netSegment.m_startNode, netSegment.m_startDirection, netSegment.Info, inverted));
                borderNodes.Add(new ConnectionPoint(netSegment.m_endNode, netSegment.m_endDirection, netSegment.Info, !inverted));
                NetAccess.ReleaseSegment(segment, true);
            }

            borderNodes.RemoveWhere(n => !NetAccess.ExistsNode(n.Node));

            ToolControllerDetour.CollidingSegmentsCache2 = null;

            //Debug.Log("Border nodes (1): " + borderNodes.Count);

            return(borderNodes);
        }