CSL_Traffic.TPPPathFind.ProcessItem C# (CSharp) Method

ProcessItem() private method

private ProcessItem ( BufferItem item, ushort targetNode, ushort segmentID, NetSegment &segment, byte connectOffset, int laneIndex, uint lane ) : void
item BufferItem
targetNode ushort
segmentID ushort
segment NetSegment
connectOffset byte
laneIndex int
lane uint
return void
        private void ProcessItem(BufferItem item, ushort targetNode, ushort segmentID, ref NetSegment segment, byte connectOffset, int laneIndex, uint lane)
        {
            if ((segment.m_flags & (NetSegment.Flags.PathFailed | NetSegment.Flags.Flooded)) != NetSegment.Flags.None)
            {
                return;
            }
            NetManager instance = Singleton<NetManager>.instance;
            NetInfo info = segment.Info;
            NetInfo info2 = instance.m_segments.m_buffer[(int)item.m_position.m_segment].Info;
            int num = info.m_lanes.Length;
            float num2;
            byte offset;
            if (segmentID == item.m_position.m_segment)
            {
                Vector3 b = instance.m_lanes.m_buffer[(int)((UIntPtr)item.m_laneID)].CalculatePosition((float)connectOffset * 0.003921569f);
                Vector3 a = instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].CalculatePosition((float)connectOffset * 0.003921569f);
                num2 = Vector3.Distance(a, b);
                offset = connectOffset;
            }
            else
            {
                NetInfo.Direction direction = (targetNode != segment.m_startNode) ? NetInfo.Direction.Forward : NetInfo.Direction.Backward;
                Vector3 b2 = instance.m_lanes.m_buffer[(int)((UIntPtr)item.m_laneID)].CalculatePosition((float)connectOffset * 0.003921569f);
                Vector3 a2;
                if ((byte)(direction & NetInfo.Direction.Forward) != 0)
                {
                    a2 = instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_bezier.d;
                }
                else
                {
                    a2 = instance.m_lanes.m_buffer[(int)((UIntPtr)lane)].m_bezier.a;
                }
                num2 = Vector3.Distance(a2, b2);
                offset = (byte)(((direction & NetInfo.Direction.Forward) == 0) ? 0 : 255);
            }
            float num3 = 1f;
            float num4 = 1f;
            NetInfo.LaneType laneType = NetInfo.LaneType.None;
            if ((int)item.m_position.m_lane < info2.m_lanes.Length)
            {
                uint l = instance.m_segments.m_buffer[(int)item.m_position.m_segment].m_lanes;
                for (int n = 0; l != 0 && n < (int)item.m_position.m_lane; ++n)
                    l = instance.m_lanes.m_buffer[l].m_nextLane;

                NetInfo.Lane lane2 = info2.m_lanes[(int)item.m_position.m_lane];
                num3 = LaneManager.GetLaneSpeed(l, lane2);
                laneType = lane2.m_laneType;
                if ((byte)(laneType & (NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle)) != 0)
                {
                    laneType = (NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle);
                }
                num4 = this.CalculateLaneSpeed(connectOffset, item.m_position.m_offset, ref instance.m_segments.m_buffer[(int)item.m_position.m_segment], lane2, l);
            }
            float averageLength = instance.m_segments.m_buffer[(int)item.m_position.m_segment].m_averageLength;
            float num5 = (float)Mathf.Abs((int)(connectOffset - item.m_position.m_offset)) * 0.003921569f * averageLength;
            float num6 = item.m_methodDistance + num5;
            float num7 = item.m_comparisonValue + num5 / (num4 * this.m_maxLength);
            if (laneIndex < num)
            {
                NetInfo.Lane lane3 = info.m_lanes[laneIndex];
                BufferItem item2;
                item2.m_position.m_segment = segmentID;
                item2.m_position.m_lane = (byte)laneIndex;
                item2.m_position.m_offset = offset;
                if ((byte)(lane3.m_laneType & laneType) == 0)
                {
                    item2.m_methodDistance = 0f;
                }
                else
                {
                    if (item.m_methodDistance == 0f)
                    {
                        num7 += 100f / (0.25f * this.m_maxLength);
                    }
                    item2.m_methodDistance = num6 + num2;
                }
                if (lane3.m_laneType != NetInfo.LaneType.Pedestrian || item2.m_methodDistance < 1000f)
                {
                    item2.m_comparisonValue = num7 + num2 / ((num3 + LaneManager.GetLaneSpeed(lane, lane3)) * 0.25f * this.m_maxLength);
                    if ((segment.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None)
                    {
                        item2.m_direction = NetInfo.InvertDirection(lane3.m_finalDirection);
                    }
                    else
                    {
                        item2.m_direction = lane3.m_finalDirection;
                    }
                    if (lane == this.m_startLaneA)
                    {
                        if (((byte)(item2.m_direction & NetInfo.Direction.Forward) == 0 || item2.m_position.m_offset < this.m_startOffsetA) && ((byte)(item2.m_direction & NetInfo.Direction.Backward) == 0 || item2.m_position.m_offset > this.m_startOffsetA))
                        {
                            return;
                        }
                        float num8 = this.CalculateLaneSpeed(this.m_startOffsetA, item2.m_position.m_offset, ref segment, lane3, lane);
                        float num9 = (float)Mathf.Abs((int)(item2.m_position.m_offset - this.m_startOffsetA)) * 0.003921569f;
                        item2.m_comparisonValue += num9 * segment.m_averageLength / (num8 * this.m_maxLength);
                    }
                    if (lane == this.m_startLaneB)
                    {
                        if (((byte)(item2.m_direction & NetInfo.Direction.Forward) == 0 || item2.m_position.m_offset < this.m_startOffsetB) && ((byte)(item2.m_direction & NetInfo.Direction.Backward) == 0 || item2.m_position.m_offset > this.m_startOffsetB))
                        {
                            return;
                        }
                        float num10 = this.CalculateLaneSpeed(this.m_startOffsetB, item2.m_position.m_offset, ref segment, lane3, lane);
                        float num11 = (float)Mathf.Abs((int)(item2.m_position.m_offset - this.m_startOffsetB)) * 0.003921569f;
                        item2.m_comparisonValue += num11 * segment.m_averageLength / (num10 * this.m_maxLength);
                    }
                    item2.m_laneID = lane;
                    item2.m_lanesUsed = (item.m_lanesUsed | lane3.m_laneType);
                    this.AddBufferItem(item2, item.m_position);
                }
            }
        }

Same methods

TPPPathFind::ProcessItem ( BufferItem item, ushort targetNode, ushort segmentID, NetSegment &segment, int &currentTargetIndex, byte connectOffset, bool enableVehicle, bool enablePedestrian ) : bool
TPPPathFind::ProcessItem ( BufferItem item, ushort nodeID, NetNode &node, byte connectOffset, bool isMiddle ) : void
TPPPathFind::ProcessItem ( BufferItem item, ushort targetNode, bool targetDisabled, ushort segmentID, NetSegment &segment, uint lane, byte offset, byte connectOffset ) : void