From 8e27d40b719d6b51a2a5c43fa80254c2059f775a Mon Sep 17 00:00:00 2001 From: Stefan Biedenstein Date: Wed, 11 Jan 2017 00:14:14 +0100 Subject: [PATCH] v2.0 rc2 - tempomatMogli uses cruise control - fine tuning hydrostatic launch - better auto hold --- FS17_GearboxAddon.zip | Bin 270190 -> 272026 bytes FS17_GearboxAddon/gearboxAddonConfig.xml | 152 ++++++++++- FS17_GearboxAddon/gearboxMogli.lua | 331 +++++++++++++++-------- FS17_GearboxAddon/modDesc.xml | 14 +- FS17_GearboxAddon/tempomatMogli.lua | 144 ++++++---- src/gearboxMogli.lua | 331 +++++++++++++++-------- src/tempomatMogli.lua | 144 ++++++---- 7 files changed, 756 insertions(+), 360 deletions(-) diff --git a/FS17_GearboxAddon.zip b/FS17_GearboxAddon.zip index 5b02354b5e9bc5953c7b7b4f4944b222f7a18fb7..69348f5b7d79278c51ace96cd6b4da2de5f00763 100644 GIT binary patch delta 89966 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%0DU^i9dBP=D$}Nw|rdHgEh#q~3L9Ot$hk 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 K45Yw!hW`WJqaZN= delta 88136 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 Q>rhT09nL)^@X^Bm0W8!SYXATM diff --git a/FS17_GearboxAddon/gearboxAddonConfig.xml b/FS17_GearboxAddon/gearboxAddonConfig.xml index 8b67e43..656f650 100644 --- a/FS17_GearboxAddon/gearboxAddonConfig.xml +++ b/FS17_GearboxAddon/gearboxAddonConfig.xml @@ -1230,7 +1230,7 @@ - + @@ -1263,7 +1263,7 @@ - + @@ -1305,7 +1305,7 @@ - + @@ -1343,12 +1343,12 @@ - + - + @@ -3521,6 +3521,148 @@ + fendt900 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FS17_GearboxAddon/gearboxMogli.lua b/FS17_GearboxAddon/gearboxMogli.lua index 5c835e6..adaf03a 100644 --- a/FS17_GearboxAddon/gearboxMogli.lua +++ b/FS17_GearboxAddon/gearboxMogli.lua @@ -45,11 +45,12 @@ gearboxMogli.maxClutchPercentTC = 0.95 gearboxMogli.clutchLoopTimes = 10 gearboxMogli.clutchLoopDelta = 10 gearboxMogli.minHydrostaticFactor = 0.001 -gearboxMogli.accHydrostaticFactor = 5 gearboxMogli.maxGearRatio = 37699.11184 -- 0.01 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.minGearRatio = 1.508 -- 250 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.maxHydroGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.maxManualGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.minGearRatio = 1.508 -- 250 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.maxHydroGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.maxManualGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.accHydrostaticFactor = 100 / gearboxMogli.maxGearRatio -- 1.0 km/h @1000 RPM +gearboxMogli.accHydrostaticTimer = 8000 gearboxMogli.brakeFxSpeed = 2.5 -- m/s = 9 km/h gearboxMogli.rpmReduction = 0.85 -- 15% RPM reduction allowed e.g. 330 RPM for 2200 rated RPM gearboxMogli.maxPowerLimit = 0.97 -- 97% max power is equal to max power @@ -142,19 +143,21 @@ gearboxMogliGlobals.grindingMaxRpmSound = 600 gearboxMogliGlobals.grindingMaxRpmDelta = gearboxMogli.huge gearboxMogliGlobals.defaultEnableAI = gearboxMogli.AIPowerShift gearboxMogliGlobals.autoHold = true -gearboxMogliGlobals.minAutoGearSpeed = 0.2777 +gearboxMogliGlobals.minAutoGearSpeed = 1.0 -- 0.2777 -- m/s gearboxMogliGlobals.minAbsSpeed = 1.0 -- km/h gearboxMogliGlobals.brakeNeutralTimeout = 1000 -- ms gearboxMogliGlobals.brakeNeutralLimit = -0.3 -gearboxMogliGlobals.DefaultRevUpMs0 = 2000 -- ms -gearboxMogliGlobals.DefaultRevUpMs1 = 4000 -- ms +gearboxMogliGlobals.DefaultRevUpMs0 = 2000 -- ms +gearboxMogliGlobals.DefaultRevUpMs1 = 2000 -- ms gearboxMogliGlobals.DefaultRevDownMs = 2000 -- ms gearboxMogliGlobals.HydroSpeedIdleRedux = 0.02 -- 0.04 -- default reduce by 10 km/h per second => 0.4 km/h with const. RPM and w/o acc. gearboxMogliGlobals.smoothGearRatio = false -- smooth gear ratio with hydrostatic drive gearboxMogliGlobals.motorLoadVolumeBrake = 1.0 -- make some noise with motor brake; -1 take normal motor load gearboxMogliGlobals.motorLoadVolumeBrakeR = -1 -- make some noise with motor brake; -1 take normal motor load gearboxMogliGlobals.minClutchTimeManual = 3000 -- ms; time from 0% to 100% for the digital manual clutch -gearboxMogliGlobals.momentOfInertia = 3 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.momentOfInertiaBase = 2 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.momentOfInertia = 2 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.inertiaToDampingRatio = 0.5 --********************************************************************************************************** @@ -258,7 +261,6 @@ function gearboxMogli:initClient() gearboxMogli.registerState( self, "G27Mode", 0 ) gearboxMogli.registerState( self, "WarningText", "", gearboxMogli.mrGbMOnSetWarningText ) gearboxMogli.registerState( self, "InfoText", "", gearboxMogli.mrGbMOnSetInfoText ) - gearboxMogli.registerState( self, "MotorBrake", false ) gearboxMogli.registerState( self, "ConstantRpm", false ) gearboxMogli.registerState( self, "NoUpdateStream",false, gearboxMogli.mrGbMOnSetNoUpdateStream ) gearboxMogli.registerState( self, "NUSMessage", {}, gearboxMogli.mrGbMOnSetNUSMessage ) @@ -350,6 +352,7 @@ function gearboxMogli:initClient() self.mrGbML.realAreaPerSecond = 0 self.mrGbML.updateStreamErrors = 0 self.mrGbML.MotorLoad = 0 + self.mrGbML.DirectionChangeTime = 0 if gearboxMogli.ovArrowUpWhite == nil then local w = math.floor(0.0095 * g_screenWidth) / g_screenWidth * gearboxMogli.getUiScale() @@ -644,7 +647,7 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.Sound.MaxRpm = self.mrGbMS.RatedRpm end - self.mrGbMS.MomentOfInertia = Utils.getNoNil(getXMLFloat(xmlFile, xmlString .. "#momentOfInertia"), self.mrGbMG.momentOfInertia * maxTorque ) + self.mrGbMS.MomentOfInertia = Utils.getNoNil(getXMLFloat(xmlFile, xmlString .. "#momentOfInertia"), self.mrGbMG.momentOfInertiaBase + self.mrGbMG.momentOfInertia * maxTorque ) --************************************************************************************************** -- PTO RPM @@ -1583,9 +1586,6 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.HydrostaticPtoDiff = 200 self.mrGbMS.HydrostaticEfficiency = {} - if hit == nil then hit = 2000 end - if hdt == nil then hdt = 2000 end - if self.mrGbMS.HydrostaticDirect == nil then self.mrGbMS.HydrostaticDirect = true end @@ -1728,14 +1728,14 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.HydrostaticPtoDiff = Utils.getNoNil( getXMLFloat(xmlFile, xmlString .. ".hydrostatic#ptoRpmDelta"), dft ) end - dft = Utils.getNoNil( hit, 2000 ) + dft = Utils.getNoNil( hit, 5000 ) if dft < 100 then -- do not smooth self.mrGbMS.HydrostaticIncFactor = 1 else self.mrGbMS.HydrostaticIncFactor = 1 / dft end - dft = Utils.getNoNil( hdt, 2000 ) + dft = Utils.getNoNil( hdt, 5000 ) if hdt == nil and hit ~= nil then -- compatibility self.mrGbMS.HydrostaticDecFactor = self.mrGbMS.HydrostaticIncFactor @@ -1800,11 +1800,46 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.AutoShiftTimeoutLong = gearboxMogli.getNoNil2(getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftTimeout"), self.mrGbMG.autoShiftTimeoutLong , self.mrGbMG.autoShiftTimeoutHydroL, self.mrGbMS.Hydrostatic and self.mrGbMS.DisableManual ) self.mrGbMS.AutoShiftTimeoutShort = gearboxMogli.getNoNil2(getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftTimeout2"), self.mrGbMG.autoShiftTimeoutShort, self.mrGbMG.autoShiftTimeoutHydroS, self.mrGbMS.Hydrostatic and self.mrGbMS.DisableManual ) - + if self.mrGbMS.AutoShiftTimeoutShort > self.mrGbMS.AutoShiftTimeoutLong then self.mrGbMS.AutoShiftTimeoutShort = self.mrGbMS.AutoShiftTimeoutLong end + autoShiftPriorityG = getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftPriority") + autoShiftPriorityR = getXMLFloat(xmlFile, xmlString .. ".ranges(0)#autoShiftPriority") + autoShiftPriority2 = getXMLFloat(xmlFile, xmlString .. ".ranges(1)#autoShiftPriority") + + self.mrGbMS.AutoShiftPriorityG = 0 + self.mrGbMS.AutoShiftPriorityR = 0 + self.mrGbMS.AutoShiftPriority2 = 0 + + do + local p = {} + + table.insert( p, { p=autoShiftPriorityG, t=self.mrGbMS.GearTimeToShiftGear , c="AutoShiftPriorityG" } ) + table.insert( p, { p=autoShiftPriorityR, t=self.mrGbMS.GearTimeToShiftHl , c="AutoShiftPriorityR" } ) + table.insert( p, { p=autoShiftPriority2, t=self.mrGbMS.GearTimeToShiftRanges2, c="AutoShiftPriority2" } ) + + table.sort( p, function(a,b) if a.p == nil or b.p == nil then return a.t= 0 ) and not self.mrGbMS.NeutralActive then - if self.mrGbML.gearShiftingNeeded == 0 then - self.mrGbML.gearShiftingEffect = true - end + if shiftingEffect and ( timeToShift >= 0 ) + and not self.mrGbMS.NeutralActive + and self.mrGbML.gearShiftingTime <= self.mrGbML.autoShiftTime then + self.mrGbML.gearShiftingEffect = true else self.mrGbML.gearShiftingEffect = false end @@ -4928,6 +4966,8 @@ function gearboxMogli:mrGbMDoGearShift() else self.mrGbML.gearShiftingNeeded = 3 end + self.mrGbML.doubleClutch = false + local gearMaxSpeed = self.mrGbMS.Gears[self.mrGbMS.CurrentGear].speed * self.mrGbMS.Ranges[self.mrGbMS.CurrentRange].ratio * self.mrGbMS.Ranges2[self.mrGbMS.CurrentRange2].ratio @@ -4946,10 +4986,6 @@ function gearboxMogli:mrGbMDoGearShift() if self.mrGbML.beforeShiftRpm ~= nil then self.mrGbML.afterShiftRpm = Utils.clamp( self.mrGbML.beforeShiftRpm * self.mrGbML.lastGearSpeed / self.mrGbML.currentGearSpeed, self.mrGbML.motor.vehicle.mrGbMS.IdleRpm, self.mrGbML.motor.vehicle.mrGbMS.CurMaxRpm ) - - if self.mrGbML.gearShiftingEffect then - self.motor.lastMotorRpm = self.mrGbML.afterShiftRpm - end else self.mrGbML.afterShiftRpm = nil end @@ -5657,6 +5693,16 @@ function gearboxMogli:mrGbMOnSetIsOn( old, new, noEventSend ) end end self:mrGbMDoGearShift() + + self.cruiseControl.maxSpeed = self.mrGbMS.MaxGearSpeed * math.max( 1, ( self.mrGbMS.CurMaxRpm - gearboxMogli.rpmPlus ) / self.mrGbMS.RatedRpm ) * 3.6 + if self.mrGbMS.Hydrostatic then + self.cruiseControl.maxSpeed = self.cruiseControl.maxSpeed * self.mrGbMS.HydrostaticMax + end + if self.mrGbMS.MaxSpeedLimiter and self.motor.maxForwardSpeed ~= nil and self.cruiseControl.maxSpeed > self.motor.maxForwardSpeed * 3.6 then + self.cruiseControl.maxSpeed = self.motor.maxForwardSpeed * 3.6 + end + self.cruiseControl.speed = math.min( self.cruiseControl.speed, self.cruiseControl.maxSpeed ) + elseif old and self.mrGbML.motor ~= nil then if self.isServer then self:mrGbMSetState( "DefaultGear", self.mrGbMS.CurrentGear, noEventSend ) @@ -5668,6 +5714,12 @@ function gearboxMogli:mrGbMOnSetIsOn( old, new, noEventSend ) gearboxMogliMotor.copyRuntimeValues( self.mrGbML.motor, self.mrGbMB.motor ) self.motor = self.mrGbMB.motor end + + if self.mrGbMB.cruiseControlMaxSpeed ~= nil then + self.cruiseControl.maxSpeed = self.mrGbMB.cruiseControlMaxSpeed + end + self.cruiseControl.speed = math.min( self.cruiseControl.speed, self.cruiseControl.maxSpeed ) + if self.mrGbMB.dcShuttle then self.mrGbMB.dcShuttle = false self.driveControl.shuttle.isActive = true @@ -5732,7 +5784,8 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, if self.steeringEnabled then -- driveControl and GPS - if self.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_OFF then + if self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE + or self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_FULL then acceleration = 1 elseif self.cruiseControl.state <= 0 and g_currentMission.driveControl ~= nil @@ -5833,7 +5886,8 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, --******************* -- motor brake --******************* - local motorBrake = -self.mrGbMS.RealMotorBrakeFx * self.motor.clutchPercent * math.min( gearboxMogli.brakeFxSpeed * ( self.motor.nonClampedMotorRpm - self.mrGbMS.IdleRpm ) / ( math.max( self.mrGbML.currentGearSpeed, 0.1 ) * ( self.mrGbMS.CurMaxRpm - self.mrGbMS.IdleRpm ) ), 1 ) +--local motorBrake = -self.mrGbMS.RealMotorBrakeFx * self.motor.clutchPercent * math.min( gearboxMogli.brakeFxSpeed * ( self.motor.nonClampedMotorRpm - self.mrGbMS.IdleRpm ) / ( math.max( self.mrGbML.currentGearSpeed, 0.1 ) * ( self.mrGbMS.CurMaxRpm - self.mrGbMS.IdleRpm ) ), 1 ) + local motorBrake = 0 --******************* -- cruise control @@ -5864,23 +5918,17 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, self.motor:updateSpeedLimit( dt ) - if self.tempomatMogliV14 ~= nil - and self.tempomatMogliV14.keepSpeedLimit ~= nil - and math.abs( currentSpeed ) * 3600 > self.tempomatMogliV14.keepSpeedLimit + 1 then + if self.tempomatMogliV17 ~= nil + and self.tempomatMogliV17.keepSpeedLimit ~= nil + and math.abs( currentSpeed ) * 3600 > self.tempomatMogliV17.keepSpeedLimit + 1 then brakeLights = true end - local motorBrakeOn = false if self.motor.noTransmission --or self.mrGbML.gearShiftingNeeded ~= 0 or self.mrGbML.hydroTargetSpeed ~= nil then -- disable motor brake self.mrGbML.motorBrakeTime = g_currentMission.time + gearboxMogli.motorBrakeTime - - if ( self.mrGbML.gearShiftingNeeded > 0 and self.mrGbML.gearShiftingNeeded ~= 2 ) - or ( self.mrGbML.gearShiftingNeeded < 0 and acceleration < 0.001 ) then - motorBrakeOn = true - end elseif self.mrGbML.motorBrakeTime == nil then -- initialize motor brake self.mrGbML.motorBrakeTime = g_currentMission.time + gearboxMogli.motorBrakeTime @@ -5894,17 +5942,14 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, elseif acceleration < motorBrake then -- braking brakePedal = -acceleration - motorBrakeOn = true elseif self.motor.lastRealMotorRpm >= self.mrGbMS.CurMaxRpm then -- no fuel => motorBrake self.mrGbML.motorBrakeTime = 0 brakePedal = -motorBrake - motorBrakeOn = true elseif acceleration < 0.001 then -- nothing => motorBrake if self.mrGbML.motorBrakeTime < g_currentMission.time then brakePedal = -motorBrake - motorBrakeOn = true end elseif self.mrGbMS.ReverseActive then -- reverse @@ -5916,19 +5961,25 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, accelerationPedal = acceleration end - if self.motor.clutchPercent < 1 - gearboxMogli.eps - or self.mrGbMS.Hydrostatic then - motorBrakeOn = false - end - - self:mrGbMSetState( "MotorBrake", motorBrakeOn ) if ( self:mrGbMGetAutoHold() or ( self:mrGbMGetAutoClutch() and acceleration > 0.001 ) ) - and ( ( self.movingDirection * currentSpeed > 5.5555555556e-4 and self.mrGbMS.ReverseActive ) - or ( self.movingDirection * currentSpeed < -5.5555555556e-4 and not ( self.mrGbMS.ReverseActive ) ) ) then + and ( ( self.movingDirection * currentSpeed > 2.7777777778e-4 and self.mrGbMS.ReverseActive ) + or ( self.movingDirection * currentSpeed < -2.7777777778e-4 and not ( self.mrGbMS.ReverseActive ) ) ) then -- wrong direction - brakePedal = 1 + if g_currentMission.time > self.mrGbML.DirectionChangeTime + 2000 then + brakePedal = 1 + else + brakePedal = math.max( g_currentMission.time - self.mrGbML.DirectionChangeTime ) * 0.0005 + end brakeLights = true + elseif self:mrGbMGetAutoHold() + and g_currentMission.time > self.mrGbML.DirectionChangeTime + 2000 + and not self.motor.noTransmission + and math.abs( currentSpeed ) < 5.5555555556e-5 + and acceleration < 0.1 then + -- auto hold + brakePedal = 1 + --brakeLights = true end self.setBrakeLightsVisibility(self, brakeLights) @@ -6482,19 +6533,19 @@ function gearboxMogliMotor:updateSpeedLimit( dt ) speedLimit = math.min( speedLimit, self.speedLimit ) end - if self.vehicle.tempomatMogliV14 ~= nil - and self.vehicle.tempomatMogliV14.keepSpeedLimit ~= nil then - speedLimit = math.min( speedLimit, self.vehicle.tempomatMogliV14.keepSpeedLimit ) + if self.vehicle.tempomatMogliV17 ~= nil + and self.vehicle.tempomatMogliV17.keepSpeedLimit ~= nil then + speedLimit = math.min( speedLimit, self.vehicle.tempomatMogliV17.keepSpeedLimit ) end speedLimit = speedLimit * gearboxMogli.kmhTOms if self.vehicle.mrGbMS.SpeedLimiter - or self.vehicle.cruiseControl.state > 0 + or self.vehicle.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE or self.vehicle.mrGbML.hydroTargetSpeed ~= nil then local cruiseSpeed = speedLimit - if self.vehicle.mrGbMS.SpeedLimiter or self.vehicle.cruiseControl.state > 0 then + if self.vehicle.mrGbMS.SpeedLimiter or self.vehicle.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE then cruiseSpeed = math.min( cruiseSpeed, self.vehicle.cruiseControl.speed * gearboxMogli.kmhTOms ) end @@ -6868,7 +6919,9 @@ function gearboxMogliMotor:getTorque( acceleration, limitRpm ) self.ptoSpeedLimit = nil elseif self.lastMissingTorque > gearboxMogli.ptoSpeedLimitRatio * self.lastMotorTorque and self.vehicle.mrGbMS.PtoSpeedLimit - and ( not ( self.vehicle.steeringEnabled ) or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_OFF ) + and ( not ( self.vehicle.steeringEnabled ) + or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_ACTIVE + or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_FULL ) and self.vehicle.lastSpeedReal*1000 > gearboxMogli.ptoSpeedLimitMin then if self.ptoSpeedLimit ~= nil then self.ptoSpeedLimit = math.max( self.ptoSpeedLimit - self.tickDt * gearboxMogli.ptoSpeedLimitDec, gearboxMogli.ptoSpeedLimitMin ) @@ -7533,7 +7586,17 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.motorLoadP = Utils.clamp( self.motorLoadP, 0, 1 ) end - self.motorLoad = math.max( 0, self.maxMotorTorque * Utils.clamp( 1 - ( 1 - self.motorLoadP )^gearboxMogli.motorLoadExp, 0, 1 ) - self.neededPtoTorque / self.ptoMotorRpmRatio ) + local mlf = Utils.clamp( 1 - ( 1 - self.motorLoadP )^gearboxMogli.motorLoadExp, 0, 1 ) + if self.vehicle.mrGbML.gearShiftingNeeded == 2 + or ( self.vehicle.mrGbML.gearShiftingNeeded > 0 and self.vehicle.mrGbML.doubleClutch ) + or self.vehicle.mrGbML.gearShiftingNeeded < 0 then + mlf = 1 + end + if not lastNoTransmission + and self.nonClampedMotorRpm > self.prevNonClampedMotorRpm + self.maxRpmIncrease - gearboxMogli.eps then + mlf = math.max( 0.9 * accelerationPedal, mlf ) + end + self.motorLoad = math.max( 0, self.maxMotorTorque * mlf - self.neededPtoTorque / self.ptoMotorRpmRatio ) local wheelLoad = math.abs( self.usedTransTorque * self:getGearRatio() ) if self.wheelLoadS == nil then @@ -7602,6 +7665,10 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.rpmIncFactor = self.rpmIncFactor + self.vehicle.mrGbML.smoothMedium * ( r - self.rpmIncFactor ) self.maxRpmIncrease = self.tickDt * self.rpmIncFactor +--********************************************************************************************************** + local oldAccTimer = self.hydroAccTimer + self.hydroAccTimer = nil + --********************************************************************************************************** -- no transmission / neutral --********************************************************************************************************** @@ -7795,7 +7862,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) --********************************************************************************************************** -- during gear shift with automatic clutch if self.vehicle.mrGbML.gearShiftingNeeded == 2 and g_currentMission.time < self.vehicle.mrGbML.gearShiftingTime then - if self.lastRealMotorRpm > 0.9 * self.vehicle.mrGbMS.RatedRpm then + if self.lastRealMotorRpm > 0.97 * self.vehicle.mrGbMS.RatedRpm then self.vehicle.mrGbML.gearShiftingNeeded = 3 end accelerationPedal = 1 @@ -8064,14 +8131,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) local r = self:getMogliGearRatio() local w = w0 * r - local oldAccTimer = self.hydroAccTimer - self.hydroAccTimer = nil if accelerationPedal >= gearboxMogli.accDeadZone and gearboxMogli.accHydrostaticFactor > 0 then - hAcc = accelerationPedal * gearboxMogli.accHydrostaticFactor * r / gearboxMogli.maxHydroGearRatio - self.hydroAccTimer = Utils.getNoNil( oldAccTimer, g_currentMission.time + 3000 ) + hAcc = accelerationPedal * gearboxMogli.accHydrostaticFactor * r + self.hydroAccTimer = Utils.getNoNil( oldAccTimer, g_currentMission.time + gearboxMogli.accHydrostaticTimer ) if hMin < hAcc then if g_currentMission.time < self.hydroAccTimer then - local f = 1 - ( self.hydroAccTimer - g_currentMission.time ) / 3000 + local f = 1 - ( self.hydroAccTimer - g_currentMission.time ) / gearboxMogli.accHydrostaticTimer hMin = hMin + f * ( hAcc - hMin ) else hMin = hAcc @@ -8367,7 +8432,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) priority = 0 else --skip = true - priority = 4 + priority = 10 end -- keep the complete range!!! @@ -8443,36 +8508,38 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) * self.vehicle.mrGbMS.Ranges[p.range1].ratio * self.vehicle.mrGbMS.Ranges2[p.range2].ratio p.isCurrent = true - p.timeToShift = 0 + p.timeToShiftMax = 0 + p.timeToShiftSum = 0 - pts = 0 - if p.gear ~= self.vehicle.mrGbMS.CurrentGear then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftGear ) - - if self.vehicle.mrGbMS.GearTimeToShiftGear > self.vehicle.mrGbMS.GearTimeToShiftHl + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftGear > self.vehicle.mrGbMS.GearTimeToShiftRanges2 + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftGear ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftGear + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriorityG ) end if p.range1 ~= self.vehicle.mrGbMS.CurrentRange then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftHl ) - - if self.vehicle.mrGbMS.GearTimeToShiftHl > self.vehicle.mrGbMS.GearTimeToShiftGear + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftHl > self.vehicle.mrGbMS.GearTimeToShiftRanges2 + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftHl ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftHl + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriorityR ) end if p.range2 ~= self.vehicle.mrGbMS.CurrentRange2 then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftRanges2 ) - - if self.vehicle.mrGbMS.GearTimeToShiftRanges2 > self.vehicle.mrGbMS.GearTimeToShiftGear + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftRanges2 > self.vehicle.mrGbMS.GearTimeToShiftHl + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftRanges2 ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftRanges2 + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriority2 ) + end + + if p.priority == 1 and p.timeToShiftMax <= self.vehicle.mrGbMG.maxTimeToSkipGear then + p.priority = 0 end - p.priority = math.max( p.priority, pts ) + if p.gearSpeed < self.vehicle.mrGbMS.LaunchGearSpeed - gearboxMogli.eps then + p.priority = math.max( p.priority, 3 ) + end - if minTimeToShift > p.timeToShift then - minTimeToShift = p.timeToShift + if minTimeToShift > p.timeToShiftMax then + minTimeToShift = p.timeToShiftMax end table.insert( tmp, p ) @@ -8482,7 +8549,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) end local function sortGears( a, b ) - for _,comp in pairs( {"gearSpeed","timeToShift","gear","range1","range2"} ) do + for _,comp in pairs( {"gearSpeed","timeToShiftMax","gear","range1","range2"} ) do if a[comp] < b[comp] - gearboxMogli.eps then return true elseif a[comp] > b[comp] + gearboxMogli.eps then @@ -8521,7 +8588,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) upTimerMode = 0 elseif self.clutchOverheatTimer ~= nil and self.clutchPercent < 0.9 - and self.clutchOverheatTimer > 0.8 * self.vehicle.mrGbMS.ClutchOverheatStartTime then + and self.clutchOverheatTimer > 0.5 * self.vehicle.mrGbMS.ClutchOverheatStartTime then downTimerMode = 0 elseif self.clutchRpm < downRpm then -- allow down shift after short timeout @@ -8551,43 +8618,60 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) p.rpmLo = p.rpmHi --**********************************************************************************-- -- estimate speed lost: 5.4 km/h lost at wheelLoad above 50 kNm for every 800 ms - if p.timeToShift > 0 and p.gearSpeed > 0 and self.maxMotorTorque > 0 then + if p.timeToShiftMax > 0 and p.gearSpeed > 0 and self.maxMotorTorque > 0 and p.rpmHi <= upRpm then -- rpmLo can become negative !!! - p.rpmLo = p.rpmHi - p.timeToShift * 0.00125 * Utils.clamp( self.wheelLoadS * 0.02, 0, 1 ) * self.vehicle.mrGbMS.RatedRpm / p.gearSpeed + p.rpmLo = p.rpmHi - p.timeToShiftMax * 0.00125 * Utils.clamp( self.wheelLoadS * 0.02, 0, 1 ) * self.vehicle.mrGbMS.RatedRpm / p.gearSpeed + + p.rpmLo = math.max( 0.5 * p.rpmHi, p.rpmLo ) + --if p.rpmHi >= downRpm and p.rpmLo < downRpm then p.rpmLo = downRpm end end local isValidEntry = true - if downRpm <= rpmC and rpmC <= upRpm + if downRpm <= rpmC and rpmC <= upRpm and p.rpmLo + gearboxMogli.eps < rpmC and rpmC < p.rpmHi - gearboxMogli.eps - and p.timeToShift > self.vehicle.mrGbMG.maxTimeToSkipGear then + and p.timeToShiftMax > self.vehicle.mrGbMG.maxTimeToSkipGear then -- the current gear is still valud => keep it - isValidEntry = false + p.priority = math.max( p.priority, 8 ) elseif p.rpmHi < rpmC and rpmC < downRpm then -- the current gear is better than the new onw - isValidEntry = false + p.priority = math.max( p.priority, 9 ) elseif p.rpmHi > rpmC and rpmC > upRpm then -- the current gear is better than the new onw - isValidEntry = false + p.priority = math.max( p.priority, 9 ) end - if p.gearSpeed > maxDcSpeed - or p.gearSpeed < self.vehicle.mrGbMG.minAutoGearSpeed then - isValidEntry = false + -- no down shift if just idling + if accelerationPedal < gearboxMogli.accDeadZone + and downTimerMode > 0 + and p.gearSpeed < self.vehicle.mrGbMS.LaunchGearSpeed - gearboxMogli.eps + and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed + and self.stallWarningTimer == nil + then + --isValidEntry = false + p.priority = 10 + end + + if p.gearSpeed < self.vehicle.mrGbMG.minAutoGearSpeed then + p.priority = 10 + end + + if p.gearSpeed > maxDcSpeed then + p.priority = 10 end if self.vehicle.cruiseControl.state > 0 and p.gearSpeed * self.vehicle.mrGbMS.IdleRpm > currentSpeedLimit * self.vehicle.mrGbMS.RatedRpm then - isValidEntry = false + p.priority = 10 end if isValidEntry and not p.isCurrent then if self.deltaRpm < -gearboxMogli.autoShiftMaxDeltaRpm - and p.gearSpeed > self.vehicle.mrGbML.currentGearSpeed + gearboxMogli.eps then + and p.gearSpeed > self.vehicle.mrGbML.currentGearSpeed + gearboxMogli.eps then isValidEntry = false elseif self.deltaRpm > gearboxMogli.autoShiftMaxDeltaRpm - and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed - gearboxMogli.eps then + and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed - gearboxMogli.eps then isValidEntry = false end end @@ -8611,21 +8695,20 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) else autoShiftTimeout = self.lastClutchClosedTime + self.vehicle.mrGbMS.AutoShiftTimeoutShort end - if autoShiftTimeout + minTimeToShift > g_currentMission.time then + if autoShiftTimeout + minTimeToShift > g_currentMission.time then isValidEntry = false - elseif autoShiftTimeout + p.timeToShift > g_currentMission.time then - p.priority = 3 + elseif autoShiftTimeout + p.timeToShiftSum > g_currentMission.time then + p.priority = math.max( p.priority, 7 ) end end end - if isValidEntry then - -- gear is possible + if isValidEntry or self.vehicle.mrGbMG.debugPrint or gearboxMogli.debugGearShift or self.vehicle.mrGbML.autoShiftInfoPrint then local testRpm testRpm = self:getRpmScore( p.rpmHi, downRpm, upRpm ) if testRpm < 1 and p.rpmLo < p.rpmHi then - testRpm = math.max( testRpm, self:getRpmScore( p.rpmLo, downRpm, upRpm ) ) + testRpm = 0.5 * ( testRpm + self:getRpmScore( p.rpmLo, downRpm, upRpm ) ) end local t1, t2 = 0, 0 @@ -8641,17 +8724,19 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) local testPwr = Utils.clamp( ( self.requestedPower - 0.8 * p.rpmHi * t1 ) / self.currentMaxPower, 0, 1 ) if p.rpmLo < p.rpmHi then - testPwr = math.max( testPwr, Utils.clamp( ( self.requestedPower - 0.8 * p.rpmLo * t2 ) / self.currentMaxPower, 0, 1 ) ) + testPwr = 0.5 * ( testPwr + Utils.clamp( ( self.requestedPower - 0.8 * p.rpmLo * t2 ) / self.currentMaxPower, 0, 1 ) ) end if testRpm > 0 then -- reach RPM window - p.score = 3 + testRpm + p.score = 3 + testRpm + -- p.score = 2 + 0.1 * math.min( p.priority, 10 ) + 0.01 * testRpm elseif testPwr > 0 then -- and optimize power afterwards - p.score = 2 + testPwr + --p.score = 2 + testPwr + p.score = 2 + 0.1 * math.min( p.priority, 10 ) + 0.01 * testPwr elseif p.priority > 0 then - -- gear to be skipped => only relevant if it is the only gear that fits + -- sort by priority p.score = 1 + 0.1 * math.min( p.priority, 10 ) else -- optimize fuel usage ratio @@ -8662,7 +8747,10 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) -- p.score = p.score * ( 1 + 0.14 * ( self.motorLoadS - 0.3 ) ) end end - + end + + if isValidEntry then + -- gear is possible if bestScore == nil or bestScore > p.score or ( math.abs( bestScore - p.score ) < 1e-4 @@ -8894,8 +8982,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) else self.lastThrottle = math.max( self.vehicle.mrGbMS.HandThrottle, accelerationPedal ) end + local f = 1 + if self.vehicle.mrGbML.gearShiftingNeeded > 0 then + f = 2 + end if self.lastThrottle > 0 and self.lastThrottle > ( self.lastMotorRpm / self.maxRpm ) then - self.lastMotorRpm = Utils.clamp( self.lastMotorRpm + 5 * self.lastThrottle * self.tickDt * self.vehicle.mrGbMS.RpmIncFactor, + self.lastMotorRpm = Utils.clamp( self.lastMotorRpm + f * self.lastThrottle * self.tickDt * self.vehicle.mrGbMS.RpmIncFactor, self.minRequiredRpm, self:getThrottleMaxRpm( ) ) else @@ -9026,7 +9118,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.maxPossibleRpm = self.vehicle.mrGbMS.CurMaxRpm end - if self.vehicle.mrGbML.afterShiftRpm ~= nil and self.vehicle.mrGbML.gearShiftingEffect then + if self.vehicle.mrGbML.afterShiftRpm ~= nil then -- and self.vehicle.mrGbML.gearShiftingEffect then if self.maxPossibleRpm > self.vehicle.mrGbML.afterShiftRpm then self.maxPossibleRpm = self.vehicle.mrGbML.afterShiftRpm self.vehicle.mrGbML.afterShiftRpm = self.vehicle.mrGbML.afterShiftRpm + self.maxRpmIncrease @@ -9035,7 +9127,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) end end end - + + if self.vehicle.mrGbML.afterShiftRpm ~= nil and self.vehicle.mrGbML.gearShiftingEffect and not self.noTransmission then + self.lastMotorRpm = self.vehicle.mrGbML.afterShiftRpm + self.vehicle.mrGbML.gearShiftingEffect = false + end + --********************************************************************************************************** -- do not cut torque in case of open clutch or torque converter if self.clutchPercent < 1 and self.maxPossibleRpm < self.vehicle.mrGbMS.CloseRpm then @@ -9179,7 +9276,7 @@ function gearboxMogliMotor:getClutchPercent( targetRpm, openRpm, closeRpm, fromP end end - if self.vehicle.mrGbMG.debugPrint + if gearboxMogli.debugGearShift and self.autoClutchPercent < self.vehicle.mrGbMS.MaxClutchPercent and fromPercent ~= nil and toPercent ~= nil then @@ -9303,7 +9400,7 @@ function gearboxMogliMotor:getDampingRate() -- r = self.clutchPercent * r --end --return math.max( 1e-20, r ) - return 0.7 * self:getRotInertia() + return self.vehicle.mrGbMG.inertiaToDampingRatio * self:getRotInertia() end --********************************************************************************************************** diff --git a/FS17_GearboxAddon/modDesc.xml b/FS17_GearboxAddon/modDesc.xml index 0f00c0e..6810348 100644 --- a/FS17_GearboxAddon/modDesc.xml +++ b/FS17_GearboxAddon/modDesc.xml @@ -2,17 +2,17 @@ Mogli aka Biedens dds/store.dds - 2.0.0.3 + 2.0.0.4 - Getriebe v2.0 von Mogli - Gearbox v2.0 by mogli - Cambio v2.0 by mogli - Transmission v2.0 by mogli - Řazení v2.0 by mogli -Skrzynia biegów v2.0 by mogli + Getriebe v2.0 rc2 von Mogli + Gearbox v2.0 rc2 by mogli + Cambio v2.0 rc2 by mogli + Transmission v2.0 rc2 by mogli + Řazení v2.0 rc2 by mogli +Skrzynia biegów v2.0 rc2 by mogli diff --git a/FS17_GearboxAddon/tempomatMogli.lua b/FS17_GearboxAddon/tempomatMogli.lua index b8e9874..b98ab57 100644 --- a/FS17_GearboxAddon/tempomatMogli.lua +++ b/FS17_GearboxAddon/tempomatMogli.lua @@ -7,7 +7,7 @@ -- --*************************************************************** -local tempomatMogliVersion=1.700 +local tempomatMogliVersion=1.701 -- allow modders to include this source file together with mogliBase.lua in their mods if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version < tempomatMogliVersion then @@ -16,7 +16,7 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version if _G[g_currentModName..".mogliBase"] == nil then source(Utils.getFilename("mogliBase.lua", g_currentModDirectory)) end - _G[g_currentModName..".mogliBase"].newClass( "tempomatMogli", "tempomatMogliV14" ) + _G[g_currentModName..".mogliBase"].newClass( "tempomatMogli", "tempomatMogliV17" ) --*************************************************************** tempomatMogli.version = tempomatMogliVersion @@ -27,26 +27,27 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version --********************************************************************************************************** function tempomatMogli:load(xmlFile) -- state - self.tempomatMogliV14 = {} + self.tempomatMogliV17 = {} - self.tempomatMogliV14.baseSpeed1 = 50 - self.tempomatMogliV14.baseSpeed2 = 10 - self.tempomatMogliV14.baseSpeed3 = 30 + self.tempomatMogliV17.baseSpeed1 = 50 + self.tempomatMogliV17.baseSpeed2 = 10 + self.tempomatMogliV17.baseSpeed3 = 30 if self.motor ~= nil and self.motor.maxForwardSpeed ~= nil then - self.tempomatMogliV14.baseSpeed1 = math.floor( self.motor.maxForwardSpeed * 3.6 + 0.5 ) - if self.tempomatMogliV14.baseSpeed1 < 20 then - self.tempomatMogliV14.baseSpeed2 = math.floor( self.motor.maxForwardSpeed * 1.25 + 0.5 ) - self.tempomatMogliV14.baseSpeed3 = math.floor( self.motor.maxForwardSpeed * 1.80 + 0.5 ) - elseif self.tempomatMogliV14.baseSpeed1 < 30 then - self.tempomatMogliV14.baseSpeed3 = 20 + self.tempomatMogliV17.baseSpeed1 = math.floor( self.motor.maxForwardSpeed * 3.6 + 0.5 ) + if self.tempomatMogliV17.baseSpeed1 < 20 then + self.tempomatMogliV17.baseSpeed2 = math.floor( self.motor.maxForwardSpeed * 1.25 + 0.5 ) + self.tempomatMogliV17.baseSpeed3 = math.floor( self.motor.maxForwardSpeed * 1.80 + 0.5 ) + elseif self.tempomatMogliV17.baseSpeed1 < 30 then + self.tempomatMogliV17.baseSpeed3 = 20 end end - tempomatMogli.registerState( self, "SpeedLimit2", self.tempomatMogliV14.baseSpeed2 ) - tempomatMogli.registerState( self, "SpeedLimit3", self.tempomatMogliV14.baseSpeed3 ) + tempomatMogli.registerState( self, "SpeedLimit2", self.tempomatMogliV17.baseSpeed2 ) + tempomatMogli.registerState( self, "SpeedLimit3", self.tempomatMogliV17.baseSpeed3 ) tempomatMogli.registerState( self, "KeepSpeed", false ) - self.tempomatMogliV14.modName = l_currentModName + tempomatMogli.registerState( self, "SpeedLimit", -1 ) + self.tempomatMogliV17.modName = l_currentModName self.tempomatMogliSetSpeedLimit = tempomatMogli.tempomatMogliSetSpeedLimit self.tempomatMogliGetSpeedLimit = tempomatMogli.tempomatMogliGetSpeedLimit @@ -71,27 +72,53 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version self:tempomatMogliSetSpeedLimit() elseif tempomatMogli.mbHasInputEvent( "gearboxMogliSWAPSPEED" ) then -- speed limiter self:tempomatMogliSwapSpeedLimit() - end + end tempomatMogli.mbSetState( self, "KeepSpeed", tempomatMogli.mbIsInputPressed( "gearboxMogliKEEPSPEED" ) ) else tempomatMogli.mbSetState( self, "KeepSpeed", false ) end if self.isServer and self.cruiseControl ~= nil then - if self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE - or ( self.movingDirection <= 0 - and ( self.mrGbMS == nil or not ( self.mrGbMS.IsOn ) ) ) then - self.tempomatMogliV14.keepSpeedLimit = nil - elseif self.tempomatMogliV14.KeepSpeed then - if self.tempomatMogliV14.keepSpeedLimit == nil then - self.tempomatMogliV14.lastAxisFoward = 0 - self.tempomatMogliV14.keepSpeedLimit = math.max( self.lastSpeedReal*3600, tempomatMogli.getMinSpeed( self, true ) ) + if self.movingDirection <= 0 and ( self.mrGbMS == nil or not ( self.mrGbMS.IsOn ) ) then + self.tempomatMogliV17.keepSpeedLimit = nil + elseif self.tempomatMogliV17.KeepSpeed then + if self.tempomatMogliV17.keepSpeedLimit == nil then + self.tempomatMogliV17.lastAxisFoward = 0 + self.tempomatMogliV17.keepSpeedLimit = math.max( self.lastSpeedReal*3600, tempomatMogli.getMinSpeed( self, true ) ) end - elseif self.tempomatMogliV14.keepSpeedLimit ~= nil then - self.tempomatMogliV14.keepSpeedLimit = nil + elseif self.tempomatMogliV17.keepSpeedLimit ~= nil then + self.tempomatMogliV17.keepSpeedLimit = nil + end + + if self.tempomatMogliV17.keepSpeedLimit ~= nil then + local s = math.floor( self.tempomatMogliV17.keepSpeedLimit + 0.5 ) + tempomatMogli.mbSetState( self, "SpeedLimit", s ) end else - self.tempomatMogliV14.keepSpeedLimit = nil + self.tempomatMogliV17.keepSpeedLimit = nil + end + + if self.tempomatMogliV17.KeepSpeed then + if self.tempomatMogliV17.cruiseControlState == nil then + self.tempomatMogliV17.cruiseControlSpeed = self.cruiseControl.speed + self.tempomatMogliV17.cruiseControlState = self.cruiseControl.state + end + + if self.tempomatMogliV17.SpeedLimit > 0 then + self.cruiseControl.speed = self.tempomatMogliV17.SpeedLimit + self.cruiseControl.state = Drivable.CRUISECONTROL_STATE_ACTIVE + else + self.cruiseControl.state = Drivable.CRUISECONTROL_STATE_OFF + end + elseif self.tempomatMogliV17.cruiseControlState ~= nil then + self.cruiseControl.speed = self.tempomatMogliV17.cruiseControlSpeed + self.cruiseControl.state = self.tempomatMogliV17.cruiseControlState + if self.cruiseControlHud ~= nil and self.tempomatMogliV17.SpeedLimit > 0 then + VehicleHudUtils.setHudValue(self, self.cruiseControlHud, self.cruiseControl.speed, 9999); + end + + self.tempomatMogliV17.cruiseControlSpeed = nil + self.tempomatMogliV17.cruiseControlState = nil end end @@ -164,10 +191,10 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:newUpdateVehiclePhysics --********************************************************************************************************** function tempomatMogli:newUpdateVehiclePhysics( superFunc, axisForward, axisForwardIsAnalog, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) - if self.tempomatMogliV14 == nil - or self.tempomatMogliV14.keepSpeedLimit == nil - or self.tempomatMogliV14.modName == nil - or self.tempomatMogliV14.modName ~= l_currentModName then + if self.tempomatMogliV17 == nil + or self.tempomatMogliV17.keepSpeedLimit == nil + or self.tempomatMogliV17.modName == nil + or self.tempomatMogliV17.modName ~= l_currentModName then return superFunc( self, axisForward, axisForwardIsAnalog, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) end @@ -181,22 +208,22 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- accelerate by 0.5..2 m/s^2 local acc = 2 - math.min( 1.5, currentSpeed * 0.05 ) - if self.tempomatMogliV14.keepSpeedLimit < currentSpeed + 2 then - --self.tempomatMogliV14.keepSpeedLimit = math.min( math.max( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0036, tempomatMogli.getMaxSpeed( self, true ) ) - self.tempomatMogliV14.keepSpeedLimit = math.max( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0036 * acc + if self.tempomatMogliV17.keepSpeedLimit < currentSpeed + 2 then + --self.tempomatMogliV17.keepSpeedLimit = math.min( math.max( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0036, tempomatMogli.getMaxSpeed( self, true ) ) + self.tempomatMogliV17.keepSpeedLimit = math.max( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0036 * acc end elseif axisForward >= 0.2 then -- decelerate by 2..4 m/s^2 local acc = Utils.clamp( currentSpeed * 0.05, 2, 4 ) - if self.tempomatMogliV14.keepSpeedLimit > currentSpeed - 2 then - self.tempomatMogliV14.keepSpeedLimit = math.max( math.min( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0072 * acc, 1 ) + if self.tempomatMogliV17.keepSpeedLimit > currentSpeed - 2 then + self.tempomatMogliV17.keepSpeedLimit = math.max( math.min( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0072 * acc, 1 ) end end local temp1 = self.motor.speedLimit - self.motor.speedLimit = math.min( temp1, self.tempomatMogliV14.keepSpeedLimit ) + self.motor.speedLimit = math.min( temp1, self.tempomatMogliV17.keepSpeedLimit ) superFunc( self, -1, false, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) self.motor.speedLimit = temp1 end @@ -229,6 +256,9 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:tempomatMogliSetSpeedLimit --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit( ) + if self.tempomatMogliV17.lastSpeedLimit ~= nil then + return self.tempomatMogliV17.lastSpeedLimit + end return self.cruiseControl.speed end @@ -236,23 +266,23 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:tempomatMogliSetSpeedLimit2 --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit2( ) - return self.tempomatMogliV14.SpeedLimit2 + return self.tempomatMogliV17.SpeedLimit2 end --********************************************************************************************************** -- tempomatMogli:tempomatMogliSetSpeedLimit2 --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit3( ) - return self.tempomatMogliV14.SpeedLimit3 + return self.tempomatMogliV17.SpeedLimit3 end --********************************************************************************************************** -- tempomatMogli:tempomatMogliSwapSpeedLimit --********************************************************************************************************** function tempomatMogli:tempomatMogliSwapSpeedLimit( noEventSend ) - local speed1 = self.tempomatMogliV14.SpeedLimit2 - local speed2 = self.tempomatMogliV14.SpeedLimit3 - local speed3 = self.cruiseControl.speed + local speed1 = self:tempomatMogliGetSpeedLimit2() + local speed2 = self:tempomatMogliGetSpeedLimit3() + local speed3 = self:tempomatMogliGetSpeedLimit() self:setCruiseControlMaxSpeed(speed1) tempomatMogli.mbSetState( self, "SpeedLimit2", speed2, noEventSend ) tempomatMogli.mbSetState( self, "SpeedLimit3", speed3, noEventSend ) @@ -265,12 +295,12 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version local attributes = "" - if self.tempomatMogliV14 ~= nil then - if math.abs( self.tempomatMogliV14.SpeedLimit2 - self.tempomatMogliV14.baseSpeed2 ) < 1 then - attributes = attributes.." mrGbMSpeed2=\"" .. tostring( self.tempomatMogliV14.SpeedLimit2 ) .. "\"" + if self.tempomatMogliV17 ~= nil then + if math.abs( self.tempomatMogliV17.SpeedLimit2 - self.tempomatMogliV17.baseSpeed2 ) < 1 then + attributes = attributes.." mrGbMSpeed2=\"" .. tostring( self.tempomatMogliV17.SpeedLimit2 ) .. "\"" end - if math.abs( self.tempomatMogliV14.SpeedLimit3 - self.tempomatMogliV14.baseSpeed3 ) < 1 then - attributes = attributes.." mrGbMSpeed3=\"" .. tostring( self.tempomatMogliV14.SpeedLimit3 ) .. "\"" + if math.abs( self.tempomatMogliV17.SpeedLimit3 - self.tempomatMogliV17.baseSpeed3 ) < 1 then + attributes = attributes.." mrGbMSpeed3=\"" .. tostring( self.tempomatMogliV17.SpeedLimit3 ) .. "\"" end end @@ -283,24 +313,24 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version function tempomatMogli:loadFromAttributesAndNodes(xmlFile, key, resetVehicles) local i - if self.tempomatMogliV14 ~= nil then + if self.tempomatMogliV17 ~= nil then i = getXMLInt(xmlFile, key .. "#mrGbMSpeed2" ) if i ~= nil then - self.tempomatMogliV14.SpeedLimit2 = i + self.tempomatMogliV17.SpeedLimit2 = i end i = getXMLInt(xmlFile, key .. "#mrGbMSpeed3" ) if i ~= nil then - self.tempomatMogliV14.SpeedLimit3 = i + self.tempomatMogliV17.SpeedLimit3 = i end end - if self.tempomatMogliV14.baseSpeed1 ~= nil then - if math.abs( self.cruiseControl.speed - self.tempomatMogliV14.baseSpeed2 ) < 1 then - self.tempomatMogliV14.SpeedLimit2 = self.tempomatMogliV14.SpeedLimit3 - self.tempomatMogliV14.SpeedLimit3 = self.tempomatMogliV14.baseSpeed1 - elseif math.abs( self.cruiseControl.speed - self.tempomatMogliV14.baseSpeed3 ) < 1 then - self.tempomatMogliV14.SpeedLimit3 = self.tempomatMogliV14.SpeedLimit2 - self.tempomatMogliV14.SpeedLimit2 = self.tempomatMogliV14.baseSpeed1 + if self.tempomatMogliV17.baseSpeed1 ~= nil then + if math.abs( self.cruiseControl.speed - self.tempomatMogliV17.baseSpeed2 ) < 1 then + self.tempomatMogliV17.SpeedLimit2 = self.tempomatMogliV17.SpeedLimit3 + self.tempomatMogliV17.SpeedLimit3 = self.tempomatMogliV17.baseSpeed1 + elseif math.abs( self.cruiseControl.speed - self.tempomatMogliV17.baseSpeed3 ) < 1 then + self.tempomatMogliV17.SpeedLimit3 = self.tempomatMogliV17.SpeedLimit2 + self.tempomatMogliV17.SpeedLimit2 = self.tempomatMogliV17.baseSpeed1 end end diff --git a/src/gearboxMogli.lua b/src/gearboxMogli.lua index 5c835e6..adaf03a 100644 --- a/src/gearboxMogli.lua +++ b/src/gearboxMogli.lua @@ -45,11 +45,12 @@ gearboxMogli.maxClutchPercentTC = 0.95 gearboxMogli.clutchLoopTimes = 10 gearboxMogli.clutchLoopDelta = 10 gearboxMogli.minHydrostaticFactor = 0.001 -gearboxMogli.accHydrostaticFactor = 5 gearboxMogli.maxGearRatio = 37699.11184 -- 0.01 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.minGearRatio = 1.508 -- 250 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.maxHydroGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case -gearboxMogli.maxManualGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.minGearRatio = 1.508 -- 250 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.maxHydroGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.maxManualGearRatio = gearboxMogli.maxGearRatio / 20 -- 0.2 km/h @1000 RPM / gear ratio might be bigger, but no clutch in this case +gearboxMogli.accHydrostaticFactor = 100 / gearboxMogli.maxGearRatio -- 1.0 km/h @1000 RPM +gearboxMogli.accHydrostaticTimer = 8000 gearboxMogli.brakeFxSpeed = 2.5 -- m/s = 9 km/h gearboxMogli.rpmReduction = 0.85 -- 15% RPM reduction allowed e.g. 330 RPM for 2200 rated RPM gearboxMogli.maxPowerLimit = 0.97 -- 97% max power is equal to max power @@ -142,19 +143,21 @@ gearboxMogliGlobals.grindingMaxRpmSound = 600 gearboxMogliGlobals.grindingMaxRpmDelta = gearboxMogli.huge gearboxMogliGlobals.defaultEnableAI = gearboxMogli.AIPowerShift gearboxMogliGlobals.autoHold = true -gearboxMogliGlobals.minAutoGearSpeed = 0.2777 +gearboxMogliGlobals.minAutoGearSpeed = 1.0 -- 0.2777 -- m/s gearboxMogliGlobals.minAbsSpeed = 1.0 -- km/h gearboxMogliGlobals.brakeNeutralTimeout = 1000 -- ms gearboxMogliGlobals.brakeNeutralLimit = -0.3 -gearboxMogliGlobals.DefaultRevUpMs0 = 2000 -- ms -gearboxMogliGlobals.DefaultRevUpMs1 = 4000 -- ms +gearboxMogliGlobals.DefaultRevUpMs0 = 2000 -- ms +gearboxMogliGlobals.DefaultRevUpMs1 = 2000 -- ms gearboxMogliGlobals.DefaultRevDownMs = 2000 -- ms gearboxMogliGlobals.HydroSpeedIdleRedux = 0.02 -- 0.04 -- default reduce by 10 km/h per second => 0.4 km/h with const. RPM and w/o acc. gearboxMogliGlobals.smoothGearRatio = false -- smooth gear ratio with hydrostatic drive gearboxMogliGlobals.motorLoadVolumeBrake = 1.0 -- make some noise with motor brake; -1 take normal motor load gearboxMogliGlobals.motorLoadVolumeBrakeR = -1 -- make some noise with motor brake; -1 take normal motor load gearboxMogliGlobals.minClutchTimeManual = 3000 -- ms; time from 0% to 100% for the digital manual clutch -gearboxMogliGlobals.momentOfInertia = 3 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.momentOfInertiaBase = 2 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.momentOfInertia = 2 -- J in unit kg m^2; for a cylinder with mass m and radius r: J = 0.5 * m * r^2 +gearboxMogliGlobals.inertiaToDampingRatio = 0.5 --********************************************************************************************************** @@ -258,7 +261,6 @@ function gearboxMogli:initClient() gearboxMogli.registerState( self, "G27Mode", 0 ) gearboxMogli.registerState( self, "WarningText", "", gearboxMogli.mrGbMOnSetWarningText ) gearboxMogli.registerState( self, "InfoText", "", gearboxMogli.mrGbMOnSetInfoText ) - gearboxMogli.registerState( self, "MotorBrake", false ) gearboxMogli.registerState( self, "ConstantRpm", false ) gearboxMogli.registerState( self, "NoUpdateStream",false, gearboxMogli.mrGbMOnSetNoUpdateStream ) gearboxMogli.registerState( self, "NUSMessage", {}, gearboxMogli.mrGbMOnSetNUSMessage ) @@ -350,6 +352,7 @@ function gearboxMogli:initClient() self.mrGbML.realAreaPerSecond = 0 self.mrGbML.updateStreamErrors = 0 self.mrGbML.MotorLoad = 0 + self.mrGbML.DirectionChangeTime = 0 if gearboxMogli.ovArrowUpWhite == nil then local w = math.floor(0.0095 * g_screenWidth) / g_screenWidth * gearboxMogli.getUiScale() @@ -644,7 +647,7 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.Sound.MaxRpm = self.mrGbMS.RatedRpm end - self.mrGbMS.MomentOfInertia = Utils.getNoNil(getXMLFloat(xmlFile, xmlString .. "#momentOfInertia"), self.mrGbMG.momentOfInertia * maxTorque ) + self.mrGbMS.MomentOfInertia = Utils.getNoNil(getXMLFloat(xmlFile, xmlString .. "#momentOfInertia"), self.mrGbMG.momentOfInertiaBase + self.mrGbMG.momentOfInertia * maxTorque ) --************************************************************************************************** -- PTO RPM @@ -1583,9 +1586,6 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.HydrostaticPtoDiff = 200 self.mrGbMS.HydrostaticEfficiency = {} - if hit == nil then hit = 2000 end - if hdt == nil then hdt = 2000 end - if self.mrGbMS.HydrostaticDirect == nil then self.mrGbMS.HydrostaticDirect = true end @@ -1728,14 +1728,14 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.HydrostaticPtoDiff = Utils.getNoNil( getXMLFloat(xmlFile, xmlString .. ".hydrostatic#ptoRpmDelta"), dft ) end - dft = Utils.getNoNil( hit, 2000 ) + dft = Utils.getNoNil( hit, 5000 ) if dft < 100 then -- do not smooth self.mrGbMS.HydrostaticIncFactor = 1 else self.mrGbMS.HydrostaticIncFactor = 1 / dft end - dft = Utils.getNoNil( hdt, 2000 ) + dft = Utils.getNoNil( hdt, 5000 ) if hdt == nil and hit ~= nil then -- compatibility self.mrGbMS.HydrostaticDecFactor = self.mrGbMS.HydrostaticIncFactor @@ -1800,11 +1800,46 @@ function gearboxMogli:initFromXml(xmlFile,xmlString,xmlSource,serverAndClient,mo self.mrGbMS.AutoShiftTimeoutLong = gearboxMogli.getNoNil2(getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftTimeout"), self.mrGbMG.autoShiftTimeoutLong , self.mrGbMG.autoShiftTimeoutHydroL, self.mrGbMS.Hydrostatic and self.mrGbMS.DisableManual ) self.mrGbMS.AutoShiftTimeoutShort = gearboxMogli.getNoNil2(getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftTimeout2"), self.mrGbMG.autoShiftTimeoutShort, self.mrGbMG.autoShiftTimeoutHydroS, self.mrGbMS.Hydrostatic and self.mrGbMS.DisableManual ) - + if self.mrGbMS.AutoShiftTimeoutShort > self.mrGbMS.AutoShiftTimeoutLong then self.mrGbMS.AutoShiftTimeoutShort = self.mrGbMS.AutoShiftTimeoutLong end + autoShiftPriorityG = getXMLFloat(xmlFile, xmlString .. ".gears#autoShiftPriority") + autoShiftPriorityR = getXMLFloat(xmlFile, xmlString .. ".ranges(0)#autoShiftPriority") + autoShiftPriority2 = getXMLFloat(xmlFile, xmlString .. ".ranges(1)#autoShiftPriority") + + self.mrGbMS.AutoShiftPriorityG = 0 + self.mrGbMS.AutoShiftPriorityR = 0 + self.mrGbMS.AutoShiftPriority2 = 0 + + do + local p = {} + + table.insert( p, { p=autoShiftPriorityG, t=self.mrGbMS.GearTimeToShiftGear , c="AutoShiftPriorityG" } ) + table.insert( p, { p=autoShiftPriorityR, t=self.mrGbMS.GearTimeToShiftHl , c="AutoShiftPriorityR" } ) + table.insert( p, { p=autoShiftPriority2, t=self.mrGbMS.GearTimeToShiftRanges2, c="AutoShiftPriority2" } ) + + table.sort( p, function(a,b) if a.p == nil or b.p == nil then return a.t= 0 ) and not self.mrGbMS.NeutralActive then - if self.mrGbML.gearShiftingNeeded == 0 then - self.mrGbML.gearShiftingEffect = true - end + if shiftingEffect and ( timeToShift >= 0 ) + and not self.mrGbMS.NeutralActive + and self.mrGbML.gearShiftingTime <= self.mrGbML.autoShiftTime then + self.mrGbML.gearShiftingEffect = true else self.mrGbML.gearShiftingEffect = false end @@ -4928,6 +4966,8 @@ function gearboxMogli:mrGbMDoGearShift() else self.mrGbML.gearShiftingNeeded = 3 end + self.mrGbML.doubleClutch = false + local gearMaxSpeed = self.mrGbMS.Gears[self.mrGbMS.CurrentGear].speed * self.mrGbMS.Ranges[self.mrGbMS.CurrentRange].ratio * self.mrGbMS.Ranges2[self.mrGbMS.CurrentRange2].ratio @@ -4946,10 +4986,6 @@ function gearboxMogli:mrGbMDoGearShift() if self.mrGbML.beforeShiftRpm ~= nil then self.mrGbML.afterShiftRpm = Utils.clamp( self.mrGbML.beforeShiftRpm * self.mrGbML.lastGearSpeed / self.mrGbML.currentGearSpeed, self.mrGbML.motor.vehicle.mrGbMS.IdleRpm, self.mrGbML.motor.vehicle.mrGbMS.CurMaxRpm ) - - if self.mrGbML.gearShiftingEffect then - self.motor.lastMotorRpm = self.mrGbML.afterShiftRpm - end else self.mrGbML.afterShiftRpm = nil end @@ -5657,6 +5693,16 @@ function gearboxMogli:mrGbMOnSetIsOn( old, new, noEventSend ) end end self:mrGbMDoGearShift() + + self.cruiseControl.maxSpeed = self.mrGbMS.MaxGearSpeed * math.max( 1, ( self.mrGbMS.CurMaxRpm - gearboxMogli.rpmPlus ) / self.mrGbMS.RatedRpm ) * 3.6 + if self.mrGbMS.Hydrostatic then + self.cruiseControl.maxSpeed = self.cruiseControl.maxSpeed * self.mrGbMS.HydrostaticMax + end + if self.mrGbMS.MaxSpeedLimiter and self.motor.maxForwardSpeed ~= nil and self.cruiseControl.maxSpeed > self.motor.maxForwardSpeed * 3.6 then + self.cruiseControl.maxSpeed = self.motor.maxForwardSpeed * 3.6 + end + self.cruiseControl.speed = math.min( self.cruiseControl.speed, self.cruiseControl.maxSpeed ) + elseif old and self.mrGbML.motor ~= nil then if self.isServer then self:mrGbMSetState( "DefaultGear", self.mrGbMS.CurrentGear, noEventSend ) @@ -5668,6 +5714,12 @@ function gearboxMogli:mrGbMOnSetIsOn( old, new, noEventSend ) gearboxMogliMotor.copyRuntimeValues( self.mrGbML.motor, self.mrGbMB.motor ) self.motor = self.mrGbMB.motor end + + if self.mrGbMB.cruiseControlMaxSpeed ~= nil then + self.cruiseControl.maxSpeed = self.mrGbMB.cruiseControlMaxSpeed + end + self.cruiseControl.speed = math.min( self.cruiseControl.speed, self.cruiseControl.maxSpeed ) + if self.mrGbMB.dcShuttle then self.mrGbMB.dcShuttle = false self.driveControl.shuttle.isActive = true @@ -5732,7 +5784,8 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, if self.steeringEnabled then -- driveControl and GPS - if self.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_OFF then + if self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE + or self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_FULL then acceleration = 1 elseif self.cruiseControl.state <= 0 and g_currentMission.driveControl ~= nil @@ -5833,7 +5886,8 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, --******************* -- motor brake --******************* - local motorBrake = -self.mrGbMS.RealMotorBrakeFx * self.motor.clutchPercent * math.min( gearboxMogli.brakeFxSpeed * ( self.motor.nonClampedMotorRpm - self.mrGbMS.IdleRpm ) / ( math.max( self.mrGbML.currentGearSpeed, 0.1 ) * ( self.mrGbMS.CurMaxRpm - self.mrGbMS.IdleRpm ) ), 1 ) +--local motorBrake = -self.mrGbMS.RealMotorBrakeFx * self.motor.clutchPercent * math.min( gearboxMogli.brakeFxSpeed * ( self.motor.nonClampedMotorRpm - self.mrGbMS.IdleRpm ) / ( math.max( self.mrGbML.currentGearSpeed, 0.1 ) * ( self.mrGbMS.CurMaxRpm - self.mrGbMS.IdleRpm ) ), 1 ) + local motorBrake = 0 --******************* -- cruise control @@ -5864,23 +5918,17 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, self.motor:updateSpeedLimit( dt ) - if self.tempomatMogliV14 ~= nil - and self.tempomatMogliV14.keepSpeedLimit ~= nil - and math.abs( currentSpeed ) * 3600 > self.tempomatMogliV14.keepSpeedLimit + 1 then + if self.tempomatMogliV17 ~= nil + and self.tempomatMogliV17.keepSpeedLimit ~= nil + and math.abs( currentSpeed ) * 3600 > self.tempomatMogliV17.keepSpeedLimit + 1 then brakeLights = true end - local motorBrakeOn = false if self.motor.noTransmission --or self.mrGbML.gearShiftingNeeded ~= 0 or self.mrGbML.hydroTargetSpeed ~= nil then -- disable motor brake self.mrGbML.motorBrakeTime = g_currentMission.time + gearboxMogli.motorBrakeTime - - if ( self.mrGbML.gearShiftingNeeded > 0 and self.mrGbML.gearShiftingNeeded ~= 2 ) - or ( self.mrGbML.gearShiftingNeeded < 0 and acceleration < 0.001 ) then - motorBrakeOn = true - end elseif self.mrGbML.motorBrakeTime == nil then -- initialize motor brake self.mrGbML.motorBrakeTime = g_currentMission.time + gearboxMogli.motorBrakeTime @@ -5894,17 +5942,14 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, elseif acceleration < motorBrake then -- braking brakePedal = -acceleration - motorBrakeOn = true elseif self.motor.lastRealMotorRpm >= self.mrGbMS.CurMaxRpm then -- no fuel => motorBrake self.mrGbML.motorBrakeTime = 0 brakePedal = -motorBrake - motorBrakeOn = true elseif acceleration < 0.001 then -- nothing => motorBrake if self.mrGbML.motorBrakeTime < g_currentMission.time then brakePedal = -motorBrake - motorBrakeOn = true end elseif self.mrGbMS.ReverseActive then -- reverse @@ -5916,19 +5961,25 @@ function gearboxMogli:newUpdateWheelsPhysics( superFunc, dt, currentSpeed, acc, accelerationPedal = acceleration end - if self.motor.clutchPercent < 1 - gearboxMogli.eps - or self.mrGbMS.Hydrostatic then - motorBrakeOn = false - end - - self:mrGbMSetState( "MotorBrake", motorBrakeOn ) if ( self:mrGbMGetAutoHold() or ( self:mrGbMGetAutoClutch() and acceleration > 0.001 ) ) - and ( ( self.movingDirection * currentSpeed > 5.5555555556e-4 and self.mrGbMS.ReverseActive ) - or ( self.movingDirection * currentSpeed < -5.5555555556e-4 and not ( self.mrGbMS.ReverseActive ) ) ) then + and ( ( self.movingDirection * currentSpeed > 2.7777777778e-4 and self.mrGbMS.ReverseActive ) + or ( self.movingDirection * currentSpeed < -2.7777777778e-4 and not ( self.mrGbMS.ReverseActive ) ) ) then -- wrong direction - brakePedal = 1 + if g_currentMission.time > self.mrGbML.DirectionChangeTime + 2000 then + brakePedal = 1 + else + brakePedal = math.max( g_currentMission.time - self.mrGbML.DirectionChangeTime ) * 0.0005 + end brakeLights = true + elseif self:mrGbMGetAutoHold() + and g_currentMission.time > self.mrGbML.DirectionChangeTime + 2000 + and not self.motor.noTransmission + and math.abs( currentSpeed ) < 5.5555555556e-5 + and acceleration < 0.1 then + -- auto hold + brakePedal = 1 + --brakeLights = true end self.setBrakeLightsVisibility(self, brakeLights) @@ -6482,19 +6533,19 @@ function gearboxMogliMotor:updateSpeedLimit( dt ) speedLimit = math.min( speedLimit, self.speedLimit ) end - if self.vehicle.tempomatMogliV14 ~= nil - and self.vehicle.tempomatMogliV14.keepSpeedLimit ~= nil then - speedLimit = math.min( speedLimit, self.vehicle.tempomatMogliV14.keepSpeedLimit ) + if self.vehicle.tempomatMogliV17 ~= nil + and self.vehicle.tempomatMogliV17.keepSpeedLimit ~= nil then + speedLimit = math.min( speedLimit, self.vehicle.tempomatMogliV17.keepSpeedLimit ) end speedLimit = speedLimit * gearboxMogli.kmhTOms if self.vehicle.mrGbMS.SpeedLimiter - or self.vehicle.cruiseControl.state > 0 + or self.vehicle.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE or self.vehicle.mrGbML.hydroTargetSpeed ~= nil then local cruiseSpeed = speedLimit - if self.vehicle.mrGbMS.SpeedLimiter or self.vehicle.cruiseControl.state > 0 then + if self.vehicle.mrGbMS.SpeedLimiter or self.vehicle.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE then cruiseSpeed = math.min( cruiseSpeed, self.vehicle.cruiseControl.speed * gearboxMogli.kmhTOms ) end @@ -6868,7 +6919,9 @@ function gearboxMogliMotor:getTorque( acceleration, limitRpm ) self.ptoSpeedLimit = nil elseif self.lastMissingTorque > gearboxMogli.ptoSpeedLimitRatio * self.lastMotorTorque and self.vehicle.mrGbMS.PtoSpeedLimit - and ( not ( self.vehicle.steeringEnabled ) or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_OFF ) + and ( not ( self.vehicle.steeringEnabled ) + or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_ACTIVE + or self.vehicle.cruiseControl.state ~= Drivable.CRUISECONTROL_STATE_FULL ) and self.vehicle.lastSpeedReal*1000 > gearboxMogli.ptoSpeedLimitMin then if self.ptoSpeedLimit ~= nil then self.ptoSpeedLimit = math.max( self.ptoSpeedLimit - self.tickDt * gearboxMogli.ptoSpeedLimitDec, gearboxMogli.ptoSpeedLimitMin ) @@ -7533,7 +7586,17 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.motorLoadP = Utils.clamp( self.motorLoadP, 0, 1 ) end - self.motorLoad = math.max( 0, self.maxMotorTorque * Utils.clamp( 1 - ( 1 - self.motorLoadP )^gearboxMogli.motorLoadExp, 0, 1 ) - self.neededPtoTorque / self.ptoMotorRpmRatio ) + local mlf = Utils.clamp( 1 - ( 1 - self.motorLoadP )^gearboxMogli.motorLoadExp, 0, 1 ) + if self.vehicle.mrGbML.gearShiftingNeeded == 2 + or ( self.vehicle.mrGbML.gearShiftingNeeded > 0 and self.vehicle.mrGbML.doubleClutch ) + or self.vehicle.mrGbML.gearShiftingNeeded < 0 then + mlf = 1 + end + if not lastNoTransmission + and self.nonClampedMotorRpm > self.prevNonClampedMotorRpm + self.maxRpmIncrease - gearboxMogli.eps then + mlf = math.max( 0.9 * accelerationPedal, mlf ) + end + self.motorLoad = math.max( 0, self.maxMotorTorque * mlf - self.neededPtoTorque / self.ptoMotorRpmRatio ) local wheelLoad = math.abs( self.usedTransTorque * self:getGearRatio() ) if self.wheelLoadS == nil then @@ -7602,6 +7665,10 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.rpmIncFactor = self.rpmIncFactor + self.vehicle.mrGbML.smoothMedium * ( r - self.rpmIncFactor ) self.maxRpmIncrease = self.tickDt * self.rpmIncFactor +--********************************************************************************************************** + local oldAccTimer = self.hydroAccTimer + self.hydroAccTimer = nil + --********************************************************************************************************** -- no transmission / neutral --********************************************************************************************************** @@ -7795,7 +7862,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) --********************************************************************************************************** -- during gear shift with automatic clutch if self.vehicle.mrGbML.gearShiftingNeeded == 2 and g_currentMission.time < self.vehicle.mrGbML.gearShiftingTime then - if self.lastRealMotorRpm > 0.9 * self.vehicle.mrGbMS.RatedRpm then + if self.lastRealMotorRpm > 0.97 * self.vehicle.mrGbMS.RatedRpm then self.vehicle.mrGbML.gearShiftingNeeded = 3 end accelerationPedal = 1 @@ -8064,14 +8131,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) local r = self:getMogliGearRatio() local w = w0 * r - local oldAccTimer = self.hydroAccTimer - self.hydroAccTimer = nil if accelerationPedal >= gearboxMogli.accDeadZone and gearboxMogli.accHydrostaticFactor > 0 then - hAcc = accelerationPedal * gearboxMogli.accHydrostaticFactor * r / gearboxMogli.maxHydroGearRatio - self.hydroAccTimer = Utils.getNoNil( oldAccTimer, g_currentMission.time + 3000 ) + hAcc = accelerationPedal * gearboxMogli.accHydrostaticFactor * r + self.hydroAccTimer = Utils.getNoNil( oldAccTimer, g_currentMission.time + gearboxMogli.accHydrostaticTimer ) if hMin < hAcc then if g_currentMission.time < self.hydroAccTimer then - local f = 1 - ( self.hydroAccTimer - g_currentMission.time ) / 3000 + local f = 1 - ( self.hydroAccTimer - g_currentMission.time ) / gearboxMogli.accHydrostaticTimer hMin = hMin + f * ( hAcc - hMin ) else hMin = hAcc @@ -8367,7 +8432,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) priority = 0 else --skip = true - priority = 4 + priority = 10 end -- keep the complete range!!! @@ -8443,36 +8508,38 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) * self.vehicle.mrGbMS.Ranges[p.range1].ratio * self.vehicle.mrGbMS.Ranges2[p.range2].ratio p.isCurrent = true - p.timeToShift = 0 + p.timeToShiftMax = 0 + p.timeToShiftSum = 0 - pts = 0 - if p.gear ~= self.vehicle.mrGbMS.CurrentGear then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftGear ) - - if self.vehicle.mrGbMS.GearTimeToShiftGear > self.vehicle.mrGbMS.GearTimeToShiftHl + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftGear > self.vehicle.mrGbMS.GearTimeToShiftRanges2 + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftGear ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftGear + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriorityG ) end if p.range1 ~= self.vehicle.mrGbMS.CurrentRange then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftHl ) - - if self.vehicle.mrGbMS.GearTimeToShiftHl > self.vehicle.mrGbMS.GearTimeToShiftGear + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftHl > self.vehicle.mrGbMS.GearTimeToShiftRanges2 + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftHl ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftHl + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriorityR ) end if p.range2 ~= self.vehicle.mrGbMS.CurrentRange2 then - p.isCurrent = false - p.timeToShift = math.max( p.timeToShift, self.vehicle.mrGbMS.GearTimeToShiftRanges2 ) - - if self.vehicle.mrGbMS.GearTimeToShiftRanges2 > self.vehicle.mrGbMS.GearTimeToShiftGear + gearboxMogli.eps then pts = pts + 1 end - if self.vehicle.mrGbMS.GearTimeToShiftRanges2 > self.vehicle.mrGbMS.GearTimeToShiftHl + gearboxMogli.eps then pts = pts + 1 end + p.isCurrent = false + p.timeToShiftMax = math.max( p.timeToShiftMax, self.vehicle.mrGbMS.GearTimeToShiftRanges2 ) + p.timeToShiftSum = p.timeToShiftSum + self.vehicle.mrGbMS.GearTimeToShiftRanges2 + p.priority = math.max( p.priority, self.vehicle.mrGbMS.AutoShiftPriority2 ) + end + + if p.priority == 1 and p.timeToShiftMax <= self.vehicle.mrGbMG.maxTimeToSkipGear then + p.priority = 0 end - p.priority = math.max( p.priority, pts ) + if p.gearSpeed < self.vehicle.mrGbMS.LaunchGearSpeed - gearboxMogli.eps then + p.priority = math.max( p.priority, 3 ) + end - if minTimeToShift > p.timeToShift then - minTimeToShift = p.timeToShift + if minTimeToShift > p.timeToShiftMax then + minTimeToShift = p.timeToShiftMax end table.insert( tmp, p ) @@ -8482,7 +8549,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) end local function sortGears( a, b ) - for _,comp in pairs( {"gearSpeed","timeToShift","gear","range1","range2"} ) do + for _,comp in pairs( {"gearSpeed","timeToShiftMax","gear","range1","range2"} ) do if a[comp] < b[comp] - gearboxMogli.eps then return true elseif a[comp] > b[comp] + gearboxMogli.eps then @@ -8521,7 +8588,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) upTimerMode = 0 elseif self.clutchOverheatTimer ~= nil and self.clutchPercent < 0.9 - and self.clutchOverheatTimer > 0.8 * self.vehicle.mrGbMS.ClutchOverheatStartTime then + and self.clutchOverheatTimer > 0.5 * self.vehicle.mrGbMS.ClutchOverheatStartTime then downTimerMode = 0 elseif self.clutchRpm < downRpm then -- allow down shift after short timeout @@ -8551,43 +8618,60 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) p.rpmLo = p.rpmHi --**********************************************************************************-- -- estimate speed lost: 5.4 km/h lost at wheelLoad above 50 kNm for every 800 ms - if p.timeToShift > 0 and p.gearSpeed > 0 and self.maxMotorTorque > 0 then + if p.timeToShiftMax > 0 and p.gearSpeed > 0 and self.maxMotorTorque > 0 and p.rpmHi <= upRpm then -- rpmLo can become negative !!! - p.rpmLo = p.rpmHi - p.timeToShift * 0.00125 * Utils.clamp( self.wheelLoadS * 0.02, 0, 1 ) * self.vehicle.mrGbMS.RatedRpm / p.gearSpeed + p.rpmLo = p.rpmHi - p.timeToShiftMax * 0.00125 * Utils.clamp( self.wheelLoadS * 0.02, 0, 1 ) * self.vehicle.mrGbMS.RatedRpm / p.gearSpeed + + p.rpmLo = math.max( 0.5 * p.rpmHi, p.rpmLo ) + --if p.rpmHi >= downRpm and p.rpmLo < downRpm then p.rpmLo = downRpm end end local isValidEntry = true - if downRpm <= rpmC and rpmC <= upRpm + if downRpm <= rpmC and rpmC <= upRpm and p.rpmLo + gearboxMogli.eps < rpmC and rpmC < p.rpmHi - gearboxMogli.eps - and p.timeToShift > self.vehicle.mrGbMG.maxTimeToSkipGear then + and p.timeToShiftMax > self.vehicle.mrGbMG.maxTimeToSkipGear then -- the current gear is still valud => keep it - isValidEntry = false + p.priority = math.max( p.priority, 8 ) elseif p.rpmHi < rpmC and rpmC < downRpm then -- the current gear is better than the new onw - isValidEntry = false + p.priority = math.max( p.priority, 9 ) elseif p.rpmHi > rpmC and rpmC > upRpm then -- the current gear is better than the new onw - isValidEntry = false + p.priority = math.max( p.priority, 9 ) end - if p.gearSpeed > maxDcSpeed - or p.gearSpeed < self.vehicle.mrGbMG.minAutoGearSpeed then - isValidEntry = false + -- no down shift if just idling + if accelerationPedal < gearboxMogli.accDeadZone + and downTimerMode > 0 + and p.gearSpeed < self.vehicle.mrGbMS.LaunchGearSpeed - gearboxMogli.eps + and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed + and self.stallWarningTimer == nil + then + --isValidEntry = false + p.priority = 10 + end + + if p.gearSpeed < self.vehicle.mrGbMG.minAutoGearSpeed then + p.priority = 10 + end + + if p.gearSpeed > maxDcSpeed then + p.priority = 10 end if self.vehicle.cruiseControl.state > 0 and p.gearSpeed * self.vehicle.mrGbMS.IdleRpm > currentSpeedLimit * self.vehicle.mrGbMS.RatedRpm then - isValidEntry = false + p.priority = 10 end if isValidEntry and not p.isCurrent then if self.deltaRpm < -gearboxMogli.autoShiftMaxDeltaRpm - and p.gearSpeed > self.vehicle.mrGbML.currentGearSpeed + gearboxMogli.eps then + and p.gearSpeed > self.vehicle.mrGbML.currentGearSpeed + gearboxMogli.eps then isValidEntry = false elseif self.deltaRpm > gearboxMogli.autoShiftMaxDeltaRpm - and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed - gearboxMogli.eps then + and p.gearSpeed < self.vehicle.mrGbML.currentGearSpeed - gearboxMogli.eps then isValidEntry = false end end @@ -8611,21 +8695,20 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) else autoShiftTimeout = self.lastClutchClosedTime + self.vehicle.mrGbMS.AutoShiftTimeoutShort end - if autoShiftTimeout + minTimeToShift > g_currentMission.time then + if autoShiftTimeout + minTimeToShift > g_currentMission.time then isValidEntry = false - elseif autoShiftTimeout + p.timeToShift > g_currentMission.time then - p.priority = 3 + elseif autoShiftTimeout + p.timeToShiftSum > g_currentMission.time then + p.priority = math.max( p.priority, 7 ) end end end - if isValidEntry then - -- gear is possible + if isValidEntry or self.vehicle.mrGbMG.debugPrint or gearboxMogli.debugGearShift or self.vehicle.mrGbML.autoShiftInfoPrint then local testRpm testRpm = self:getRpmScore( p.rpmHi, downRpm, upRpm ) if testRpm < 1 and p.rpmLo < p.rpmHi then - testRpm = math.max( testRpm, self:getRpmScore( p.rpmLo, downRpm, upRpm ) ) + testRpm = 0.5 * ( testRpm + self:getRpmScore( p.rpmLo, downRpm, upRpm ) ) end local t1, t2 = 0, 0 @@ -8641,17 +8724,19 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) local testPwr = Utils.clamp( ( self.requestedPower - 0.8 * p.rpmHi * t1 ) / self.currentMaxPower, 0, 1 ) if p.rpmLo < p.rpmHi then - testPwr = math.max( testPwr, Utils.clamp( ( self.requestedPower - 0.8 * p.rpmLo * t2 ) / self.currentMaxPower, 0, 1 ) ) + testPwr = 0.5 * ( testPwr + Utils.clamp( ( self.requestedPower - 0.8 * p.rpmLo * t2 ) / self.currentMaxPower, 0, 1 ) ) end if testRpm > 0 then -- reach RPM window - p.score = 3 + testRpm + p.score = 3 + testRpm + -- p.score = 2 + 0.1 * math.min( p.priority, 10 ) + 0.01 * testRpm elseif testPwr > 0 then -- and optimize power afterwards - p.score = 2 + testPwr + --p.score = 2 + testPwr + p.score = 2 + 0.1 * math.min( p.priority, 10 ) + 0.01 * testPwr elseif p.priority > 0 then - -- gear to be skipped => only relevant if it is the only gear that fits + -- sort by priority p.score = 1 + 0.1 * math.min( p.priority, 10 ) else -- optimize fuel usage ratio @@ -8662,7 +8747,10 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) -- p.score = p.score * ( 1 + 0.14 * ( self.motorLoadS - 0.3 ) ) end end - + end + + if isValidEntry then + -- gear is possible if bestScore == nil or bestScore > p.score or ( math.abs( bestScore - p.score ) < 1e-4 @@ -8894,8 +8982,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) else self.lastThrottle = math.max( self.vehicle.mrGbMS.HandThrottle, accelerationPedal ) end + local f = 1 + if self.vehicle.mrGbML.gearShiftingNeeded > 0 then + f = 2 + end if self.lastThrottle > 0 and self.lastThrottle > ( self.lastMotorRpm / self.maxRpm ) then - self.lastMotorRpm = Utils.clamp( self.lastMotorRpm + 5 * self.lastThrottle * self.tickDt * self.vehicle.mrGbMS.RpmIncFactor, + self.lastMotorRpm = Utils.clamp( self.lastMotorRpm + f * self.lastThrottle * self.tickDt * self.vehicle.mrGbMS.RpmIncFactor, self.minRequiredRpm, self:getThrottleMaxRpm( ) ) else @@ -9026,7 +9118,7 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) self.maxPossibleRpm = self.vehicle.mrGbMS.CurMaxRpm end - if self.vehicle.mrGbML.afterShiftRpm ~= nil and self.vehicle.mrGbML.gearShiftingEffect then + if self.vehicle.mrGbML.afterShiftRpm ~= nil then -- and self.vehicle.mrGbML.gearShiftingEffect then if self.maxPossibleRpm > self.vehicle.mrGbML.afterShiftRpm then self.maxPossibleRpm = self.vehicle.mrGbML.afterShiftRpm self.vehicle.mrGbML.afterShiftRpm = self.vehicle.mrGbML.afterShiftRpm + self.maxRpmIncrease @@ -9035,7 +9127,12 @@ function gearboxMogliMotor:mrGbMUpdateGear( accelerationPedal ) end end end - + + if self.vehicle.mrGbML.afterShiftRpm ~= nil and self.vehicle.mrGbML.gearShiftingEffect and not self.noTransmission then + self.lastMotorRpm = self.vehicle.mrGbML.afterShiftRpm + self.vehicle.mrGbML.gearShiftingEffect = false + end + --********************************************************************************************************** -- do not cut torque in case of open clutch or torque converter if self.clutchPercent < 1 and self.maxPossibleRpm < self.vehicle.mrGbMS.CloseRpm then @@ -9179,7 +9276,7 @@ function gearboxMogliMotor:getClutchPercent( targetRpm, openRpm, closeRpm, fromP end end - if self.vehicle.mrGbMG.debugPrint + if gearboxMogli.debugGearShift and self.autoClutchPercent < self.vehicle.mrGbMS.MaxClutchPercent and fromPercent ~= nil and toPercent ~= nil then @@ -9303,7 +9400,7 @@ function gearboxMogliMotor:getDampingRate() -- r = self.clutchPercent * r --end --return math.max( 1e-20, r ) - return 0.7 * self:getRotInertia() + return self.vehicle.mrGbMG.inertiaToDampingRatio * self:getRotInertia() end --********************************************************************************************************** diff --git a/src/tempomatMogli.lua b/src/tempomatMogli.lua index b8e9874..b98ab57 100644 --- a/src/tempomatMogli.lua +++ b/src/tempomatMogli.lua @@ -7,7 +7,7 @@ -- --*************************************************************** -local tempomatMogliVersion=1.700 +local tempomatMogliVersion=1.701 -- allow modders to include this source file together with mogliBase.lua in their mods if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version < tempomatMogliVersion then @@ -16,7 +16,7 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version if _G[g_currentModName..".mogliBase"] == nil then source(Utils.getFilename("mogliBase.lua", g_currentModDirectory)) end - _G[g_currentModName..".mogliBase"].newClass( "tempomatMogli", "tempomatMogliV14" ) + _G[g_currentModName..".mogliBase"].newClass( "tempomatMogli", "tempomatMogliV17" ) --*************************************************************** tempomatMogli.version = tempomatMogliVersion @@ -27,26 +27,27 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version --********************************************************************************************************** function tempomatMogli:load(xmlFile) -- state - self.tempomatMogliV14 = {} + self.tempomatMogliV17 = {} - self.tempomatMogliV14.baseSpeed1 = 50 - self.tempomatMogliV14.baseSpeed2 = 10 - self.tempomatMogliV14.baseSpeed3 = 30 + self.tempomatMogliV17.baseSpeed1 = 50 + self.tempomatMogliV17.baseSpeed2 = 10 + self.tempomatMogliV17.baseSpeed3 = 30 if self.motor ~= nil and self.motor.maxForwardSpeed ~= nil then - self.tempomatMogliV14.baseSpeed1 = math.floor( self.motor.maxForwardSpeed * 3.6 + 0.5 ) - if self.tempomatMogliV14.baseSpeed1 < 20 then - self.tempomatMogliV14.baseSpeed2 = math.floor( self.motor.maxForwardSpeed * 1.25 + 0.5 ) - self.tempomatMogliV14.baseSpeed3 = math.floor( self.motor.maxForwardSpeed * 1.80 + 0.5 ) - elseif self.tempomatMogliV14.baseSpeed1 < 30 then - self.tempomatMogliV14.baseSpeed3 = 20 + self.tempomatMogliV17.baseSpeed1 = math.floor( self.motor.maxForwardSpeed * 3.6 + 0.5 ) + if self.tempomatMogliV17.baseSpeed1 < 20 then + self.tempomatMogliV17.baseSpeed2 = math.floor( self.motor.maxForwardSpeed * 1.25 + 0.5 ) + self.tempomatMogliV17.baseSpeed3 = math.floor( self.motor.maxForwardSpeed * 1.80 + 0.5 ) + elseif self.tempomatMogliV17.baseSpeed1 < 30 then + self.tempomatMogliV17.baseSpeed3 = 20 end end - tempomatMogli.registerState( self, "SpeedLimit2", self.tempomatMogliV14.baseSpeed2 ) - tempomatMogli.registerState( self, "SpeedLimit3", self.tempomatMogliV14.baseSpeed3 ) + tempomatMogli.registerState( self, "SpeedLimit2", self.tempomatMogliV17.baseSpeed2 ) + tempomatMogli.registerState( self, "SpeedLimit3", self.tempomatMogliV17.baseSpeed3 ) tempomatMogli.registerState( self, "KeepSpeed", false ) - self.tempomatMogliV14.modName = l_currentModName + tempomatMogli.registerState( self, "SpeedLimit", -1 ) + self.tempomatMogliV17.modName = l_currentModName self.tempomatMogliSetSpeedLimit = tempomatMogli.tempomatMogliSetSpeedLimit self.tempomatMogliGetSpeedLimit = tempomatMogli.tempomatMogliGetSpeedLimit @@ -71,27 +72,53 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version self:tempomatMogliSetSpeedLimit() elseif tempomatMogli.mbHasInputEvent( "gearboxMogliSWAPSPEED" ) then -- speed limiter self:tempomatMogliSwapSpeedLimit() - end + end tempomatMogli.mbSetState( self, "KeepSpeed", tempomatMogli.mbIsInputPressed( "gearboxMogliKEEPSPEED" ) ) else tempomatMogli.mbSetState( self, "KeepSpeed", false ) end if self.isServer and self.cruiseControl ~= nil then - if self.cruiseControl.state == Drivable.CRUISECONTROL_STATE_ACTIVE - or ( self.movingDirection <= 0 - and ( self.mrGbMS == nil or not ( self.mrGbMS.IsOn ) ) ) then - self.tempomatMogliV14.keepSpeedLimit = nil - elseif self.tempomatMogliV14.KeepSpeed then - if self.tempomatMogliV14.keepSpeedLimit == nil then - self.tempomatMogliV14.lastAxisFoward = 0 - self.tempomatMogliV14.keepSpeedLimit = math.max( self.lastSpeedReal*3600, tempomatMogli.getMinSpeed( self, true ) ) + if self.movingDirection <= 0 and ( self.mrGbMS == nil or not ( self.mrGbMS.IsOn ) ) then + self.tempomatMogliV17.keepSpeedLimit = nil + elseif self.tempomatMogliV17.KeepSpeed then + if self.tempomatMogliV17.keepSpeedLimit == nil then + self.tempomatMogliV17.lastAxisFoward = 0 + self.tempomatMogliV17.keepSpeedLimit = math.max( self.lastSpeedReal*3600, tempomatMogli.getMinSpeed( self, true ) ) end - elseif self.tempomatMogliV14.keepSpeedLimit ~= nil then - self.tempomatMogliV14.keepSpeedLimit = nil + elseif self.tempomatMogliV17.keepSpeedLimit ~= nil then + self.tempomatMogliV17.keepSpeedLimit = nil + end + + if self.tempomatMogliV17.keepSpeedLimit ~= nil then + local s = math.floor( self.tempomatMogliV17.keepSpeedLimit + 0.5 ) + tempomatMogli.mbSetState( self, "SpeedLimit", s ) end else - self.tempomatMogliV14.keepSpeedLimit = nil + self.tempomatMogliV17.keepSpeedLimit = nil + end + + if self.tempomatMogliV17.KeepSpeed then + if self.tempomatMogliV17.cruiseControlState == nil then + self.tempomatMogliV17.cruiseControlSpeed = self.cruiseControl.speed + self.tempomatMogliV17.cruiseControlState = self.cruiseControl.state + end + + if self.tempomatMogliV17.SpeedLimit > 0 then + self.cruiseControl.speed = self.tempomatMogliV17.SpeedLimit + self.cruiseControl.state = Drivable.CRUISECONTROL_STATE_ACTIVE + else + self.cruiseControl.state = Drivable.CRUISECONTROL_STATE_OFF + end + elseif self.tempomatMogliV17.cruiseControlState ~= nil then + self.cruiseControl.speed = self.tempomatMogliV17.cruiseControlSpeed + self.cruiseControl.state = self.tempomatMogliV17.cruiseControlState + if self.cruiseControlHud ~= nil and self.tempomatMogliV17.SpeedLimit > 0 then + VehicleHudUtils.setHudValue(self, self.cruiseControlHud, self.cruiseControl.speed, 9999); + end + + self.tempomatMogliV17.cruiseControlSpeed = nil + self.tempomatMogliV17.cruiseControlState = nil end end @@ -164,10 +191,10 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:newUpdateVehiclePhysics --********************************************************************************************************** function tempomatMogli:newUpdateVehiclePhysics( superFunc, axisForward, axisForwardIsAnalog, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) - if self.tempomatMogliV14 == nil - or self.tempomatMogliV14.keepSpeedLimit == nil - or self.tempomatMogliV14.modName == nil - or self.tempomatMogliV14.modName ~= l_currentModName then + if self.tempomatMogliV17 == nil + or self.tempomatMogliV17.keepSpeedLimit == nil + or self.tempomatMogliV17.modName == nil + or self.tempomatMogliV17.modName ~= l_currentModName then return superFunc( self, axisForward, axisForwardIsAnalog, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) end @@ -181,22 +208,22 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- accelerate by 0.5..2 m/s^2 local acc = 2 - math.min( 1.5, currentSpeed * 0.05 ) - if self.tempomatMogliV14.keepSpeedLimit < currentSpeed + 2 then - --self.tempomatMogliV14.keepSpeedLimit = math.min( math.max( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0036, tempomatMogli.getMaxSpeed( self, true ) ) - self.tempomatMogliV14.keepSpeedLimit = math.max( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0036 * acc + if self.tempomatMogliV17.keepSpeedLimit < currentSpeed + 2 then + --self.tempomatMogliV17.keepSpeedLimit = math.min( math.max( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0036, tempomatMogli.getMaxSpeed( self, true ) ) + self.tempomatMogliV17.keepSpeedLimit = math.max( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0036 * acc end elseif axisForward >= 0.2 then -- decelerate by 2..4 m/s^2 local acc = Utils.clamp( currentSpeed * 0.05, 2, 4 ) - if self.tempomatMogliV14.keepSpeedLimit > currentSpeed - 2 then - self.tempomatMogliV14.keepSpeedLimit = math.max( math.min( currentSpeed, self.tempomatMogliV14.keepSpeedLimit ) - axisForward * dt * 0.0072 * acc, 1 ) + if self.tempomatMogliV17.keepSpeedLimit > currentSpeed - 2 then + self.tempomatMogliV17.keepSpeedLimit = math.max( math.min( currentSpeed, self.tempomatMogliV17.keepSpeedLimit ) - axisForward * dt * 0.0072 * acc, 1 ) end end local temp1 = self.motor.speedLimit - self.motor.speedLimit = math.min( temp1, self.tempomatMogliV14.keepSpeedLimit ) + self.motor.speedLimit = math.min( temp1, self.tempomatMogliV17.keepSpeedLimit ) superFunc( self, -1, false, axisSide, axisSideIsAnalog, doHandbrake, dt, ... ) self.motor.speedLimit = temp1 end @@ -229,6 +256,9 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:tempomatMogliSetSpeedLimit --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit( ) + if self.tempomatMogliV17.lastSpeedLimit ~= nil then + return self.tempomatMogliV17.lastSpeedLimit + end return self.cruiseControl.speed end @@ -236,23 +266,23 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version -- tempomatMogli:tempomatMogliSetSpeedLimit2 --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit2( ) - return self.tempomatMogliV14.SpeedLimit2 + return self.tempomatMogliV17.SpeedLimit2 end --********************************************************************************************************** -- tempomatMogli:tempomatMogliSetSpeedLimit2 --********************************************************************************************************** function tempomatMogli:tempomatMogliGetSpeedLimit3( ) - return self.tempomatMogliV14.SpeedLimit3 + return self.tempomatMogliV17.SpeedLimit3 end --********************************************************************************************************** -- tempomatMogli:tempomatMogliSwapSpeedLimit --********************************************************************************************************** function tempomatMogli:tempomatMogliSwapSpeedLimit( noEventSend ) - local speed1 = self.tempomatMogliV14.SpeedLimit2 - local speed2 = self.tempomatMogliV14.SpeedLimit3 - local speed3 = self.cruiseControl.speed + local speed1 = self:tempomatMogliGetSpeedLimit2() + local speed2 = self:tempomatMogliGetSpeedLimit3() + local speed3 = self:tempomatMogliGetSpeedLimit() self:setCruiseControlMaxSpeed(speed1) tempomatMogli.mbSetState( self, "SpeedLimit2", speed2, noEventSend ) tempomatMogli.mbSetState( self, "SpeedLimit3", speed3, noEventSend ) @@ -265,12 +295,12 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version local attributes = "" - if self.tempomatMogliV14 ~= nil then - if math.abs( self.tempomatMogliV14.SpeedLimit2 - self.tempomatMogliV14.baseSpeed2 ) < 1 then - attributes = attributes.." mrGbMSpeed2=\"" .. tostring( self.tempomatMogliV14.SpeedLimit2 ) .. "\"" + if self.tempomatMogliV17 ~= nil then + if math.abs( self.tempomatMogliV17.SpeedLimit2 - self.tempomatMogliV17.baseSpeed2 ) < 1 then + attributes = attributes.." mrGbMSpeed2=\"" .. tostring( self.tempomatMogliV17.SpeedLimit2 ) .. "\"" end - if math.abs( self.tempomatMogliV14.SpeedLimit3 - self.tempomatMogliV14.baseSpeed3 ) < 1 then - attributes = attributes.." mrGbMSpeed3=\"" .. tostring( self.tempomatMogliV14.SpeedLimit3 ) .. "\"" + if math.abs( self.tempomatMogliV17.SpeedLimit3 - self.tempomatMogliV17.baseSpeed3 ) < 1 then + attributes = attributes.." mrGbMSpeed3=\"" .. tostring( self.tempomatMogliV17.SpeedLimit3 ) .. "\"" end end @@ -283,24 +313,24 @@ if tempomatMogli == nil or tempomatMogli.version == nil or tempomatMogli.version function tempomatMogli:loadFromAttributesAndNodes(xmlFile, key, resetVehicles) local i - if self.tempomatMogliV14 ~= nil then + if self.tempomatMogliV17 ~= nil then i = getXMLInt(xmlFile, key .. "#mrGbMSpeed2" ) if i ~= nil then - self.tempomatMogliV14.SpeedLimit2 = i + self.tempomatMogliV17.SpeedLimit2 = i end i = getXMLInt(xmlFile, key .. "#mrGbMSpeed3" ) if i ~= nil then - self.tempomatMogliV14.SpeedLimit3 = i + self.tempomatMogliV17.SpeedLimit3 = i end end - if self.tempomatMogliV14.baseSpeed1 ~= nil then - if math.abs( self.cruiseControl.speed - self.tempomatMogliV14.baseSpeed2 ) < 1 then - self.tempomatMogliV14.SpeedLimit2 = self.tempomatMogliV14.SpeedLimit3 - self.tempomatMogliV14.SpeedLimit3 = self.tempomatMogliV14.baseSpeed1 - elseif math.abs( self.cruiseControl.speed - self.tempomatMogliV14.baseSpeed3 ) < 1 then - self.tempomatMogliV14.SpeedLimit3 = self.tempomatMogliV14.SpeedLimit2 - self.tempomatMogliV14.SpeedLimit2 = self.tempomatMogliV14.baseSpeed1 + if self.tempomatMogliV17.baseSpeed1 ~= nil then + if math.abs( self.cruiseControl.speed - self.tempomatMogliV17.baseSpeed2 ) < 1 then + self.tempomatMogliV17.SpeedLimit2 = self.tempomatMogliV17.SpeedLimit3 + self.tempomatMogliV17.SpeedLimit3 = self.tempomatMogliV17.baseSpeed1 + elseif math.abs( self.cruiseControl.speed - self.tempomatMogliV17.baseSpeed3 ) < 1 then + self.tempomatMogliV17.SpeedLimit3 = self.tempomatMogliV17.SpeedLimit2 + self.tempomatMogliV17.SpeedLimit2 = self.tempomatMogliV17.baseSpeed1 end end