internal static bool Prefix(ushort segmentID, ref NetSegment data, int index, ref TerrainModify.Surface surface, ref TerrainModify.Heights heights, ref TerrainModify.Edges edges, ref float left, ref float right, ref float leftStartY, ref float rightStartY, ref float leftEndY, ref float rightEndY, ref bool __result, NetAI __instance)
        {
            var net = __instance.m_info.GetMetaData();

            if (net is null)
            {
#if DEBUGQUAYROADS
                Log.Debug("No AR data found for: \n segmentId: " + segmentID + "name: " + data.Info.name);
#endif
                return(true);
            }

            ProfileSection[] profile = net.QuayRoadsProfile;
            if (profile is null)
            {
                return(true);
            }
            Log.Debug("modifying mask for segment " + segmentID.ToString() + ", section " + index);
            bool invert = (data.m_flags & NetSegment.Flags.Invert) != 0;
            return(ModifyMaskCommon.ModifyMask(profile, invert, index, ref surface, ref heights, ref edges, ref left, ref right, ref leftStartY, ref rightStartY, ref leftEndY, ref rightEndY, ref __result));
        }
        internal static bool Prefix(ushort nodeID, ref NetNode data, ushort segment1, ushort segment2, int index, ref TerrainModify.Surface surface, ref TerrainModify.Heights heights, ref TerrainModify.Edges edges, ref float left, ref float right, ref float leftY, ref float rightY, ref bool __result, NetAI __instance)
        {
            var net = __instance.m_info.GetMetaData();

            if (net is null)
            {
                return(true);
            }

            ProfileSection[] profile = net.QuayRoadsProfile;
            if (profile is null)
            {
                return(true);
            }

            Log.Debug("modifying mask for node " + nodeID.ToString() + ", section " + index);
            NetManager netManager    = Singleton <NetManager> .instance;
            bool       isStartNode   = netManager.m_segments.m_buffer[segment1].m_startNode == nodeID;
            bool       segmentInvert = (netManager.m_segments.m_buffer[segment1].m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None;
            bool       invert        = isStartNode ^ segmentInvert;
            float      leftStartY    = leftY;
            float      rightStartY   = rightY;
            float      leftEndY      = leftY;
            float      rightEndY     = rightY;
            bool       result        = ModifyMaskCommon.ModifyMask(profile, invert, index, ref surface, ref heights, ref edges, ref left, ref right, ref leftStartY, ref rightStartY, ref leftEndY, ref rightEndY, ref __result);

            if (isStartNode)
            {
                leftY  = leftStartY;
                rightY = rightStartY;
            }
            else
            {
                leftY  = leftEndY;
                rightY = rightEndY;
            }
            return(result);
        }