Esempio n. 1
0
        public void UpdateDynamicLaneSelectionParameters()
        {
#if DEBUG
            if (GlobalConfig.Instance.Debug.Switches[9])
            {
                Log._Debug($"VehicleState.UpdateDynamicLaneSelectionParameters({vehicleId}) called.");
            }
#endif

            if (!Options.IsDynamicLaneSelectionActive())
            {
                dlsReady = false;
                return;
            }

            if (dlsReady)
            {
                return;
            }

            float egoism             = (float)timedRand / 100f;
            float altruism           = 1f - egoism;
            DynamicLaneSelection dls = GlobalConfig.Instance.DynamicLaneSelection;

            if (Options.individualDrivingStyle)
            {
                maxReservedSpace = recklessDriver
                                        ? Mathf.Lerp(dls.MinMaxRecklessReservedSpace, dls.MaxMaxRecklessReservedSpace, altruism)
                                        : Mathf.Lerp(dls.MinMaxReservedSpace, dls.MaxMaxReservedSpace, altruism);
                laneSpeedRandInterval     = Mathf.Lerp(dls.MinLaneSpeedRandInterval, dls.MaxLaneSpeedRandInterval, egoism);
                maxOptLaneChanges         = (int)Math.Round(Mathf.Lerp(dls.MinMaxOptLaneChanges, dls.MaxMaxOptLaneChanges + 1, egoism));
                maxUnsafeSpeedDiff        = Mathf.Lerp(dls.MinMaxUnsafeSpeedDiff, dls.MaxMaxOptLaneChanges, egoism);
                minSafeSpeedImprovement   = Mathf.Lerp(dls.MinMinSafeSpeedImprovement, dls.MaxMinSafeSpeedImprovement, altruism);
                minSafeTrafficImprovement = Mathf.Lerp(dls.MinMinSafeTrafficImprovement, dls.MaxMinSafeTrafficImprovement, altruism);
            }
            else
            {
                maxReservedSpace          = recklessDriver ? dls.MaxRecklessReservedSpace : dls.MaxReservedSpace;
                laneSpeedRandInterval     = dls.LaneSpeedRandInterval;
                maxOptLaneChanges         = dls.MaxOptLaneChanges;
                maxUnsafeSpeedDiff        = dls.MaxUnsafeSpeedDiff;
                minSafeSpeedImprovement   = dls.MinSafeSpeedImprovement;
                minSafeTrafficImprovement = dls.MinSafeTrafficImprovement;
            }
            dlsReady = true;
        }
Esempio n. 2
0
        public void UpdateDynamicLaneSelectionParameters(ref ExtVehicle extVehicle)
        {
#if DEBUG
            if (DebugSwitch.VehicleLinkingToSegmentEnd.Get())
            {
                Log._Debug("VehicleState.UpdateDynamicLaneSelectionParameters" +
                           $"({extVehicle.vehicleId}) called.");
            }
#endif

            if (!Options.IsDynamicLaneSelectionActive())
            {
                extVehicle.dlsReady = false;
                return;
            }

            if (extVehicle.dlsReady)
            {
                return;
            }

            float egoism             = extVehicle.timedRand / 100f;
            float altruism           = 1f - egoism;
            DynamicLaneSelection dls = GlobalConfig.Instance.DynamicLaneSelection;

            if (Options.individualDrivingStyle)
            {
                extVehicle.maxReservedSpace
                    = extVehicle.recklessDriver
                          ? Mathf.Lerp(
                          dls.MinMaxRecklessReservedSpace,
                          dls.MaxMaxRecklessReservedSpace,
                          altruism)
                          : Mathf.Lerp(dls.MinMaxReservedSpace, dls.MaxMaxReservedSpace, altruism);
                extVehicle.laneSpeedRandInterval = Mathf.Lerp(
                    dls.MinLaneSpeedRandInterval,
                    dls.MaxLaneSpeedRandInterval,
                    egoism);
                extVehicle.maxOptLaneChanges = (int)Math.Round(
                    Mathf.Lerp(dls.MinMaxOptLaneChanges, dls.MaxMaxOptLaneChanges + 1, egoism));
                extVehicle.maxUnsafeSpeedDiff = Mathf.Lerp(
                    dls.MinMaxUnsafeSpeedDiff,
                    dls.MaxMaxOptLaneChanges,
                    egoism);
                extVehicle.minSafeSpeedImprovement = Mathf.Lerp(
                    dls.MinMinSafeSpeedImprovement.GameUnits,
                    dls.MaxMinSafeSpeedImprovement.GameUnits,
                    altruism);
                extVehicle.minSafeTrafficImprovement = Mathf.Lerp(
                    dls.MinMinSafeTrafficImprovement,
                    dls.MaxMinSafeTrafficImprovement,
                    altruism);
            }
            else
            {
                extVehicle.maxReservedSpace = extVehicle.recklessDriver
                                                  ? dls.MaxRecklessReservedSpace
                                                  : dls.MaxReservedSpace;
                extVehicle.laneSpeedRandInterval     = dls.LaneSpeedRandInterval;
                extVehicle.maxOptLaneChanges         = dls.MaxOptLaneChanges;
                extVehicle.maxUnsafeSpeedDiff        = dls.MaxUnsafeSpeedDiff;
                extVehicle.minSafeSpeedImprovement   = dls.MinSafeSpeedImprovement;
                extVehicle.minSafeTrafficImprovement = dls.MinSafeTrafficImprovement;
            }

            extVehicle.dlsReady = true;
        }