31 #include <OgreResourceGroupManager.h>
36 const float SoundScriptInstance::PITCHDOWN_FADE_FACTOR = 3.0f;
37 const float SoundScriptInstance::PITCHDOWN_CUTOFF_FACTOR = 5.0f;
39 const SoundPtr SoundScriptInstance::SOUNDPTR_NULL;
41 SoundScriptManager::SoundScriptManager() :
45 , max_distance(500.0f)
46 , rolloff_factor(1.0f)
47 , reference_distance(7.5f)
48 , sound_manager(nullptr)
80 LOG(
"SoundScriptManager: Failed to create the Sound Manager");
88 LOG(
"SoundScriptManager: Sound Manager is disabled");
94 ResourceGroupManager::getSingleton()._registerScriptLoader(
this);
149 state_map[linkType][linkItemID][actor_id][trig] =
true;
177 if (!
getTrigState(actor_id, trig, linkType, linkItemID))
180 state_map[linkType][linkItemID][actor_id][trig] =
false;
207 if (!
getTrigState(actor_id, trig, linkType, linkItemID))
210 state_map[linkType][linkItemID][actor_id][trig] =
false;
239 trigStop(actor_id, trig, linkType, linkItemID);
241 trigStart(actor_id, trig, linkType, linkItemID);
260 return state_map[linkType][linkItemID][actor_id][trig];
289 gain = std::max(0.0f, gain);
290 gain = std::min(gain, 1.0f);
302 pitch = std::max(0.0f, pitch);
314 static Vector3 last_camera_position;
315 Ogre::Vector3 camera_position = camera_node->getPosition();
316 Vector3 camera_velocity = (camera_position - last_camera_position) / dt;
317 last_camera_position = camera_position;
318 Ogre::Vector3 camera_up = camera_node->getOrientation() * Ogre::Vector3::UNIT_Y;
320 Ogre::Vector3 camera_direction = camera_node->getOrientation() * -Ogre::Vector3::UNIT_Z;
322 this->
SetListener(camera_position, camera_direction, camera_up, camera_velocity);
351 LOG(
"SoundScriptManager::createTemplate(): SoundScript with name [" + name +
"] already exists, skipping...");
464 if (pitchesPos != -1)
482 std::vector<String> vecparams;
484 LOG(
"SoundScriptManager: Parsing script "+stream->getName());
486 while (!stream->eof())
490 if (!(line.length() == 0 || line.substr(0, 2) ==
"//"))
496 LOG(
"SoundScriptManager: creating template "+line);
501 LOG(
"SoundScriptManager: Error, this sound script is already defined: "+line);
521 Ogre::StringVector veclineparams = StringUtil::split(line,
"\t ", 0);
525 LOG(
"Bad SoundScript attribute line: '" + line +
"' in " + stream->getName());
537 while (!stream->eof() && line !=
"}")
539 line = stream->getLine();
547 while (!stream->eof() && line !=
"{")
549 line = stream->getLine();
564 base_template(baseTemplate)
565 , file_name(filename)
566 , group_name(groupname)
568 , gain_multiplier(1.0f)
572 , has_start_sound(false)
573 , has_stop_sound(false)
575 , pitch_multiplier(1.0f)
579 , start_sound_pitch(0.0f)
580 , stop_sound_pitch(0.0f)
591 if (vec[0] == String(
"trigger_source"))
595 if (vec[1] == String(
"engine"))
600 if (vec[1] == String(
"aeroengine1"))
605 if (vec[1] == String(
"aeroengine2"))
610 if (vec[1] == String(
"aeroengine3"))
615 if (vec[1] == String(
"aeroengine4"))
620 if (vec[1] == String(
"aeroengine5"))
625 if (vec[1] == String(
"aeroengine6"))
630 if (vec[1] == String(
"aeroengine7"))
635 if (vec[1] == String(
"aeroengine8"))
640 if (vec[1] == String(
"horn"))
645 if (vec[1] == String(
"brake"))
650 if (vec[1] == String(
"pump"))
655 if (vec[1] == String(
"starter"))
660 if (vec[1] == String(
"turbo_BOV"))
665 if (vec[1] == String(
"turbo_waste_gate"))
670 if (vec[1] == String(
"turbo_back_fire"))
675 if (vec[1] == String(
"always_on"))
680 if (vec[1] == String(
"repair"))
685 if (vec[1] == String(
"air"))
690 if (vec[1] == String(
"gpws_ap_disconnect"))
695 if (vec[1] == String(
"gpws_10"))
700 if (vec[1] == String(
"gpws_20"))
705 if (vec[1] == String(
"gpws_30"))
710 if (vec[1] == String(
"gpws_40"))
715 if (vec[1] == String(
"gpws_50"))
720 if (vec[1] == String(
"gpws_100"))
725 if (vec[1] == String(
"gpws_pull_up"))
730 if (vec[1] == String(
"gpws_minimums"))
735 if (vec[1] == String(
"air_purge"))
740 if (vec[1] == String(
"shift"))
745 if (vec[1] == String(
"gear_slide"))
755 if (vec[1] == String(
"break"))
760 if (vec[1] == String(
"screetch"))
765 if (vec[1] == String(
"parking_brake"))
770 if (vec[1] == String(
"antilock"))
775 if (vec[1] == String(
"tractioncontrol"))
780 if (vec[1] == String(
"afterburner1"))
785 if (vec[1] == String(
"afterburner2"))
790 if (vec[1] == String(
"afterburner3"))
795 if (vec[1] == String(
"afterburner4"))
800 if (vec[1] == String(
"afterburner5"))
805 if (vec[1] == String(
"afterburner6"))
810 if (vec[1] == String(
"afterburner7"))
815 if (vec[1] == String(
"afterburner8"))
820 if (vec[1] == String(
"avionic_chat_01"))
825 if (vec[1] == String(
"avionic_chat_02"))
830 if (vec[1] == String(
"avionic_chat_03"))
835 if (vec[1] == String(
"avionic_chat_04"))
840 if (vec[1] == String(
"avionic_chat_05"))
845 if (vec[1] == String(
"avionic_chat_06"))
850 if (vec[1] == String(
"avionic_chat_07"))
855 if (vec[1] == String(
"avionic_chat_08"))
860 if (vec[1] == String(
"avionic_chat_09"))
865 if (vec[1] == String(
"avionic_chat_10"))
870 if (vec[1] == String(
"avionic_chat_11"))
875 if (vec[1] == String(
"avionic_chat_12"))
880 if (vec[1] == String(
"avionic_chat_13"))
885 if (vec[1] == String(
"aoa_horn"))
890 if (vec[1] == String(
"ignition"))
895 if (vec[1] == String(
"reverse_gear"))
900 if (vec[1] == String(
"turn_signal"))
905 if (vec[1] == String(
"turn_signal_tick"))
910 if (vec[1] == String(
"turn_signal_warn_tick"))
915 if (vec[1] == String(
"linked_command"))
920 if (vec[1] == String(
"main_menu"))
929 if (vec[0] == String(
"pitch_source"))
942 if (vec[0] == String(
"pitch_factors"))
955 if (vec[0] == String(
"gain_source"))
968 if (vec[0] == String(
"gain_factors"))
981 if (vec[0] == String(
"start_sound"))
991 if (vec[0] == String(
"stop_sound"))
1001 if (vec[0] == String(
"sound"))
1029 if (str == String(
"none"))
1031 if (str == String(
"engine_rpm"))
1033 if (str == String(
"turbo_rpm"))
1035 if (str == String(
"aeroengine1_rpm"))
1037 if (str == String(
"aeroengine2_rpm"))
1039 if (str == String(
"aeroengine3_rpm"))
1041 if (str == String(
"aeroengine4_rpm"))
1043 if (str == String(
"aeroengine5_rpm"))
1045 if (str == String(
"aeroengine6_rpm"))
1047 if (str == String(
"aeroengine7_rpm"))
1049 if (str == String(
"aeroengine8_rpm"))
1051 if (str == String(
"wheel_speed_kmph"))
1053 if (str == String(
"injector_ratio"))
1055 if (str == String(
"torque_nm"))
1057 if (str == String(
"gearbox_rpm"))
1059 if (str == String(
"creak"))
1061 if (str == String(
"break"))
1063 if (str == String(
"screetch"))
1065 if (str == String(
"pump_rpm"))
1067 if (str == String(
"aeroengine1_throttle"))
1069 if (str == String(
"aeroengine2_throttle"))
1071 if (str == String(
"aeroengine3_throttle"))
1073 if (str == String(
"aeroengine4_throttle"))
1075 if (str == String(
"aeroengine5_throttle"))
1077 if (str == String(
"aeroengine6_throttle"))
1079 if (str == String(
"aeroengine7_throttle"))
1081 if (str == String(
"aeroengine8_throttle"))
1083 if (str == String(
"air_speed_knots"))
1085 if (str == String(
"angle_of_attack_degree"))
1087 if (str == String(
"linked_command_rate"))
1089 if (str == String(
"music_volume"))
1099 , instance_name(instancename)
1101 , sound_manager(sound_manager)
1102 , sound_link_type(soundLinkType)
1103 , sound_link_item_id(soundLinkItemId)
1105 , start_sound_pitchgain(0.0f)
1107 , stop_sound_pitchgain(0.0f)
1129 LOG(
"SoundScriptInstance: instance created: "+instancename);
1208 for (
int i = 0; i < low; i++)
1272 if (sourcepitch == 0.0f)
1371 if (
sounds[i]->isPlaying())
1463 #endif // USE_OPENAL