@@ -411,7 +411,7 @@ public void CustomUpdateLanes(ushort segmentID, ref NetSegment data, bool loadin
411411 NetSegment . CalculateMiddlePoints ( vector3 , startDir , vector4 , endDir , smoothStart , smoothEnd , out b3 , out c ) ;
412412 NetLane . Flags flags2 = ( NetLane . Flags ) instance . m_lanes . m_buffer [ num16 ] . m_flags ;
413413 NetLane . Flags flags3 = flags ;
414- flags2 &= ~ ( NetLane . Flags . Forward | NetLane . Flags . Left | NetLane . Flags . Right | NetLane . Flags . YieldStart | NetLane . Flags . YieldEnd | NetLane . Flags . StartOneWayLeft | NetLane . Flags . StartOneWayRight | NetLane . Flags . EndOneWayLeft | NetLane . Flags . EndOneWayRight ) ;
414+ flags2 &= ~ ( NetLane . Flags . Forward | NetLane . Flags . Left | NetLane . Flags . Right | NetLane . Flags . Merge | NetLane . Flags . YieldStart | NetLane . Flags . YieldEnd | NetLane . Flags . StartOneWayLeft | NetLane . Flags . StartOneWayRight | NetLane . Flags . EndOneWayLeft | NetLane . Flags . EndOneWayRight ) ;
415415 if ( ( byte ) ( lane . m_finalDirection & NetInfo . Direction . Both ) == 2 ) {
416416 flags3 &= ~ NetLane . Flags . YieldEnd ;
417417 }
@@ -456,63 +456,78 @@ public void CustomUpdateLanes(ushort segmentID, ref NetSegment data, bool loadin
456456 num18 = 255 ;
457457 num19 = 0 ;
458458 if ( num25 != 0 ) {
459- int num26 ;
460- int num27 ;
461- if ( lane . m_similarLaneCount >= num25 ) {
462- num26 = num20 ;
463- num27 = num22 ;
464- } else {
465- num26 = num20 * lane . m_similarLaneCount / ( num25 + ( num21 >> 1 ) ) ;
466- num27 = num22 * lane . m_similarLaneCount / ( num25 + ( num21 >> 1 ) ) ;
467- }
468- int num28 = num26 ;
469- int num29 = lane . m_similarLaneCount - num26 - num27 ;
470- int num30 = num27 ;
471- if ( num29 > 0 ) {
472- if ( num20 > num26 ) {
473- num28 ++ ;
474- }
475- if ( num22 > num27 ) {
476- num30 ++ ;
477- }
478- }
479- if ( num23 < num28 ) {
480- int num31 = ( num23 * num20 + num28 - 1 ) / num28 ;
481- int num32 = ( ( num23 + 1 ) * num20 + num28 - 1 ) / num28 ;
482- if ( num32 > num31 ) {
459+ if ( lane . m_similarLaneCount > num25 && num25 > 0 ) {
460+ num18 = num25 * num23 / lane . m_similarLaneCount ;
461+ num19 = num25 - num25 * num24 / lane . m_similarLaneCount ;
462+ flags2 |= NetLane . Flags . Merge ;
463+ if ( num18 < num20 ) {
483464 flags2 |= NetLane . Flags . Left ;
484- num18 = Mathf . Min ( num18 , num31 ) ;
485- num19 = Mathf . Max ( num19 , num32 ) ;
486465 }
487- }
488- if ( num23 >= num26 && num24 >= num27 && num21 != 0 ) {
489- if ( lane . m_similarLaneCount > num25 ) {
490- num26 ++ ;
466+ if ( num25 - num19 < num22 ) {
467+ flags2 |= NetLane . Flags . Right ;
491468 }
492- int num33 = num20 + ( ( num23 - num26 ) * num21 + num29 - 1 ) / num29 ;
493- int num34 = num20 + ( ( num23 + 1 - num26 ) * num21 + num29 - 1 ) / num29 ;
494- if ( num34 > num33 ) {
469+ if ( num21 != 0 && num18 < num20 + num21 && num19 > num20 ) {
495470 flags2 |= NetLane . Flags . Forward ;
496- num18 = Mathf . Min ( num18 , num33 ) ;
497- num19 = Mathf . Max ( num19 , num34 ) ;
498471 }
499- }
500- if ( num24 < num30 ) {
501- int num35 = num25 - ( ( num24 + 1 ) * num22 + num30 - 1 ) / num30 ;
502- int num36 = num25 - ( num24 * num22 + num30 - 1 ) / num30 ;
503- if ( num36 > num35 ) {
504- flags2 |= NetLane . Flags . Right ;
505- num18 = Mathf . Min ( num18 , num35 ) ;
506- num19 = Mathf . Max ( num19 , num36 ) ;
472+ } else {
473+ int num26 ;
474+ int num27 ;
475+ if ( lane . m_similarLaneCount >= num25 ) {
476+ num26 = num20 ;
477+ num27 = num22 ;
478+ } else {
479+ num26 = num20 * lane . m_similarLaneCount / ( num25 + ( num21 >> 1 ) ) ;
480+ num27 = num22 * lane . m_similarLaneCount / ( num25 + ( num21 >> 1 ) ) ;
507481 }
508- }
509- if ( this . m_highwayRules ) {
510- if ( ( flags2 & NetLane . Flags . LeftRight ) == NetLane . Flags . Left ) {
511- if ( ( flags2 & NetLane . Flags . Forward ) == NetLane . Flags . None || ( num21 >= 2 && num20 == 1 ) ) {
512- num19 = Mathf . Min ( num19 , num18 + 1 ) ;
482+ int num28 = num26 ;
483+ int num29 = lane . m_similarLaneCount - num26 - num27 ;
484+ int num30 = num27 ;
485+ if ( num29 > 0 ) {
486+ if ( num20 > num26 ) {
487+ num28 ++ ;
488+ }
489+ if ( num22 > num27 ) {
490+ num30 ++ ;
491+ }
492+ }
493+ if ( num23 < num28 ) {
494+ int num31 = ( num23 * num20 + num28 - 1 ) / num28 ;
495+ int num32 = ( ( num23 + 1 ) * num20 + num28 - 1 ) / num28 ;
496+ if ( num32 > num31 ) {
497+ flags2 |= NetLane . Flags . Left ;
498+ num18 = Mathf . Min ( num18 , num31 ) ;
499+ num19 = Mathf . Max ( num19 , num32 ) ;
500+ }
501+ }
502+ if ( num23 >= num26 && num24 >= num27 && num21 != 0 ) {
503+ if ( lane . m_similarLaneCount > num25 ) {
504+ num26 ++ ;
505+ }
506+ int num33 = num20 + ( ( num23 - num26 ) * num21 + num29 - 1 ) / num29 ;
507+ int num34 = num20 + ( ( num23 + 1 - num26 ) * num21 + num29 - 1 ) / num29 ;
508+ if ( num34 > num33 ) {
509+ flags2 |= NetLane . Flags . Forward ;
510+ num18 = Mathf . Min ( num18 , num33 ) ;
511+ num19 = Mathf . Max ( num19 , num34 ) ;
512+ }
513+ }
514+ if ( num24 < num30 ) {
515+ int num35 = num25 - ( ( num24 + 1 ) * num22 + num30 - 1 ) / num30 ;
516+ int num36 = num25 - ( num24 * num22 + num30 - 1 ) / num30 ;
517+ if ( num36 > num35 ) {
518+ flags2 |= NetLane . Flags . Right ;
519+ num18 = Mathf . Min ( num18 , num35 ) ;
520+ num19 = Mathf . Max ( num19 , num36 ) ;
521+ }
522+ }
523+ if ( this . m_highwayRules ) {
524+ if ( ( flags2 & NetLane . Flags . LeftRight ) == NetLane . Flags . Left ) {
525+ if ( ( flags2 & NetLane . Flags . Forward ) == NetLane . Flags . None || ( num21 >= 2 && num20 == 1 ) ) {
526+ num19 = Mathf . Min ( num19 , num18 + 1 ) ;
527+ }
528+ } else if ( ( flags2 & NetLane . Flags . LeftRight ) == NetLane . Flags . Right && ( ( flags2 & NetLane . Flags . Forward ) == NetLane . Flags . None || ( num21 >= 2 && num22 == 1 ) ) ) {
529+ num18 = Mathf . Max ( num18 , num19 - 1 ) ;
513530 }
514- } else if ( ( flags2 & NetLane . Flags . LeftRight ) == NetLane . Flags . Right && ( ( flags2 & NetLane . Flags . Forward ) == NetLane . Flags . None || ( num21 >= 2 && num22 == 1 ) ) ) {
515- num18 = Mathf . Max ( num18 , num19 - 1 ) ;
516531 }
517532 }
518533 }
0 commit comments