CSL_Traffic.DefaultPathFind.AddBufferItem C# (CSharp) Метод

AddBufferItem() защищенный Метод

protected AddBufferItem ( BufferItem item, PathUnit target ) : void
item BufferItem
target PathUnit
Результат void
        protected virtual void AddBufferItem(BufferItem item, PathUnit.Position target)
        {
            uint num = this.m_laneLocation[(int)((UIntPtr)item.m_laneID)];
            uint num2 = num >> 16;
            int num3 = (int)(num & 65535u);
            int num6;
            if (num2 == this.m_pathFindIndex)
            {
                if (item.m_comparisonValue >= this.m_buffer[num3].m_comparisonValue)
                {
                    return;
                }
                int num4 = num3 >> 6;
                int num5 = num3 & -64;
                if (num4 < this.m_bufferMinPos || (num4 == this.m_bufferMinPos && num5 < this.m_bufferMin[num4]))
                {
                    return;
                }
                num6 = Mathf.Max(Mathf.RoundToInt(item.m_comparisonValue * 1024f), this.m_bufferMinPos);
                if (num6 == num4)
                {
                    this.m_buffer[num3] = item;
                    this.m_laneTarget[(int)((UIntPtr)item.m_laneID)] = target;
                    return;
                }
                int num7 = num4 << 6 | this.m_bufferMax[num4]--;
                BufferItem bufferItem = this.m_buffer[num7];
                this.m_laneLocation[(int)((UIntPtr)bufferItem.m_laneID)] = num;
                this.m_buffer[num3] = bufferItem;
            }
            else
            {
                num6 = Mathf.Max(Mathf.RoundToInt(item.m_comparisonValue * 1024f), this.m_bufferMinPos);
            }
            if (num6 >= 1024)
            {
                return;
            }
            while (this.m_bufferMax[num6] == 63)
            {
                num6++;
                if (num6 == 1024)
                {
                    return;
                }
            }
            if (num6 > this.m_bufferMaxPos)
            {
                this.m_bufferMaxPos = num6;
            }
            num3 = (num6 << 6 | ++this.m_bufferMax[num6]);
            this.m_buffer[num3] = item;
            this.m_laneLocation[(int)((UIntPtr)item.m_laneID)] = (this.m_pathFindIndex << 16 | (uint)num3);
            this.m_laneTarget[(int)((UIntPtr)item.m_laneID)] = target;
        }