16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-18 20:29:17 +02:00

sound works

sound works 2

sound works 3

sound works

sound works

sound works

sound works

sound works

sound fixes

fix
This commit is contained in:
milek7
2017-08-05 22:18:59 +02:00
parent 06f00ebdeb
commit 08acc60a8b
28 changed files with 1468 additions and 1499 deletions

View File

@@ -31,6 +31,7 @@ http://mozilla.org/MPL/2.0/.
#include "Camera.h" //bo likwidujemy trzęsienie
#include "Console.h"
#include "Traction.h"
#include "sound.h"
// Ra: taki zapis funkcjonuje lepiej, ale może nie jest optymalny
#define vWorldFront Math3D::vector3(0, 0, 1)
@@ -1631,21 +1632,32 @@ TDynamicObject::~TDynamicObject()
// parametrow fizycznych
SafeDelete(Mechanik);
SafeDelete(MoverParameters);
// Ra: wyłączanie dźwięków powinno być dodane w ich destruktorach, ale się
// sypie
/* to też się sypie
for (int i=0;i<MaxAxles;++i)
rsStukot[i].Stop(); //dzwieki poszczegolnych osi
rsSilnik.Stop();
rsWentylator.Stop();
rsPisk.Stop();
rsDerailment.Stop();
sPantUp.Stop();
sPantDown.Stop();
sBrakeAcc.Stop(); //dzwiek przyspieszacza
rsDiesielInc.Stop();
rscurve.Stop();
*/
for (size_t i = 0; i < MaxAxles; i++)
sound_man->destroy_sound(&rsStukot[i]);
sound_man->destroy_sound(&rsSilnik);
sound_man->destroy_sound(&rsWentylator);
sound_man->destroy_sound(&rsPisk);
sound_man->destroy_sound(&rsDerailment);
sound_man->destroy_sound(&rsPrzekladnia);
sound_man->destroy_sound(&sHorn1);
sound_man->destroy_sound(&sHorn2);
sound_man->destroy_sound(&sCompressor);
sound_man->destroy_sound(&sConverter);
sound_man->destroy_sound(&sSmallCompressor);
sound_man->destroy_sound(&sDepartureSignal);
sound_man->destroy_sound(&sTurbo);
sound_man->destroy_sound(&sSand);
sound_man->destroy_sound(&sReleaser);
sound_man->destroy_sound(&sPantUp);
sound_man->destroy_sound(&sPantDown);
sound_man->destroy_sound(&rsDoorOpen);
sound_man->destroy_sound(&rsDoorClose);
sound_man->destroy_sound(&sBrakeAcc);
sound_man->destroy_sound(&rsUnbrake);
sound_man->destroy_sound(&rsDiesielInc);
sound_man->destroy_sound(&rscurve);
/*
delete[] pAnimations; // obiekty obsługujące animację
*/
@@ -3044,7 +3056,8 @@ bool TDynamicObject::Update(double dt, double dt1)
// McZapkie-270202
if (MyTrack->fSoundDistance != -1)
{
if (ObjectDist < rsStukot[0].dSoundAtt * rsStukot[0].dSoundAtt * 15.0)
//m7todo: restore
//if (ObjectDist < rsStukot[0].dSoundAtt * rsStukot[0].dSoundAtt * 15.0)
{
vol = (20.0 + MyTrack->iDamageFlag) / 21;
if (MyTrack->eEnvironment == e_tunnel)
@@ -3079,16 +3092,15 @@ bool TDynamicObject::Update(double dt, double dt1)
// McZapkie-040302
if (i == iAxles - 1)
{
rsStukot[0].Stop();
if (rsStukot[0]) rsStukot[0]->stop();
MoverParameters->AccV +=
0.5 * GetVelocity() / (1 + MoverParameters->Vmax);
}
else
{
rsStukot[i + 1].Stop();
if (rsStukot[i + 1]) rsStukot[i + 1]->stop();
}
rsStukot[i].Play(vol, 0, MechInside,
vPosition); // poprawic pozycje o uklad osi
if (rsStukot[i]) rsStukot[i]->gain(vol).position(vPosition).play(); // poprawic pozycje o uklad osi
if (i == 1)
MoverParameters->AccV -=
0.5 * GetVelocity() / (1 + MoverParameters->Vmax);
@@ -3105,11 +3117,10 @@ bool TDynamicObject::Update(double dt, double dt1)
int flag = MoverParameters->Hamulec->GetSoundFlag();
if ((bBrakeAcc) && (TestFlag(flag, sf_Acc)) && (ObjectDist < 2500))
{
sBrakeAcc->SetVolume(-ObjectDist * 3 - (FreeFlyModeFlag ? 0 : 2000));
sBrakeAcc->Play(0, 0, 0);
sBrakeAcc->SetPan(10000 * sin(ModCamRot));
sBrakeAcc->gain(-ObjectDist * 3 - (FreeFlyModeFlag ? 0 : 2000));
sBrakeAcc->play();
}
if ((rsUnbrake.AM != 0) && (ObjectDist < 5000))
if ((rsUnbrake) && (ObjectDist < 5000))
{
if ((TestFlag(flag, sf_CylU)) &&
((MoverParameters->BrakePress * MoverParameters->MaxBrakePress[3]) > 0.05))
@@ -3120,11 +3131,10 @@ bool TDynamicObject::Update(double dt, double dt1)
MoverParameters->MaxBrakePress[3]),
1);
vol = vol + (FreeFlyModeFlag ? 0 : -0.5) - ObjectDist / 5000;
rsUnbrake.SetPan(10000 * sin(ModCamRot));
rsUnbrake.Play(vol, DSBPLAY_LOOPING, MechInside, GetPosition());
rsUnbrake->loop().gain(vol).position(GetPosition()).play();
}
else
rsUnbrake.Stop();
rsUnbrake->stop();
}
// fragment z EXE Kursa
@@ -3237,8 +3247,8 @@ bool TDynamicObject::Update(double dt, double dt1)
&& ( PantDiff < 0.01 ) ) // tolerancja niedolegania
{
if ((MoverParameters->PantFrontVolt == 0.0) &&
(MoverParameters->PantRearVolt == 0.0))
sPantUp.Play(vol, 0, MechInside, vPosition);
(MoverParameters->PantRearVolt == 0.0) && sPantUp)
sPantUp->gain(vol).position(vPosition).play();
if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na
// pantograf i
// wstawić do GetVoltage()
@@ -3266,8 +3276,8 @@ bool TDynamicObject::Update(double dt, double dt1)
&& ( PantDiff < 0.01 ) )
{
if ((MoverParameters->PantRearVolt == 0.0) &&
(MoverParameters->PantFrontVolt == 0.0))
sPantUp.Play(vol, 0, MechInside, vPosition);
(MoverParameters->PantFrontVolt == 0.0) && sPantUp)
sPantUp->gain(vol).position(vPosition).play();
if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na
// pantograf i
// wstawić do GetVoltage()
@@ -3354,12 +3364,12 @@ bool TDynamicObject::Update(double dt, double dt1)
} // koniec pętli po pantografach
if ((MoverParameters->PantFrontSP == false) && (MoverParameters->PantFrontUp == false))
{
sPantDown.Play(vol, 0, MechInside, vPosition);
sPantDown->gain(vol).position(vPosition).play();
MoverParameters->PantFrontSP = true;
}
if ((MoverParameters->PantRearSP == false) && (MoverParameters->PantRearUp == false))
{
sPantDown.Play(vol, 0, MechInside, vPosition);
sPantDown->gain(vol).position(vPosition).play();
MoverParameters->PantRearSP = true;
}
/*
@@ -3462,24 +3472,24 @@ bool TDynamicObject::Update(double dt, double dt1)
// NBMX Obsluga drzwi, MC: zuniwersalnione
if ((dDoorMoveL < MoverParameters->DoorMaxShiftL) && (MoverParameters->DoorLeftOpened))
{
rsDoorOpen.Play(1, 0, MechInside, vPosition);
rsDoorOpen->position(vPosition).play();
dDoorMoveL += dt1 * 0.5 * MoverParameters->DoorOpenSpeed;
}
if ((dDoorMoveL > 0) && (!MoverParameters->DoorLeftOpened))
{
rsDoorClose.Play(1, 0, MechInside, vPosition);
rsDoorClose->position(vPosition).play();
dDoorMoveL -= dt1 * MoverParameters->DoorCloseSpeed;
if (dDoorMoveL < 0)
dDoorMoveL = 0;
}
if ((dDoorMoveR < MoverParameters->DoorMaxShiftR) && (MoverParameters->DoorRightOpened))
{
rsDoorOpen.Play(1, 0, MechInside, vPosition);
rsDoorOpen->position(vPosition).play();
dDoorMoveR += dt1 * 0.5 * MoverParameters->DoorOpenSpeed;
}
if ((dDoorMoveR > 0) && (!MoverParameters->DoorRightOpened))
{
rsDoorClose.Play(1, 0, MechInside, vPosition);
rsDoorClose->position(vPosition).play();
dDoorMoveR -= dt1 * MoverParameters->DoorCloseSpeed;
if (dDoorMoveR < 0)
dDoorMoveR = 0;
@@ -3658,7 +3668,7 @@ void TDynamicObject::RenderSounds()
if (MoverParameters->Power > 0)
{
if ((rsSilnik.AM != 0)
if ((rsSilnik)
&& ((MoverParameters->Mains)
// McZapkie-280503: zeby dla dumb dzialal silnik na jalowych obrotach
|| (MoverParameters->EngineType == DieselEngine)))
@@ -3666,39 +3676,33 @@ void TDynamicObject::RenderSounds()
if ((fabs(MoverParameters->enrot) > 0.01) ||
(MoverParameters->EngineType == Dumb)) //&& (MoverParameters->EnginePower>0.1))
{
freq = rsSilnik.FM * fabs(MoverParameters->enrot) + rsSilnik.FA;
freq = fabs(MoverParameters->enrot);
if (MoverParameters->EngineType == Dumb)
freq = freq -
0.2 * MoverParameters->EnginePower / (1 + MoverParameters->Power * 1000);
rsSilnik.AdjFreq(freq, dt);
rsSilnik->pitch(freq);
if (MoverParameters->EngineType == DieselEngine)
{
if (MoverParameters->enrot > 0)
{
if (MoverParameters->EnginePower > 0)
vol = rsSilnik.AM * MoverParameters->dizel_fill + rsSilnik.AA;
vol = MoverParameters->dizel_fill;
else
vol =
rsSilnik.AM * fabs(MoverParameters->enrot / MoverParameters->dizel_nmax) +
rsSilnik.AA * 0.9;
fabs(MoverParameters->enrot / MoverParameters->dizel_nmax);
}
else
vol = 0;
}
else if (MoverParameters->EngineType == DieselElectric)
vol = rsSilnik.AM *
(MoverParameters->EnginePower / 1000 / MoverParameters->Power) +
vol = (MoverParameters->EnginePower / 1000 / MoverParameters->Power) +
0.2 * (MoverParameters->enrot * 60) /
(MoverParameters->DElist[MoverParameters->MainCtrlPosNo].RPM) +
rsSilnik.AA;
(MoverParameters->DElist[MoverParameters->MainCtrlPosNo].RPM);
else if (MoverParameters->EngineType == ElectricInductionMotor)
vol = rsSilnik.AM *
(MoverParameters->EnginePower + fabs(MoverParameters->enrot * 2)) +
rsSilnik.AA;
vol = (MoverParameters->EnginePower + fabs(MoverParameters->enrot * 2));
else
vol = rsSilnik.AM * (MoverParameters->EnginePower / 1000 +
fabs(MoverParameters->enrot) * 60.0) +
rsSilnik.AA;
vol = (MoverParameters->EnginePower / 1000 +
fabs(MoverParameters->enrot) * 60.0);
// McZapkie-250302 - natezenie zalezne od obrotow i mocy
if ((vol < 1) && (MoverParameters->EngineType == ElectricSeriesMotor) &&
(MoverParameters->EnginePower < 100))
@@ -3731,11 +3735,11 @@ void TDynamicObject::RenderSounds()
if (enginevolume > 0.0001)
if (MoverParameters->EngineType != DieselElectric)
{
rsSilnik.Play(enginevolume, DSBPLAY_LOOPING, MechInside, GetPosition());
rsSilnik->loop().gain(enginevolume).position(GetPosition()).play();
}
else
{
sConverter.UpdateAF(vol, freq, MechInside, GetPosition());
sConverter->gain(vol).pitch(freq).position(GetPosition());
float fincvol;
fincvol = 0;
@@ -3746,100 +3750,114 @@ void TDynamicObject::RenderSounds()
(MoverParameters->enrot * 60));
fincvol /= (0.05 * MoverParameters->DElist[0].RPM);
};
if (fincvol > 0.02)
rsDiesielInc.Play(fincvol, DSBPLAY_LOOPING, MechInside, GetPosition());
else
rsDiesielInc.Stop();
if (rsDiesielInc)
{
if (fincvol > 0.02)
rsDiesielInc->loop().position(GetPosition()).gain(fincvol).play();
else
rsDiesielInc->stop();
}
}
}
else
rsSilnik.Stop();
rsSilnik->stop();
}
enginevolume = (enginevolume + vol) * 0.5;
if( enginevolume < 0.01 ) {
rsSilnik.Stop();
rsSilnik->stop();
}
if ( ( MoverParameters->EngineType == ElectricSeriesMotor )
|| ( MoverParameters->EngineType == ElectricInductionMotor )
&& ( rsWentylator.AM != 0 ) )
if ( (( MoverParameters->EngineType == ElectricSeriesMotor )
|| ( MoverParameters->EngineType == ElectricInductionMotor ))
&& ( rsWentylator ) )
{
if (MoverParameters->RventRot > 0.1) {
// play ventilator sound if the ventilators are rotating fast enough...
freq = rsWentylator.FM * MoverParameters->RventRot + rsWentylator.FA;
rsWentylator.AdjFreq(freq, dt);
freq = MoverParameters->RventRot;
rsWentylator->pitch(freq);
if( MoverParameters->EngineType == ElectricInductionMotor ) {
vol = rsWentylator.AM * std::sqrt( std::fabs( MoverParameters->dizel_fill ) ) + rsWentylator.AA;
vol = std::sqrt( std::fabs( MoverParameters->dizel_fill ) );
}
else {
vol = rsWentylator.AM * MoverParameters->RventRot + rsWentylator.AA;
vol = MoverParameters->RventRot;
}
rsWentylator.Play(vol, DSBPLAY_LOOPING, MechInside, GetPosition());
rsWentylator->gain(vol).loop().position(GetPosition()).play();
}
else {
// ...otherwise shut down the sound
rsWentylator.Stop();
rsWentylator->stop();
}
}
if (MoverParameters->TrainType == dt_ET40)
if (MoverParameters->TrainType == dt_ET40 && rsPrzekladnia)
{
if (MoverParameters->Vel > 0.1)
{
freq = rsPrzekladnia.FM * (MoverParameters->Vel) + rsPrzekladnia.FA;
rsPrzekladnia.AdjFreq(freq, dt);
vol = rsPrzekladnia.AM * (MoverParameters->Vel) + rsPrzekladnia.AA;
rsPrzekladnia.Play(vol, DSBPLAY_LOOPING, MechInside, GetPosition());
freq = MoverParameters->Vel;
rsPrzekladnia->pitch(freq);
vol = MoverParameters->Vel;
rsPrzekladnia->loop().position(GetPosition()).gain(vol).play();
}
else
rsPrzekladnia.Stop();
rsPrzekladnia->stop();
}
}
// youBy: dzwiek ostrych lukow i ciasnych zwrotek
if ((ts.R * ts.R > 1) && (MoverParameters->Vel > 0))
vol = MoverParameters->AccN * MoverParameters->AccN;
else
vol = 0;
// vol+=(50000/ts.R*ts.R);
if (vol > 0.001)
if (rscurve)
{
rscurve.Play(2 * vol, DSBPLAY_LOOPING, MechInside, GetPosition());
if ((ts.R * ts.R > 1) && (MoverParameters->Vel > 0))
vol = MoverParameters->AccN * MoverParameters->AccN;
else
vol = 0;
// vol+=(50000/ts.R*ts.R);
if (vol > 0.001)
{
rscurve->gain(2 * vol).loop().position(GetPosition()).play();
}
else
rscurve->stop();
}
else
rscurve.Stop();
// McZapkie-280302 - pisk mocno zacisnietych hamulcow - trzeba jeszcze
// zabezpieczyc przed
// brakiem deklaracji w mmedia.dta
if (rsPisk.AM != 0)
if (rsPisk)
{
if ((MoverParameters->Vel > (rsPisk.GetStatus() != 0 ? 0.01 : 0.5)) &&
(!MoverParameters->SlippingWheels) && (MoverParameters->UnitBrakeForce > rsPisk.AM))
if ((MoverParameters->Vel > (rsPisk->is_playing() != 0 ? 0.01 : 0.5)) &&
(!MoverParameters->SlippingWheels) && (MoverParameters->UnitBrakeForce > rsPisk->gain_mul))
{
vol = MoverParameters->UnitBrakeForce / (rsPisk.AM + 1) + rsPisk.AA;
rsPisk.Play(vol, DSBPLAY_LOOPING, MechInside, GetPosition());
vol = (MoverParameters->UnitBrakeForce / (rsPisk->gain_mul + 1)) / rsPisk->gain_mul;
rsPisk->gain(vol).loop().position(GetPosition()).play();
}
else
rsPisk.Stop();
rsPisk->stop();
}
if (MoverParameters->SandDose) // Dzwiek piasecznicy
sSand.TurnOn(MechInside, GetPosition());
else
sSand.TurnOff(MechInside, GetPosition());
sSand.Update(MechInside, GetPosition());
if (MoverParameters->Hamulec->GetStatus() & b_rls) // Dzwiek odluzniacza
sReleaser.TurnOn(MechInside, GetPosition());
else
sReleaser.TurnOff(MechInside, GetPosition());
//sReleaser.Update(MechInside, GetPosition());
double releaser_vol = 1;
if (MoverParameters->BrakePress < 0.1)
releaser_vol = MoverParameters->BrakePress * 10;
sReleaser.UpdateAF(releaser_vol, 1, MechInside, GetPosition());
if (sSand)
{
if (MoverParameters->SandDose) // Dzwiek piasecznicy
sSand->position(GetPosition()).play();
else
sSand->stop();
}
if (sReleaser)
{
if (MoverParameters->Hamulec->GetStatus() & b_rls) // Dzwiek odluzniacza
sReleaser->position(GetPosition()).play();
else
sReleaser->stop();
//sReleaser.Update(MechInside, GetPosition());
double releaser_vol = 1;
if (MoverParameters->BrakePress < 0.1)
releaser_vol = MoverParameters->BrakePress * 10;
sReleaser->gain(releaser_vol);
}
// if ((MoverParameters->ConverterFlag==false) &&
// (MoverParameters->TrainType!=dt_ET22))
// if
@@ -3851,51 +3869,59 @@ void TDynamicObject::RenderSounds()
// MoverParameters->CompressorAllow=MoverParameters->ConverterFlag;
// McZapkie! - dzwiek compressor.wav tylko gdy dziala sprezarka
if (MoverParameters->VeselVolume != 0)
{
if (MoverParameters->CompressorFlag)
sCompressor.TurnOn(MechInside, GetPosition());
else
sCompressor.TurnOff(MechInside, GetPosition());
sCompressor.Update(MechInside, GetPosition());
}
if (MoverParameters->PantCompFlag) // Winger 160404 - dzwiek malej sprezarki
sSmallCompressor.TurnOn(MechInside, GetPosition());
else
sSmallCompressor.TurnOff(MechInside, GetPosition());
sSmallCompressor.Update(MechInside, GetPosition());
// youBy - przenioslem, bo diesel tez moze miec turbo
if( (MoverParameters->TurboTest > 0)
&& (MoverParameters->MainCtrlPos >= MoverParameters->TurboTest))
if (sCompressor)
{
// udawanie turbo: (6.66*(eng_vol-0.85))
if (eng_turbo > 6.66 * (enginevolume - 0.8) + 0.2 * dt)
eng_turbo = eng_turbo - 0.2 * dt; // 0.125
else if (eng_turbo < 6.66 * (enginevolume - 0.8) - 0.4 * dt)
eng_turbo = eng_turbo + 0.4 * dt; // 0.333
else
eng_turbo = 6.66 * (enginevolume - 0.8);
sTurbo.TurnOn(MechInside, GetPosition());
// sTurbo.UpdateAF(eng_turbo,0.7+(eng_turbo*0.6),MechInside,GetPosition());
sTurbo.UpdateAF(3 * eng_turbo - 1, 0.4 + eng_turbo * 0.4, MechInside, GetPosition());
// eng_vol_act=enginevolume;
// eng_frq_act=eng_frq;
if (MoverParameters->VeselVolume != 0)
{
if (MoverParameters->CompressorFlag)
sCompressor->position(GetPosition()).play();
else
sCompressor->stop();
}
}
if (sSmallCompressor)
{
if (MoverParameters->PantCompFlag) // Winger 160404 - dzwiek malej sprezarki
sSmallCompressor->position(GetPosition()).play();
else
sSmallCompressor->stop();
}
if (sTurbo)
{
// youBy - przenioslem, bo diesel tez moze miec turbo
if( (MoverParameters->TurboTest > 0)
&& (MoverParameters->MainCtrlPos >= MoverParameters->TurboTest))
{
// udawanie turbo: (6.66*(eng_vol-0.85))
if (eng_turbo > 6.66 * (enginevolume - 0.8) + 0.2 * dt)
eng_turbo = eng_turbo - 0.2 * dt; // 0.125
else if (eng_turbo < 6.66 * (enginevolume - 0.8) - 0.4 * dt)
eng_turbo = eng_turbo + 0.4 * dt; // 0.333
else
eng_turbo = 6.66 * (enginevolume - 0.8);
sTurbo->gain(3 * eng_turbo - 1).pitch(0.4 + eng_turbo * 0.4).position(GetPosition()).play();
}
else
sTurbo->stop();
}
else
sTurbo.TurnOff(MechInside, GetPosition());
if (MoverParameters->TrainType == dt_PseudoDiesel)
{
// ABu: udawanie woodwarda dla lok. spalinowych
// jesli silnik jest podpiety pod dzwiek przetwornicy
if (MoverParameters->ConverterFlag) // NBMX dzwiek przetwornicy
if (sConverter)
{
sConverter.TurnOn(MechInside, GetPosition());
if (MoverParameters->ConverterFlag) // NBMX dzwiek przetwornicy
{
sConverter->position(GetPosition()).play();
}
else
sConverter->stop();
}
else
sConverter.TurnOff(MechInside, GetPosition());
// glosnosc zalezy od stosunku mocy silnika el. do mocy max
double eng_vol;
@@ -3942,7 +3968,7 @@ void TDynamicObject::RenderSounds()
if (eng_frq_act < defrot + 0.1 * dt)
eng_frq_act = defrot;
}
sConverter.UpdateAF(eng_vol_act, eng_frq_act + eng_dfrq, MechInside, GetPosition());
sConverter->gain(eng_vol_act).pitch(eng_frq_act + eng_dfrq).position(GetPosition());
// udawanie turbo: (6.66*(eng_vol-0.85))
if (eng_turbo > 6.66 * (eng_vol - 0.8) + 0.2 * dt)
eng_turbo = eng_turbo - 0.2 * dt; // 0.125
@@ -3951,62 +3977,67 @@ void TDynamicObject::RenderSounds()
else
eng_turbo = 6.66 * (eng_vol - 0.8);
sTurbo.TurnOn(MechInside, GetPosition());
if (sTurbo) sTurbo->gain(3 * eng_turbo - 1).pitch(0.4 + eng_turbo * 0.4).position(GetPosition()).play();
// sTurbo.UpdateAF(eng_turbo,0.7+(eng_turbo*0.6),MechInside,GetPosition());
sTurbo.UpdateAF(3 * eng_turbo - 1, 0.4 + eng_turbo * 0.4, MechInside, GetPosition());
eng_vol_act = eng_vol;
// eng_frq_act=eng_frq;
}
else
{
if (MoverParameters->ConverterFlag) // NBMX dzwiek przetwornicy
sConverter.TurnOn(MechInside, GetPosition());
else
sConverter.TurnOff(MechInside, GetPosition());
sConverter.Update(MechInside, GetPosition());
if (sConverter)
{
if (MoverParameters->ConverterFlag) // NBMX dzwiek przetwornicy
{
sConverter->position(GetPosition()).play();
}
else
sConverter->stop();
}
}
if( TestFlag( MoverParameters->WarningSignal, 1 ) ) {
sHorn1.TurnOn( MechInside, GetPosition() );
}
else {
sHorn1.TurnOff( MechInside, GetPosition() );
}
if( TestFlag( MoverParameters->WarningSignal, 2 ) ) {
sHorn2.TurnOn( MechInside, GetPosition() );
}
else {
sHorn2.TurnOff( MechInside, GetPosition() );
if (sHorn1)
{
if( TestFlag( MoverParameters->WarningSignal, 1 ) ) {
sHorn1->position(GetPosition()).play();
}
else {
sHorn1->stop();
}
}
if (MoverParameters->DoorClosureWarning)
if (sHorn2)
{
if (MoverParameters->DepartureSignal) // NBMX sygnal odjazdu, MC: pod warunkiem ze jest
// zdefiniowane w chk
sDepartureSignal.TurnOn(MechInside, GetPosition());
else
sDepartureSignal.TurnOff(MechInside, GetPosition());
sDepartureSignal.Update(MechInside, GetPosition());
if( TestFlag( MoverParameters->WarningSignal, 2 ) ) {
sHorn2->position(GetPosition()).play();
}
else {
sHorn2->stop();
}
}
sHorn1.Update(MechInside, GetPosition());
sHorn2.Update(MechInside, GetPosition());
// McZapkie: w razie wykolejenia
if (MoverParameters->EventFlag)
if (sDepartureSignal)
{
if (TestFlag(MoverParameters->DamageFlag, dtrain_out) && GetVelocity() > 0)
rsDerailment.Play(1, 0, true, GetPosition());
if (GetVelocity() == 0)
rsDerailment.Stop();
if (MoverParameters->DoorClosureWarning)
{
if (MoverParameters->DepartureSignal) // NBMX sygnal odjazdu, MC: pod warunkiem ze jest
// zdefiniowane w chk
sDepartureSignal->position(GetPosition()).play();
else
sDepartureSignal->stop();
}
}
if (rsDerailment)
{
// McZapkie: w razie wykolejenia
if (MoverParameters->EventFlag)
{
if (TestFlag(MoverParameters->DamageFlag, dtrain_out) && GetVelocity() > 0)
rsDerailment->position(GetPosition()).play();
if (GetVelocity() == 0)
rsDerailment->stop();
}
}
/* //Ra: dwa razy?
if (MoverParameters->EventFlag)
{
if (TestFlag(MoverParameters->DamageFlag,dtrain_out) && GetVelocity()>0)
rsDerailment.Play(1,0,true,GetPosition());
if (GetVelocity()==0)
rsDerailment.Stop();
}
*/
};
// McZapkie-250202
@@ -4711,9 +4742,9 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser.getTokens();
parser >> token;
if( token != "end" ) {
rsStukot[ i ].Init( token, dSDist, GetPosition().x,
GetPosition().y + dWheelsPosition[ i ], GetPosition().z,
true );
rsStukot[i] = sound_man->create_sound(token);
if (rsStukot[i]) rsStukot[i]->position(glm::vec3(GetPosition().x,
GetPosition().y + dWheelsPosition[ i ], GetPosition().z)).dist(dSDist);
}
}
if( token != "end" ) {
@@ -4730,32 +4761,31 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsSilnik.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true, true );
if( rsSilnik.GetWaveTime() == 0 ) {
ErrorLog( "Missed sound: \"" + token + "\" for " + asFileName );
}
parser.getTokens( 1, false );
parser >> rsSilnik.AM;
if( MoverParameters->EngineType == DieselEngine ) {
rsSilnik = sound_man->create_sound(token);
if (rsSilnik)
{
rsSilnik->dist(attenuation);
parser.getTokens( 4, false );
rsSilnik.AM /= ( MoverParameters->Power + MoverParameters->nmax * 60 );
}
else if( MoverParameters->EngineType == DieselElectric ) {
parser >> rsSilnik->gain_mul;
if( MoverParameters->EngineType == DieselEngine ) {
rsSilnik.AM /= ( MoverParameters->Power * 3 );
}
else {
rsSilnik->gain_mul /= ( MoverParameters->Power + MoverParameters->nmax * 60 );
}
else if( MoverParameters->EngineType == DieselElectric ) {
rsSilnik.AM /= ( MoverParameters->Power + MoverParameters->nmax * 60 + MoverParameters->Power + MoverParameters->Power );
}
parser.getTokens( 3, false );
parser
>> rsSilnik.AA
>> rsSilnik.FM // MoverParameters->nmax;
>> rsSilnik.FA;
rsSilnik->gain_mul /= ( MoverParameters->Power * 3 );
}
else {
rsSilnik->gain_mul /= ( MoverParameters->Power + MoverParameters->nmax * 60 + MoverParameters->Power + MoverParameters->Power );
}
parser
>> rsSilnik->gain_off
>> rsSilnik->pitch_mul // MoverParameters->nmax;
>> rsSilnik->pitch_off;
}
}
else if( ( token == "ventilator:" )
@@ -4767,18 +4797,19 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsWentylator.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true, true );
parser.getTokens( 4, false );
parser
>> rsWentylator.AM
>> rsWentylator.AA
>> rsWentylator.FM
>> rsWentylator.FA;
rsWentylator.AM /= MoverParameters->RVentnmax;
rsWentylator.FM /= MoverParameters->RVentnmax;
rsWentylator = sound_man->create_sound(token);
if (rsWentylator)
{
rsWentylator->dist(attenuation);
parser.getTokens( 4, false );
parser
>> rsWentylator->gain_mul
>> rsWentylator->gain_off
>> rsWentylator->pitch_mul
>> rsWentylator->pitch_off;
rsWentylator->gain_mul /= MoverParameters->RVentnmax;
rsWentylator->pitch_mul /= MoverParameters->RVentnmax;
}
}
else if( ( token == "transmission:" )
@@ -4789,14 +4820,15 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsPrzekladnia.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsPrzekladnia.AM = 0.029;
rsPrzekladnia.AA = 0.1;
rsPrzekladnia.FM = 0.005;
rsPrzekladnia.FA = 1.0;
rsPrzekladnia = sound_man->create_sound(token);
if (rsPrzekladnia)
{
rsPrzekladnia->dist(attenuation);
rsPrzekladnia->gain_mul = 0.029;
rsPrzekladnia->gain_off = 0.1;
rsPrzekladnia->pitch_mul = 0.005;
rsPrzekladnia->pitch_off = 1.0;
}
}
else if( token == "brake:" ){
@@ -4806,26 +4838,27 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsPisk.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsPisk.AM = parser.getToken<double>();
rsPisk.AA = parser.getToken<double>() * ( 105 - Random( 10 ) ) / 100;
rsPisk.FM = 1.0;
rsPisk.FA = 0.0;
rsPisk = sound_man->create_sound(token);
if (rsPisk)
{
rsPisk->dist(attenuation);
rsPisk->gain_mul = parser.getToken<double>();
rsPisk->gain_off = parser.getToken<double>() * ( 105 - Random( 10 ) ) / 100;
rsPisk->pitch_mul = 1.0;
rsPisk->pitch_off = 0.0;
}
}
else if( token == "brakeacc:" ) {
// plik z przyspieszaczem (upust po zlapaniu hamowania)
// sBrakeAcc.Init(str.c_str(),Parser->GetNextSymbol().ToDouble(),GetPosition().x,GetPosition().y,GetPosition().z,true);
parser.getTokens( 1, false ); parser >> token;
sBrakeAcc = TSoundsManager::GetFromName( token, true );
sBrakeAcc = sound_man->create_sound(token);
bBrakeAcc = true;
// sBrakeAcc.AM=1.0;
// sBrakeAcc.AA=0.0;
// sBrakeAcc.FM=1.0;
// sBrakeAcc.FA=0.0;
// sBrakeAcc->gain_mul=1.0;
// sBrakeAcc->gain_off=0.0;
// sBrakeAcc->pitch_mul=1.0;
// sBrakeAcc->pitch_off=0.0;
}
else if( token == "unbrake:" ) {
@@ -4835,14 +4868,9 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsUnbrake.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsUnbrake.AM = 1.0;
rsUnbrake.AA = 0.0;
rsUnbrake.FM = 1.0;
rsUnbrake.FA = 0.0;
rsUnbrake = sound_man->create_sound(token);
if (rsUnbrake)
rsUnbrake->dist(attenuation);
}
else if( token == "derail:" ) {
@@ -4852,14 +4880,9 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsDerailment.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsDerailment.AM = 1.0;
rsDerailment.AA = 0.0;
rsDerailment.FM = 1.0;
rsDerailment.FA = 0.0;
rsDerailment = sound_man->create_sound(token);
if (rsDerailment)
rsDerailment->dist(attenuation);
}
else if( token == "dieselinc:" ) {
@@ -4869,14 +4892,9 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rsDiesielInc.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsDiesielInc.AM = 1.0;
rsDiesielInc.AA = 0.0;
rsDiesielInc.FM = 1.0;
rsDiesielInc.FA = 0.0;
rsDiesielInc = sound_man->create_sound(token);
if (rsDiesielInc)
rsDiesielInc->dist(attenuation);
}
else if( token == "curve:" ) {
@@ -4886,24 +4904,19 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
parser
>> token
>> attenuation;
rscurve.Init(
token, attenuation,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rscurve.AM = 1.0;
rscurve.AA = 0.0;
rscurve.FM = 1.0;
rscurve.FA = 0.0;
rscurve = sound_man->create_sound(token);
if (rscurve)
rscurve->dist(attenuation);
}
else if( token == "horn1:" ) {
// pliki z trabieniem
sHorn1.Load( parser, GetPosition() );
sHorn1 = sound_man->create_complex_sound(parser);
}
else if( token == "horn2:" ) {
// pliki z trabieniem wysokoton.
sHorn2.Load( parser, GetPosition() );
sHorn2 = sound_man->create_complex_sound(parser);
if( iHornWarning ) {
iHornWarning = 2; // numer syreny do użycia po otrzymaniu sygnału do jazdy
}
@@ -4911,74 +4924,62 @@ void TDynamicObject::LoadMMediaFile(std::string BaseDir, std::string TypeName,
else if( token == "departuresignal:" ) {
// pliki z sygnalem odjazdu
sDepartureSignal.Load( parser, GetPosition() );
sDepartureSignal = sound_man->create_complex_sound(parser);
}
else if( token == "pantographup:" ) {
// pliki dzwiekow pantografow
parser.getTokens( 1, false ); parser >> token;
sPantUp.Init(
token, 50,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
sPantUp = sound_man->create_sound(token);
}
else if( token == "pantographdown:" ) {
// pliki dzwiekow pantografow
parser.getTokens( 1, false ); parser >> token;
sPantDown.Init(
token, 50,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
sPantDown = sound_man->create_sound(token);
}
else if( token == "compressor:" ) {
// pliki ze sprezarka
sCompressor.Load( parser, GetPosition() );
sCompressor = sound_man->create_complex_sound(parser);
}
else if( token == "converter:" ) {
// pliki z przetwornica
// if (MoverParameters->EngineType==DieselElectric) //będzie modulowany?
sConverter.Load( parser, GetPosition() );
sConverter = sound_man->create_complex_sound(parser);
}
else if( token == "turbo:" ) {
// pliki z turbogeneratorem
sTurbo.Load( parser, GetPosition() );
sTurbo = sound_man->create_complex_sound(parser);
}
else if( token == "small-compressor:" ) {
// pliki z przetwornica
sSmallCompressor.Load( parser, GetPosition() );
sSmallCompressor = sound_man->create_complex_sound(parser);
}
else if( token == "dooropen:" ) {
parser.getTokens( 1, false ); parser >> token;
rsDoorOpen.Init(
token, 50,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsDoorOpen = sound_man->create_sound(token);
}
else if( token == "doorclose:" ) {
parser.getTokens( 1, false ); parser >> token;
rsDoorClose.Init(
token, 50,
GetPosition().x, GetPosition().y, GetPosition().z,
true );
rsDoorClose = sound_man->create_sound(token);
}
else if( token == "sand:" ) {
// pliki z piasecznica
sSand.Load( parser, GetPosition() );
sSand = sound_man->create_complex_sound(parser);
}
else if( token == "releaser:" ) {
// pliki z odluzniaczem
sReleaser.Load( parser, GetPosition() );
sReleaser = sound_man->create_complex_sound(parser);
}
} while( ( token != "" )