Пример #1
0
        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);
            }
        }
 public static void Prefix(ushort segment)
 {
     if (!InSimulationThread())
     {
         return;
     }
     SegmentData = MoveItIntegration.CopySegment(segment);
 }
Пример #3
0
 public static void Prefix(ushort segment)
 {
     if (!InSimulationThread())
     {
         return;
     }
     Log.Info($"SplitSegment.Prefix() segment:{segment}" /*\n" + Environment.StackTrace*/, true);
     SegmentData = MoveItIntegration.CopySegment(segment);
 }
Пример #4
0
        public static void Prefix(ref ushort node) // TODO remove ref when in lates harmony.
        {
            if (!InSimulationThread())
            {
                return;
            }
            ushort nodeID    = node;
            ushort segmentID = NetUtil.GetFirstSegment(nodeID);

            SegmentData = MoveItIntegration.CopySegment(segmentID);
        }
 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);
         }
     }
 }
        /// <summary>
        /// scenario 1: no change - returns the input node.
        /// scenario 2: move node : segment is released and a smaller segment is created - returns the moved node.
        /// scenario 3: merge node: segment is released and the other node is returned.
        ///
        /// How to handle:
        /// 1: skip (DONE)
        /// 2: copy segment end for the node that didn't move (moved node cannot have customisations) (DONE)
        /// 3: when split-segment creates a new segment, that copy segment end to it.
        /// </summary>
        /// <param name="node">input node</param>


        public static void Prefix(ref ushort node) // TODO remove ref when in lates harmony.
        {
            if (!InSimulationThread())
            {
                return;
            }
            NodeID = node;
            AssertEqual(NodeID.ToNode().CountSegments(), 1, "CountSegments");
            ushort segmentID = NetUtil.GetFirstSegment(NodeID);

            Log.Info($"MoveMiddleNode.Prefix() node:{NodeID} segment:{segmentID}" /*+"\n" + Environment.StackTrace*/, true);
            SegmentData = MoveItIntegration.CopySegment(segmentID);
            NodeID2     = segmentID.ToSegment().GetOtherNode(NodeID);
        }
Пример #7
0
 public static void Prefix(ushort segment)
 {
     if (UpgradingSegmentData != null)
     {
         KianCommons.Log.Error("Unexpected UpgradingSegmentData != null");
         UpgradingSegmentData = null;
     }
     if (m_upgrading)
     {
         UpgradingSegmentData = MoveItIntegration.CopySegment(segment);
     }
     SegmentEndManager.Instance.SetAt(segmentID: segment, true, value: null);
     SegmentEndManager.Instance.SetAt(segmentID: segment, false, value: null);
 }
 public static void Prefix(ushort segment)
 {
     if (UpgradingSegmentData != null)
     {
         KianCommons.Log.Error("Unexpected UpgradingSegmentData != null");
         UpgradingSegmentData = null;
     }
     if (m_upgrading)
     {
         UpgradingSegmentData = MoveItIntegration.CopySegment(segment);
     }
     Log.Debug($"ReleaseSegment.Prefix({segment})\n" + Environment.StackTrace);
     SegmentEndManager.Instance.SetAt(segmentID: segment, true, value: null);
     SegmentEndManager.Instance.SetAt(segmentID: segment, false, value: null);
 }