123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- class OptionsMenuSounds extends ScriptedWidgetEventHandler
- {
- protected Widget m_Root;
-
- protected Widget m_SettingsRoot;
- protected Widget m_DetailsRoot;
- protected Widget m_DetailsBodyDefault;
- protected Widget m_DetailsBodyConnectivity;
- protected TextWidget m_DetailsLabel;
- protected RichTextWidget m_DetailsText;
-
- protected ref NumericOptionsAccess m_MasterOption;
- protected ref NumericOptionsAccess m_EffectsOption;
- protected ref NumericOptionsAccess m_VOIPOption;
- protected ref NumericOptionsAccess m_VOIPThresholdOption;
- protected ref NumericOptionsAccess m_MusicOption;
- protected ref ListOptionsAccess m_InputModeOption;
-
- protected ref OptionSelectorSlider m_MasterSelector;
- protected ref OptionSelectorSlider m_EffectsSelector;
- protected ref OptionSelectorSlider m_VOIPSelector;
- protected ref OptionSelectorLevelMarker m_VOIPThresholdSelector;
- protected ref OptionSelectorSlider m_MusicSelector;
- protected ref OptionSelectorMultistate m_InputModeSelector;
- protected ref OptionSelectorMultistate m_AmbientMusicSelector;
-
- protected ref Timer m_AudioLevelTimer;
- protected GameOptions m_Options;
- protected OptionsMenu m_Menu;
- protected MissionGameplay m_MissionGameplay;
- protected VONManagerBase m_VonManager;
-
- protected ref map<int, ref Param2<string, string>> m_TextMap;
-
- private bool m_WasMicCapturing;
-
- void OptionsMenuSounds(Widget parent, Widget details_root, GameOptions options, OptionsMenu menu)
- {
- m_Root = GetGame().GetWorkspace().CreateWidgets(GetLayoutName(), parent);
- m_DetailsRoot = details_root;
- m_DetailsBodyDefault = m_DetailsRoot.FindAnyWidget("settings_details_body");
- m_DetailsBodyConnectivity = m_DetailsRoot.FindAnyWidget("settings_details_body_connectivity");
- m_DetailsLabel = TextWidget.Cast( m_DetailsRoot.FindAnyWidget("details_label"));
- m_DetailsText = RichTextWidget.Cast( m_DetailsRoot.FindAnyWidget("details_content"));
- m_Options = options;
- m_Menu = menu;
-
- m_MasterOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_MASTER_VOLUME));
- m_EffectsOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_EFFECTS_SLIDER));
- m_MusicOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_MUSIC_SLIDER));
- m_VOIPOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_SLIDER));
- m_VOIPThresholdOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_THRESHOLD_SLIDER));
- m_InputModeOption = ListOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_INPUT_MODE));
-
- m_MissionGameplay = MissionGameplay.Cast(GetGame().GetMission());
- m_VonManager = VONManager.GetInstance();
- m_AudioLevelTimer = new Timer();
- m_AudioLevelTimer.Run(0.1, this, "UpdateAudioLevel", null, true);
-
- m_Root.FindAnyWidget( "master_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_MASTER_VOLUME);
- m_Root.FindAnyWidget( "effects_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_EFFECTS_SLIDER);
- m_Root.FindAnyWidget( "music_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_MUSIC_SLIDER);
- m_Root.FindAnyWidget( "voip_output_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_VON_SLIDER);
- m_Root.FindAnyWidget( "voip_threshold_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_VON_THRESHOLD_SLIDER);
- m_Root.FindAnyWidget( "voip_selection_setting_option" ).SetUserID(OptionAccessType.AT_OPTIONS_VON_INPUT_MODE);
- m_Root.FindAnyWidget( "ambient_music_mode_option" ).SetUserID(OptionIDsScript.OPTION_AMBIENT_MUSIC_MODE);
-
- FillTextMap();
-
- array<string> inputModeValues = {
- "#STR_Controls_PushToTalk",
- "#STR_USRACT_UAVOICEOVERNETTOGGLE",
- };
- array<string> ambientMusicModeValues = {
- "#STR_Ambient_Music_Enabled",
- "#STR_Ambient_Music_Menu_Only",
- };
-
- m_MasterSelector = new OptionSelectorSlider(m_Root.FindAnyWidget("master_setting_option" ), m_MasterOption.ReadValue(), this, false, m_MasterOption.GetMin(), m_MasterOption.GetMax());
- m_EffectsSelector = new OptionSelectorSlider(m_Root.FindAnyWidget("effects_setting_option" ), m_EffectsOption.ReadValue(), this, false, m_EffectsOption.GetMin(), m_EffectsOption.GetMax());
- m_VOIPSelector = new OptionSelectorSlider(m_Root.FindAnyWidget("voip_output_setting_option" ), m_VOIPOption.ReadValue(), this, false, m_VOIPOption.GetMin(), m_VOIPOption.GetMax());
- m_VOIPThresholdSelector = new OptionSelectorLevelMarker(m_Root.FindAnyWidget("voip_threshold_setting_option" ), m_VOIPThresholdOption.ReadValue(), this, false, m_VOIPThresholdOption.GetMin(), m_VOIPThresholdOption.GetMax());
- m_MusicSelector = new OptionSelectorSlider(m_Root.FindAnyWidget("music_setting_option" ), m_MusicOption.ReadValue(), this, false, m_MusicOption.GetMin(), m_MusicOption.GetMax());
- m_InputModeSelector = new OptionSelectorMultistate(m_Root.FindAnyWidget("voip_selection_setting_option" ), m_InputModeOption.GetIndex(), this, false, inputModeValues);
- m_AmbientMusicSelector = new OptionSelectorMultistate(m_Root.FindAnyWidget("ambient_music_mode_option" ), g_Game.GetProfileOptionInt(EDayZProfilesOptions.AMBIENT_MUSIC_MODE), this, false, ambientMusicModeValues);
-
- m_MasterSelector.m_OptionChanged.Insert(UpdateMaster);
- m_EffectsSelector.m_OptionChanged.Insert(UpdateEffects);
- m_VOIPSelector.m_OptionChanged.Insert(UpdateVOIP);
- m_VOIPThresholdSelector.m_OptionChanged.Insert(UpdateVOIPThreshold);
- m_MusicSelector.m_OptionChanged.Insert(UpdateMusic);
- m_AmbientMusicSelector.m_OptionChanged.Insert(UpdateAmbientSoundModeOption);
- m_InputModeSelector.m_OptionChanged.Insert(UpdateInputMode);
-
- if (m_MissionGameplay)
- {
- // event to monitor when options get reverted directly from C++
- m_VOIPThresholdOption.GetEvents().Event_OnRevert.Insert(m_VonManager.OnVOIPThresholdChanged);
- m_VonManager.m_OnVonStateEvent.Insert(OnVonStateEvent);
- m_VonManager.m_OnPartyChatChangedEvent.Insert(OnPartyChatChangedEvent);
- m_VOIPThresholdSelector.m_OptionChanged.Insert(m_VonManager.OnVOIPThresholdChanged);
- }
-
- float x, y, y2;
- m_Root.FindAnyWidget("sound_settings_scroll").GetScreenSize(x, y);
- m_Root.FindAnyWidget("sound_settings_root").GetScreenSize(x, y2);
- int f = (y2 > y);
- m_Root.FindAnyWidget("sound_settings_scroll").SetAlpha(f);
-
- m_Root.SetHandler(this);
-
- CGame game = GetGame();
- m_WasMicCapturing = game.IsMicCapturing();
- // do not enable mic capture if user in party chat
- if (!game.IsInPartyChat())
- {
- game.EnableMicCapture(true);
- }
- }
-
- void ~OptionsMenuSounds()
- {
- m_VonManager.m_OnVonStateEvent.Remove(OnVonStateEvent);
- m_VonManager.m_OnPartyChatChangedEvent.Remove(OnPartyChatChangedEvent);
-
- if (m_MissionGameplay)
- {
- // reset mic to previous capturing state
- GetGame().EnableMicCapture(m_WasMicCapturing);
- }
- m_AudioLevelTimer.Stop();
- }
-
- string GetLayoutName()
- {
- #ifdef PLATFORM_CONSOLE
- return "gui/layouts/new_ui/options/xbox/sound_tab.layout";
- #else
- #ifdef PLATFORM_WINDOWS
- return "gui/layouts/new_ui/options/pc/sound_tab.layout";
- #endif
- #endif
- }
-
- void Focus()
- {
- #ifdef PLATFORM_CONSOLE
- SetFocus(m_MasterSelector.GetParent());
- #endif
- }
-
- override bool OnMouseEnter(Widget w, int x, int y)
- {
- if ( w && w.IsInherited(ScrollWidget))
- {
- return false;
- }
-
- m_Menu.ColorHighlight(w);
-
- return true;
- }
-
- override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
- {
- if ( w && w.IsInherited(ScrollWidget))
- {
- return false;
- }
-
- m_Menu.ColorNormal(w);
- return true;
- }
-
- override bool OnFocus(Widget w, int x, int y)
- {
- OptionsMenu menu = OptionsMenu.Cast(GetGame().GetUIManager().GetMenu());
- if (menu)
- {
- menu.OnFocus(w, x, y);
- }
- if (w)
- {
- if (TextMapUpdateWidget(w.GetUserID()))
- {
- return true;
- }
-
- if (w.IsInherited(SliderWidget))
- {
- return true;
- }
- }
- m_DetailsRoot.Show(false);
- return (w != null);
- }
-
- bool TextMapUpdateWidget(int key)
- {
- bool connectivityInfoShown = key == OptionIDsScript.OPTION_CONNECTIVITY_INFO;
- Param2<string, string> p;
- Param tmp = m_TextMap.Get(key);
-
- m_DetailsBodyDefault.Show(!connectivityInfoShown);
- m_DetailsBodyConnectivity.Show(connectivityInfoShown);
-
- if (Class.CastTo(p,tmp))
- {
- m_DetailsRoot.Show(true);
- m_DetailsText.Show(true);
- m_DetailsLabel.SetText(p.param1);
- m_DetailsText.SetText(p.param2);
-
- m_DetailsText.Update();
- m_DetailsLabel.Update();
- m_DetailsRoot.Update();
- m_DetailsBodyConnectivity.Update(); //...
- return true;
- }
- return false;
- }
- void OnVonStateEvent()
- {
- // changing VON mode may disable mic capture,
- // but mic should capture the entire time this menu is open (unless user in party chat)
- if (!GetGame().IsInPartyChat())
- {
- // force enable mic capture
- GetGame().EnableMicCapture(true);
- }
-
- UpdateWasMicCapturing();
- }
-
- void OnPartyChatChangedEvent()
- {
- auto game = GetGame();
- if (!game.IsInPartyChat())
- {
- game.EnableMicCapture(true);
- }
-
- UpdateWasMicCapturing();
- }
-
- // updates the mic capture state to reset to, when this menu closes
- void UpdateWasMicCapturing()
- {
- // if user is in party chat, then mic should not capture
- if (GetGame().IsInPartyChat())
- {
- m_WasMicCapturing = false;
- }
-
- // otherwise, mic should capture ONLY if Voice Activation is enabled
- else
- {
- m_WasMicCapturing = m_MissionGameplay.IsVoNActive();
- }
- }
-
- bool IsChanged()
- {
- bool universal = (m_AmbientMusicSelector.GetValue() != g_Game.GetProfileOptionInt(EDayZProfilesOptions.AMBIENT_MUSIC_MODE));
-
- return universal;
- }
-
- void Apply()
- {
- g_Game.SetProfileOptionInt(EDayZProfilesOptions.AMBIENT_MUSIC_MODE, m_AmbientMusicSelector.GetValue());
- }
-
- void Revert()
- {
- if (m_MasterOption)
- {
- m_MasterSelector.SetValue(m_MasterOption.ReadValue(), true);
- }
- if (m_EffectsOption)
- {
- m_EffectsSelector.SetValue(m_EffectsOption.ReadValue(),true);
- }
- if (m_VOIPOption)
- {
- m_VOIPSelector.SetValue(m_VOIPOption.ReadValue(), true);
- }
- if (m_VOIPThresholdOption)
- {
- m_VOIPThresholdSelector.SetValue(m_VOIPThresholdOption.ReadValue(), true);
- }
- if (m_MusicOption)
- {
- m_MusicSelector.SetValue(m_MusicOption.ReadValue(), true);
- }
- if (m_InputModeOption)
- {
- m_InputModeSelector.SetValue(m_InputModeOption.GetIndex(), false);
- }
-
- if (m_AmbientMusicSelector)
- m_AmbientMusicSelector.SetValue(g_Game.GetProfileOptionInt(EDayZProfilesOptions.AMBIENT_MUSIC_MODE), false);
- }
-
- void SetToDefaults()
- {
- if (m_MasterOption)
- {
- m_MasterSelector.SetValue(m_MasterOption.GetDefault(), true);
- }
- if (m_EffectsOption)
- {
- m_EffectsSelector.SetValue(m_EffectsOption.GetDefault(), true);
- }
- if (m_VOIPOption)
- {
- m_VOIPSelector.SetValue(m_VOIPOption.GetDefault(), true);
- }
- if (m_VOIPThresholdOption)
- {
- m_VOIPThresholdSelector.SetValue(m_VOIPThresholdOption.GetDefault(), true);
- }
- if (m_MusicOption)
- {
- m_MusicSelector.SetValue(m_MusicOption.GetDefault(), true);
- }
- if (m_InputModeOption)
- {
- m_InputModeOption.SetIndex(m_InputModeOption.GetDefaultIndex());
- m_InputModeSelector.SetValue( m_InputModeOption.GetIndex(), false );
- }
-
- if (m_AmbientMusicSelector)
- m_AmbientMusicSelector.SetValue(g_Game.GetProfileOptionDefaultInt(EDayZProfilesOptions.AMBIENT_MUSIC_MODE), false);
- }
-
- void ReloadOptions()
- {
- m_Menu.ReloadOptions();
- }
-
- void SetOptions(GameOptions options)
- {
- m_Options = options;
-
- m_MasterOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_MASTER_VOLUME));
- m_EffectsOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_EFFECTS_SLIDER));
- m_MusicOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_MUSIC_SLIDER));
- m_VOIPOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_SLIDER));
- m_InputModeOption = ListOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_INPUT_MODE));
- m_VOIPThresholdOption = NumericOptionsAccess.Cast(m_Options.GetOptionByType(OptionAccessType.AT_OPTIONS_VON_THRESHOLD_SLIDER));
-
- Revert();
- }
-
- void ToggleDependentOptions(int mode, bool state)
- {
- }
-
- void InitDependentOptionsVisibility()
- {
- }
-
- void UpdateMaster(float value)
- {
- m_MasterOption.WriteValue(value);
- m_Menu.OnChanged();
- }
-
- void UpdateEffects(float value)
- {
- m_EffectsOption.WriteValue(value);
- m_Menu.OnChanged();
- }
-
- void UpdateVOIP(float value)
- {
- m_VOIPOption.WriteValue(value);
- m_Menu.OnChanged();
- }
-
- void UpdateVOIPThreshold(float value)
- {
- m_VOIPThresholdOption.WriteValue(value);
- m_Menu.OnChanged();
- }
-
- void UpdateMusic(float value)
- {
- m_MusicOption.WriteValue(value);
- m_Menu.OnChanged();
- }
-
- void UpdateAmbientSoundModeOption(int value)
- {
- m_Menu.OnChanged();
- }
-
- void UpdateInputMode(int newIndex)
- {
- m_InputModeOption.SetIndex(newIndex);
- m_Menu.OnChanged();
- }
-
- void UpdateAudioLevel()
- {
- m_VOIPThresholdSelector.SetSlider2Value(GetGame().GetSoundScene().GetAudioLevel());
- }
-
-
- void FillTextMap()
- {
- m_TextMap = new map<int, ref Param2<string, string>>;
-
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_MASTER_VOLUME, new Param2<string, string>("#STR_sound_tab_master_tip_header", "#STR_sound_tab_master_tip"));
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_EFFECTS_SLIDER, new Param2<string, string>("#STR_sound_tab_effects_tip_header", "#STR_sound_tab_effects_tip"));
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_MUSIC_SLIDER, new Param2<string, string>("#STR_sound_tab_music_tip_header", "#STR_sound_tab_music_tip"));
- m_TextMap.Insert(OptionIDsScript.OPTION_AMBIENT_MUSIC_MODE, new Param2<string, string>("#STR_sound_tab_ambient_mode_tip_header", "#STR_sound_tab_ambient_mode_tip"));
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_VON_SLIDER, new Param2<string, string>("#STR_sound_tab_voice_output_tip_header", "#STR_sound_tab_voice_output_tip"));
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_VON_THRESHOLD_SLIDER, new Param2<string, string>("#STR_sound_tab_voice_threshold_tip_header", "#STR_sound_tab_voice_threshold_tip"));
- m_TextMap.Insert(OptionAccessType.AT_OPTIONS_VON_INPUT_MODE, new Param2<string, string>("#STR_sound_tab_voice_mode_tip_header", "#STR_sound_tab_voice_mode_tip"));
- }
- }
|