JachyHm

Adhese 460

Oct 9th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.33 KB | None | 0 0
  1. ----------------------------------------ADHESE--------------------------------------------
  2.     --------------Adhese koeficienty----
  3.         typSrazek = SysCall("WeatherController:GetCurrentPrecipitationType")
  4.         intenzitaSrazek = SysCall("WeatherController:GetPrecipitationDensity")
  5.         if typSrazek ~= nil then
  6.             if typSrazek < 3 then --nesnezi
  7.                 if intenzitaSrazek > 0.3 then --prsi hodne
  8.                     if adhese_casdeste == -1 then
  9.                         adhese_casdeste = 0
  10.                     end
  11.                     if adhese_casdeste <= 370 then
  12.                         adhese_casdeste = adhese_casdeste + cas
  13.                     end
  14.                     adhese_caspodesti = -1
  15.                 elseif intenzitaSrazek ~= 0 then --prsi trochenc
  16.                     if adhese_casdeste == -1 then
  17.                         adhese_casdeste = ADHESE_VLHKO_CAS_NABEH
  18.                     end
  19.                     adhese_caspodesti = -1
  20.                 else --neprsi vubec
  21.                     if typSrazek > 0 then
  22.                         if adhese_casdeste == -1 then
  23.                             adhese_casdeste = ADHESE_VLHKO_CAS_NABEH
  24.                         end
  25.                         adhese_caspodesti = -1
  26.                     else
  27.                         if adhese_casdeste ~= -1 then
  28.                             adhese_caspodesti = adhese_casdeste*10
  29.                             adhese_casdeste = -1
  30.                         end
  31.                         if adhese_caspodesti > 0 then
  32.                             adhese_caspodesti = adhese_caspodesti - cas
  33.                         else
  34.                             adhese_caspodesti = -1
  35.                         end
  36.                     end
  37.                 end
  38.                 --defaultne adhese za sucha
  39.                 ambientAdhesion = ADHESE_SUCHO
  40.                 if adhese_casdeste ~= -1 then --pokud prsi
  41.                     if adhese_casdeste < ADHESE_VLHKO_CAS_NABEH then --a prsi mene jak ADHESE_VLHKO_CAS_NABEH (70 vterin) - adhese se znizuje az na ADHESE_VLHKO_START (0.5)
  42.                         ambientAdhesion = ADHESE_SUCHO - (ADHESE_SUCHO-ADHESE_VLHKO_START)*(adhese_casdeste/ADHESE_VLHKO_CAS_NABEH)
  43.                     elseif adhese_casdeste < ADHESE_VLHKO_CAS_SNIZENI then --nebo prsi mene jak ADHESE_VLHKO_CAS_SNIZENI (370 vterin) - adhese se zvysuje na ADHESE_VLHKO (0.7)
  44.                         ambientAdhesion = ADHESE_VLHKO_START - (ADHESE_VLHKO_START-ADHESE_VLHKO)*(adhese_casdeste/(ADHESE_VLHKO_CAS_NABEH+ADHESE_VLHKO_CAS_SNIZENI))
  45.                     else --jinak uz je adhese stala ADHESE_VLHKO (0.7)
  46.                         ambientAdhesion = ADHESE_VLHKO
  47.                     end
  48.                 elseif adhese_caspodesti ~= -1 then --pokud prselo pred mene jak 10 minutami, adhese se zvysuje od aktualni k ADHESE_SUCHO (0.9)
  49.                     if sourceAdhesion == -1 then
  50.                         sourceAdhesion = ambientAdhesion
  51.                     end
  52.                     ambientAdhesion = sourceAdhesion - (sourceAdhesion-ADHESE_SUCHO)*(adhese_caspodesti/ADHESE_VLHKO_PODESTI)
  53.                 end
  54.             else --snezi, tak nejsou casy deste
  55.                 adhese_casdeste = -1
  56.                 adhese_caspodesti = -1
  57.                 ambientAdhesion = ADHESE_SNIH
  58.             end
  59.         else --nedeje se nic
  60.             adhese_caspodesti = -1
  61.             ambientAdhesion = ADHESE_SUCHO
  62.         end
  63.    
  64.         if adhese_caspodesti == -1 then --pokud uz neprsi vice jak 10*casDeste vynuluj vychozi pocitadla - koleje uz jsou urcite suche
  65.             sourceAdhesion = -1
  66.         end
  67.    
  68.         if SysCall("ScenarioManager:GetSeason") == 3 then --pokud je zima, je snih - sankuje to 2x tolik jak obvykle
  69.             ambientAdhesion = ADHESE_SNIH
  70.         end
  71.    
  72.         if plynuleValce > 0.1 and rychlostKolaKMHPodvozek1 > 5 then
  73.             if brakeAdhesionAdditionPodvozek1 < 0.15 then
  74.                 brakeAdhesionAdditionPodvozek1 = brakeAdhesionAdditionPodvozek1 + 0.25*cas
  75.             else
  76.                 brakeAdhesionAdditionPodvozek1 = 0.15
  77.             end
  78.         else
  79.             if brakeAdhesionAdditionPodvozek1 > 0 then
  80.                 brakeAdhesionAdditionPodvozek1 = (brakeAdhesionAdditionPodvozek1 - 0.00333*cas)
  81.             else
  82.                 brakeAdhesionAdditionPodvozek1 = 0
  83.             end
  84.         end
  85.    
  86.         if plynuleValce_bezBP > 0.1 and rychlostKolaKMHPodvozek2 > 5 then
  87.             if brakeAdhesionAdditionPodvozek2 < 0.15 then
  88.                 brakeAdhesionAdditionPodvozek2 = brakeAdhesionAdditionPodvozek2 + 0.25*cas
  89.             else
  90.                 brakeAdhesionAdditionPodvozek2 = 0.15
  91.             end
  92.         else
  93.             if brakeAdhesionAdditionPodvozek2 > 0 then
  94.                 brakeAdhesionAdditionPodvozek2 = (brakeAdhesionAdditionPodvozek2 - 0.00333*cas)
  95.             else
  96.                 brakeAdhesionAdditionPodvozek2 = 0
  97.             end
  98.         end
  99.    
  100.         decisiveAdhesionPodvozek1 = ambientAdhesion + brakeAdhesionAdditionPodvozek1
  101.         decisiveAdhesionPodvozek2 = ambientAdhesion + brakeAdhesionAdditionPodvozek2
  102.    
  103.         if adheseRandomCtdnPodvozek1 > 0 then
  104.             if math.abs(Call("GetSpeed")) > 0.1 and math.abs(Call("GetSpeed")) < 15 and intenzitaSrazek ~= 0 then
  105.                 adheseRandomCtdnPodvozek1 = adheseRandomCtdnPodvozek1 - cas
  106.             end
  107.             adheseRandomLenCtuPodvozek1 = 0
  108.         elseif adheseRandomLenCtuPodvozek1 < 1 then
  109.             decisiveAdhesionPodvozek1 = decisiveAdhesionPodvozek1 * 0.7
  110.             adheseRandomLenCtuPodvozek1 = adheseRandomLenCtuPodvozek1 + cas
  111.         else
  112.             adheseRandomCtdnPodvozek1 = math.random(40,200)
  113.         end
  114.        
  115.         if adheseRandomCtdnPodvozek2 > 0 then
  116.             if math.abs(Call("GetSpeed")) > 0.1 and math.abs(Call("GetSpeed")) < 15 and intenzitaSrazek ~= 0 then
  117.                 adheseRandomCtdnPodvozek2 = adheseRandomCtdnPodvozek2 - cas
  118.             end
  119.             adheseRandomLenCtuPodvozek2 = 0
  120.         elseif adheseRandomLenCtuPodvozek2 < 1 then
  121.             decisiveAdhesionPodvozek2 = decisiveAdhesionPodvozek2 * 0.7
  122.             adheseRandomLenCtuPodvozek2 = adheseRandomLenCtuPodvozek2 + cas
  123.         else
  124.             adheseRandomCtdnPodvozek2 = math.random(40,200)
  125.         end
  126.    
  127.     --------------Adheze a skluz--------
  128.         output_kN = VratTCh(Call("GetControlValue","VykonPredTrCh",0),Call("GetSpeed"))*gAbsolutniMax_kN
  129.         positiveTractiveEffortForWheelslip = math.max(output_kN,0)
  130.         negativeTractiveEffortForWheelslip = math.abs(math.min(output_kN,0)/math.min(pocetZapnutychVozu, pocetMG))+plynuleValce/3.8*100*max_tbc+200*Call("GetControlValue", "HandBrake", 0)
  131.         if fiktivniVykonNaRizeneNeschopne then
  132.             positiveTractiveEffortForWheelslip = 0
  133.             negativeTractiveEffortForWheelslip = 0
  134.         end
  135.         tractiveEffortForWheelslip = math.abs(positiveTractiveEffortForWheelslip-negativeTractiveEffortForWheelslip)
  136.        
  137.         adhesiveTractiveForcePodvozek1 = ((7500)/(rychlost+44)+161)*0.001*9.81*decisiveAdhesionPodvozek1*64
  138.    
  139.         if positiveTractiveEffortForWheelslip > negativeTractiveEffortForWheelslip then
  140.             cilovaRychlostKolaPodvozek1 = math.abs(Call("GetSpeed"))+math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek1)
  141.         else
  142.             cilovaRychlostKolaPodvozek1 = math.max(math.abs(Call("GetSpeed"))-(math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek1)^2),0)
  143.         end
  144.    
  145.         if tractiveEffortForWheelslip > adhesiveTractiveForcePodvozek1 then
  146.             koefSpeedChange = 5
  147.         else
  148.             koefSpeedChange = 7*math.max(1,plynuleValce)
  149.         end
  150.    
  151.         if cilovaRychlostKolaPodvozek1 > rychlostKolaPodvozek1 then
  152.             rychlostKolaPodvozek1 = math.min(rychlostKolaPodvozek1 + math.sqrt(cilovaRychlostKolaPodvozek1-rychlostKolaPodvozek1)*cas*koefSpeedChange, cilovaRychlostKolaPodvozek1)
  153.         else
  154.             rychlostKolaPodvozek1 = math.max(rychlostKolaPodvozek1 - math.sqrt(rychlostKolaPodvozek1-cilovaRychlostKolaPodvozek1)*cas*koefSpeedChange, cilovaRychlostKolaPodvozek1)
  155.         end
  156.         if math.abs(rychlostKolaPodvozek1 - cilovaRychlostKolaPodvozek1) < 0.5 then
  157.             rychlostKolaPodvozek1 = cilovaRychlostKolaPodvozek1
  158.         end
  159.         rychlostKolaKMHPodvozek1 = rychlostKolaPodvozek1*3.6
  160.    
  161.         if math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek1) > 5 then
  162.             if positiveTractiveEffortForWheelslip < negativeTractiveEffortForWheelslip then
  163.                 output_kN = output_kN*0.63245553203367586639977870888654
  164.                 actualTBC = actualTBC*0.63245553203367586639977870888654
  165.             else
  166.                 output_kN = output_kN*0.22360679774997896964091736687313
  167.             end
  168.         end
  169.        
  170.         adhesiveTractiveForcePodvozek2 = ((7500)/(rychlost+44)+161)*0.001*9.81*decisiveAdhesionPodvozek2*64
  171.    
  172.         if positiveTractiveEffortForWheelslip > negativeTractiveEffortForWheelslip then
  173.             cilovaRychlostKolaPodvozek2 = math.abs(Call("GetSpeed"))+math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek2)
  174.         else
  175.             cilovaRychlostKolaPodvozek2 = math.max(math.abs(Call("GetSpeed"))-(math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek2)^2),0)
  176.         end
  177.    
  178.         if tractiveEffortForWheelslip > adhesiveTractiveForcePodvozek2 then
  179.             koefSpeedChange = 5
  180.         else
  181.             koefSpeedChange = 7
  182.         end
  183.    
  184.         if cilovaRychlostKolaPodvozek2 > rychlostKolaPodvozek2 then
  185.             rychlostKolaPodvozek2 = math.min(rychlostKolaPodvozek2 + math.sqrt(cilovaRychlostKolaPodvozek2-rychlostKolaPodvozek2)*cas*koefSpeedChange,cilovaRychlostKolaPodvozek2)
  186.         else
  187.             rychlostKolaPodvozek2 = math.max(rychlostKolaPodvozek2 - math.sqrt(rychlostKolaPodvozek2-cilovaRychlostKolaPodvozek2)*cas*koefSpeedChange,cilovaRychlostKolaPodvozek2)
  188.         end
  189.         if math.abs(rychlostKolaPodvozek2 - cilovaRychlostKolaPodvozek2) < 0.5 then
  190.             rychlostKolaPodvozek2 = cilovaRychlostKolaPodvozek2
  191.         end
  192.         rychlostKolaKMHPodvozek2 = rychlostKolaPodvozek2*3.6
  193.    
  194.         if math.max(0,tractiveEffortForWheelslip-adhesiveTractiveForcePodvozek2) > 5 then
  195.             if positiveTractiveEffortForWheelslip < negativeTractiveEffortForWheelslip then
  196.                 output_kN = output_kN*0.63245553203367586639977870888654
  197.                 actualTBC = actualTBC*0.63245553203367586639977870888654
  198.             else
  199.                 output_kN = output_kN*0.22360679774997896964091736687313
  200.             end
  201.         end
  202.    
  203.         if rychlostKolaPodvozek1 < 1 and rychlostKolaPodvozek2 < 1 and tractiveEffortForWheelslip > adhesiveTractiveForcePodvozek1+10 then
  204.             output_kN = 0
  205.             actualTBC = 0.2
  206.             obutiVolume = math.min(obutiVolume + cas*math.abs(rychlostKolaKMHPodvozek1-rychlost)/100,1)
  207.         end
  208.    
  209.         if (plynuleValce > 0.1 and tractiveEffortForWheelslip < adhesiveTractiveForcePodvozek1) or rychlostKolaKMHPodvozek1+5 > rychlost then
  210.             obutiVolume = math.max(obutiVolume - cas*plynuleValce/10000,0)
  211.         end
  212.    
  213.         Call("SoundLoziska:SetParameter", "obutiVolume", math.min(obutiVolume, math.max(0.3, 1-((rychlost-40)/60))))
  214.    
  215.         if obutiDistance > 0 then
  216.             if rychlostKolaKMHPodvozek1 > 0.2 then
  217.                 obutiDistance = obutiDistance - cas*rychlostKolaPodvozek1
  218.             end
  219.         else
  220.             obutiDistance = 2.4772805742778301026860760754598+obutiDistance
  221.             obuti = 1-obuti
  222.         end
  223.         Call("SoundLoziska:SetParameter", "obuti", obuti)
  224.        
  225.         if plynuleValce_bezBP < 0.05 then
  226.             Call("SetControlValue","TrainBrakeControl",0,0)
  227.         else
  228.             Call("SetControlValue","TrainBrakeControl",0,actualTBC)
  229.         end
  230.         --Call("*:SetParameter", "WheelAbsoluteSpeed", rychlostKolaPodvozek1)
  231.         Call("SoundTMpredni:SetParameter", "WheelAbsoluteSpeed", rychlostKolaKMHPodvozek1)
  232.         Call("SoundTMzadni:SetParameter", "WheelAbsoluteSpeed", rychlostKolaKMHPodvozek2)
  233.         Call("SoundZdrze:SetParameter", "WheelAbsoluteSpeed", rychlostKolaPodvozek1)
  234.         Call("SoundLoziska:SetParameter", "WheelAbsoluteSpeed", rychlostKolaPodvozek1)
  235.     Call("EngineSound:SetParameter", "WheelAbsoluteSpeed", rychlostKolaPodvozek1)
Add Comment
Please, Sign In to add comment