16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 13:59:19 +02:00

build 191212. bogie sound tweak, minor bug fixes

This commit is contained in:
tmj-fstate
2019-12-12 23:14:25 +01:00
parent 8028fa2ac0
commit a54924c48d
6 changed files with 73 additions and 22 deletions

View File

@@ -4052,11 +4052,13 @@ void TDynamicObject::RenderSounds() {
} }
} }
if( door.step_folding ) { if( door.step_folding ) {
for( auto &doorsounds : m_doorsounds ) { if( door.step_position < 1.0f ) { // sanity check, the vehicles may keep the doorstep unfolded until the door close
if( doorsounds.placement == side ) { for( auto &doorsounds : m_doorsounds ) {
// determine left side doors from their offset if( doorsounds.placement == side ) {
doorsounds.step_close.play( sound_flags::exclusive ); // determine left side doors from their offset
doorsounds.step_open.stop(); doorsounds.step_close.play( sound_flags::exclusive );
doorsounds.step_open.stop();
}
} }
} }
} }
@@ -4097,7 +4099,9 @@ void TDynamicObject::RenderSounds() {
} }
// szum w czasie jazdy // szum w czasie jazdy
if( ( GetVelocity() > 0.5 ) if( ( GetVelocity() > 0.5 )
#ifdef EU07_SOUND_BOGIESOUNDS
&& ( false == m_bogiesounds.empty() ) && ( false == m_bogiesounds.empty() )
#endif
&& ( // compound test whether the vehicle belongs to user-driven consist (as these don't emit outer noise in cab view) && ( // compound test whether the vehicle belongs to user-driven consist (as these don't emit outer noise in cab view)
FreeFlyModeFlag ? true : // in external view all vehicles emit outer noise FreeFlyModeFlag ? true : // in external view all vehicles emit outer noise
// Global.pWorld->train() == nullptr ? true : // (can skip this check, with no player train the external view is a given) // Global.pWorld->train() == nullptr ? true : // (can skip this check, with no player train the external view is a given)
@@ -4105,8 +4109,11 @@ void TDynamicObject::RenderSounds() {
ctOwner != simulation::Train->Dynamic()->ctOwner ? true : // confirmed isn't a part of the user-driven train ctOwner != simulation::Train->Dynamic()->ctOwner ? true : // confirmed isn't a part of the user-driven train
Global.CabWindowOpen ? true : // sticking head out we get to hear outer noise Global.CabWindowOpen ? true : // sticking head out we get to hear outer noise
false ) ) { false ) ) {
#ifdef EU07_SOUND_BOGIESOUNDS
auto const &bogiesound { m_bogiesounds.front() }; auto const &bogiesound { m_bogiesounds.front() };
#else
auto const &bogiesound { m_outernoise };
#endif
// frequency calculation // frequency calculation
auto const normalizer { ( auto const normalizer { (
true == bogiesound.is_combined() ? true == bogiesound.is_combined() ?
@@ -4144,25 +4151,40 @@ void TDynamicObject::RenderSounds() {
if( volume > 0.05 ) { if( volume > 0.05 ) {
// apply calculated parameters to all motor instances // apply calculated parameters to all motor instances
#ifdef EU07_SOUND_BOGIESOUNDS
for( auto &bogiesound : m_bogiesounds ) { for( auto &bogiesound : m_bogiesounds ) {
bogiesound bogiesound
.pitch( frequency ) // arbitrary limits to prevent the pitch going out of whack .pitch( frequency ) // arbitrary limits to prevent the pitch going out of whack
.gain( volume ) .gain( volume )
.play( sound_flags::exclusive | sound_flags::looping ); .play( sound_flags::exclusive | sound_flags::looping );
} }
#else
m_outernoise
.pitch( frequency ) // arbitrary limits to prevent the pitch going out of whack
.gain( volume )
.play( sound_flags::exclusive | sound_flags::looping );
#endif
} }
else { else {
// stop all noise instances // stop all noise instances
#ifdef EU07_SOUND_BOGIESOUNDS
for( auto &bogiesound : m_bogiesounds ) { for( auto &bogiesound : m_bogiesounds ) {
bogiesound.stop(); bogiesound.stop();
} }
#else
m_outernoise.stop();
#endif
} }
} }
else { else {
// don't play the optional ending sound if the listener switches views // don't play the optional ending sound if the listener switches views
#ifdef EU07_SOUND_BOGIESOUNDS
for( auto &bogiesound : m_bogiesounds ) { for( auto &bogiesound : m_bogiesounds ) {
bogiesound.stop( false == FreeFlyModeFlag ); bogiesound.stop( false == FreeFlyModeFlag );
} }
#else
m_outernoise.stop( false == FreeFlyModeFlag );
#endif
} }
// flat spot sound // flat spot sound
if( MoverParameters->CategoryFlag == 1 ) { if( MoverParameters->CategoryFlag == 1 ) {
@@ -5407,6 +5429,9 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
noisetemplate.m_amplitudefactor /= ( 1 + MoverParameters->Vmax ); noisetemplate.m_amplitudefactor /= ( 1 + MoverParameters->Vmax );
noisetemplate.m_frequencyfactor /= ( 1 + MoverParameters->Vmax ); noisetemplate.m_frequencyfactor /= ( 1 + MoverParameters->Vmax );
m_outernoise = noisetemplate;
/*
// disabled until we can resolve sound interferences
if( true == m_bogiesounds.empty() ) { if( true == m_bogiesounds.empty() ) {
// fallback for cases without specified noise locations, convert sound template to a single sound source // fallback for cases without specified noise locations, convert sound template to a single sound source
m_bogiesounds.emplace_back( noisetemplate ); m_bogiesounds.emplace_back( noisetemplate );
@@ -5421,6 +5446,7 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
bogie.offset( bogieoffset ); bogie.offset( bogieoffset );
} }
} }
*/
} }
else if( token == "wheelflat:" ) { else if( token == "wheelflat:" ) {
@@ -5512,7 +5538,9 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
// add entry to the list // add entry to the list
auto const location { glm::vec3 { 0.f, 0.f, offset } }; auto const location { glm::vec3 { 0.f, 0.f, offset } };
bogienoise.offset( location ); bogienoise.offset( location );
#ifdef EU07_SOUND_BOGIESOUNDS
m_bogiesounds.emplace_back( bogienoise ); m_bogiesounds.emplace_back( bogienoise );
#endif
} }
} }
@@ -6814,8 +6842,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
// motor sounds // motor sounds
volume = 0.0; volume = 0.0;
if( ( true == Vehicle.Mains ) if( false == motors.empty() ) {
&& ( false == motors.empty() ) ) {
if( std::abs( Vehicle.enrot ) > 0.01 ) { if( std::abs( Vehicle.enrot ) > 0.01 ) {
@@ -6879,7 +6906,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
+ std::abs( Vehicle.Mm ) / 60.0 * Deltatime, + std::abs( Vehicle.Mm ) / 60.0 * Deltatime,
0.0, 1.25 ); 0.0, 1.25 );
volume *= std::max( 0.25f, motor_momentum ); volume *= std::max( 0.25f, motor_momentum );
motor_volume = interpolate( motor_volume, volume, 0.25 );
if( motor_volume >= 0.05 ) { if( motor_volume >= 0.05 ) {
// apply calculated parameters to all motor instances // apply calculated parameters to all motor instances
for( auto &motor : motors ) { for( auto &motor : motors ) {
@@ -6889,21 +6916,21 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
.play( sound_flags::exclusive | sound_flags::looping ); .play( sound_flags::exclusive | sound_flags::looping );
} }
} }
else {
// stop all motor instances
for( auto &motor : motors ) {
motor.stop();
}
}
} }
else { else {
// stop all motor instances // stop all motor instances
motor_volume = 0.0;
for( auto &motor : motors ) { for( auto &motor : motors ) {
motor.stop(); motor.stop();
} }
} }
} }
motor_volume = interpolate( motor_volume, volume, 0.25 );
if( motor_volume < 0.05 ) {
// stop all motor instances
for( auto &motor : motors ) {
motor.stop();
}
}
// motor blowers // motor blowers
if( false == motorblowers.empty() ) { if( false == motorblowers.empty() ) {
for( auto &blowersound : motorblowers ) { for( auto &blowersound : motorblowers ) {

View File

@@ -456,7 +456,11 @@ private:
sound_source sHorn1 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; sound_source sHorn1 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE };
sound_source sHorn2 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; sound_source sHorn2 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE };
sound_source sHorn3 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; sound_source sHorn3 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE };
#ifdef EU07_SOUND_BOGIESOUNDS
std::vector<sound_source> m_bogiesounds; // TBD, TODO: wrapper for all bogie-related sounds (noise, brakes, squeal etc) std::vector<sound_source> m_bogiesounds; // TBD, TODO: wrapper for all bogie-related sounds (noise, brakes, squeal etc)
#else
sound_source m_outernoise { sound_placement::external, EU07_SOUND_RUNNINGNOISECUTOFFRANGE };
#endif
sound_source m_wheelflat { sound_placement::external, EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; sound_source m_wheelflat { sound_placement::external, EU07_SOUND_RUNNINGNOISECUTOFFRANGE };
sound_source rscurve { sound_placement::external, 2 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; // youBy sound_source rscurve { sound_placement::external, 2 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; // youBy
sound_source rsDerailment { sound_placement::external, 2 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; // McZapkie-051202 sound_source rsDerailment { sound_placement::external, 2 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; // McZapkie-051202

View File

@@ -283,6 +283,12 @@ eu07_application::get_cursor_pos( double &Horizontal, double &Vertical ) const {
glfwGetCursorPos( m_windows.front(), &Horizontal, &Vertical ); glfwGetCursorPos( m_windows.front(), &Horizontal, &Vertical );
} }
int
eu07_application::get_mouse_button( int const Button ) const {
return glfwGetMouseButton( m_windows.front(), Button );
}
void void
eu07_application::on_key( int const Key, int const Scancode, int const Action, int const Mods ) { eu07_application::on_key( int const Key, int const Scancode, int const Action, int const Mods ) {

View File

@@ -60,6 +60,8 @@ public:
get_cursor_pos() const; get_cursor_pos() const;
void void
get_cursor_pos( double &Horizontal, double &Vertical ) const; get_cursor_pos( double &Horizontal, double &Vertical ) const;
int
get_mouse_button( int const Button ) const;
// input handlers // input handlers
void void
on_key( int const Key, int const Scancode, int const Action, int const Mods ); on_key( int const Key, int const Scancode, int const Action, int const Mods );

View File

@@ -459,16 +459,28 @@ drivermouse_input::poll() {
while( m_updateaccumulator > updaterate ) { while( m_updateaccumulator > updaterate ) {
if( m_mousecommandleft != user_command::none ) { if( m_mousecommandleft != user_command::none ) {
// NOTE: basic keyboard controls don't have any parameters if( Application.get_mouse_button( GLFW_MOUSE_BUTTON_LEFT ) == GLFW_PRESS ) {
// as we haven't yet implemented either item id system or multiplayer, the 'local' controlled vehicle and entity have temporary ids of 0 // sanity check, as our button callback can trigger after button release leaving us with desync
// TODO: pass correct entity id once the missing systems are in place // NOTE: basic keyboard controls don't have any parameters
m_relay.post( m_mousecommandleft, 0, 0, GLFW_REPEAT, 0 ); // as we haven't yet implemented either item id system or multiplayer, the 'local' controlled vehicle and entity have temporary ids of 0
// TODO: pass correct entity id once the missing systems are in place
m_relay.post( m_mousecommandleft, 0, 0, GLFW_REPEAT, 0 );
}
else {
m_mousecommandleft = user_command::none;
}
} }
if( m_mousecommandright != user_command::none ) { if( m_mousecommandright != user_command::none ) {
if( Application.get_mouse_button( GLFW_MOUSE_BUTTON_RIGHT ) == GLFW_PRESS ) {
// sanity check, as our button callback can trigger after button release leaving us with desync
// NOTE: basic keyboard controls don't have any parameters // NOTE: basic keyboard controls don't have any parameters
// as we haven't yet implemented either item id system or multiplayer, the 'local' controlled vehicle and entity have temporary ids of 0 // as we haven't yet implemented either item id system or multiplayer, the 'local' controlled vehicle and entity have temporary ids of 0
// TODO: pass correct entity id once the missing systems are in place // TODO: pass correct entity id once the missing systems are in place
m_relay.post( m_mousecommandright, 0, 0, GLFW_REPEAT, 0 ); m_relay.post( m_mousecommandright, 0, 0, GLFW_REPEAT, 0 );
}
else {
m_mousecommandright = user_command::none;
}
} }
m_updateaccumulator -= updaterate; m_updateaccumulator -= updaterate;
} }

View File

@@ -1,5 +1,5 @@
#pragma once #pragma once
#define VERSION_MAJOR 19 #define VERSION_MAJOR 19
#define VERSION_MINOR 1208 #define VERSION_MINOR 1212
#define VERSION_REVISION 0 #define VERSION_REVISION 0