public static void Postfix(ref ushort segment, ushort startNode, ushort endNode, bool __result) { if (!__result || !InSimulationThread()) { return; } if (MoveMiddleNodePatch.CopyData) { Log.Debug("Moving middle node: copying data to newly created segment. " + $"newSegmentID={segment} data={MoveMiddleNodePatch.SegmentData}"); MoveItIntegration.PasteSegment(segment, MoveMiddleNodePatch.SegmentData, null); } else if (SplitSegmentPatch.CopyData) { var segmentData = SplitSegmentPatch.SegmentData; Log.Debug("Spliting segment: copying data to newly created segment. " + $"newSegmentID={segment} data={segmentData}"); // start and end might change ... but node ids are the same. var data = segmentData.Start; if (data != null) { ushort nodeID = data.NodeID; if (nodeID == startNode || nodeID == endNode) { MoveItIntegration.PasteSegmentEnd(data, nodeID, segment); } } data = segmentData.End; if (data != null) { ushort nodeID = data.NodeID; if (nodeID == startNode || nodeID == endNode) { MoveItIntegration.PasteSegmentEnd(data, nodeID, segment); } } } else if (ReleaseSegmentImplementationPatch.UpgradingSegmentData != null) { if (!ReleaseSegmentImplementationPatch.m_upgrading) { Log.Error("Unexpected UpgradingSegmentData != null but m_upgrading == false "); } else { MoveItIntegration.PasteSegment( segment, ReleaseSegmentImplementationPatch.UpgradingSegmentData, null); } ReleaseSegmentImplementationPatch.UpgradingSegmentData = null; // consume } else { SegmentEndManager.Instance.SetAt(segment, true, null); SegmentEndManager.Instance.SetAt(segment, false, null); } }
static void PasteSegmentEnd( SegmentEndData data, ushort nodeID1, ushort nodeID2, ushort targetSegmentID) { if (data != null) { ushort nodeID = data.NodeID; if (nodeID == nodeID1 || nodeID == nodeID2) { MoveItIntegration.PasteSegmentEnd(data, targetNodeID: nodeID, targetSegmentID: targetSegmentID); } } }