режим предателя + UI референсы и DragonUI
This commit is contained in:
@@ -0,0 +1,823 @@
|
||||
-- if you change something here you probably want to change the glue version too
|
||||
|
||||
local VOICE_OPTIONS_BINDING_SUCCESS_FADE = 3;
|
||||
local VOICE_OPTIONS_BINDING_FAIL_FADE = 6;
|
||||
|
||||
|
||||
-- [[ Generic Audio Options Panel ]] --
|
||||
|
||||
function AudioOptionsPanel_CheckButton_OnClick (checkButton)
|
||||
local setting = "0";
|
||||
if ( checkButton:GetChecked() ) then
|
||||
if ( not checkButton.invert ) then
|
||||
setting = "1"
|
||||
end
|
||||
elseif ( checkButton.invert ) then
|
||||
setting = "1"
|
||||
end
|
||||
|
||||
local prevValue = checkButton:GetValue();
|
||||
|
||||
checkButton:SetValue(setting);
|
||||
|
||||
if ( checkButton.restart and prevValue ~= setting ) then
|
||||
AudioOptionsFrame_AudioRestart();
|
||||
end
|
||||
|
||||
if ( checkButton.dependentControls ) then
|
||||
if ( checkButton:GetChecked() ) then
|
||||
for _, control in next, checkButton.dependentControls do
|
||||
control:Enable();
|
||||
end
|
||||
else
|
||||
for _, control in next, checkButton.dependentControls do
|
||||
control:Disable();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ( checkButton.setFunc ) then
|
||||
checkButton.setFunc(setting);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function AudioOptionsPanel_Okay (self)
|
||||
for _, control in next, self.controls do
|
||||
if ( control.value and control:GetValue() ~= control.value ) then
|
||||
if ( control.restart ) then
|
||||
AudioOptionsFrame.audioRestart = true;
|
||||
end
|
||||
control:SetValue(control.value);
|
||||
end
|
||||
end
|
||||
MiniMapVoiceChat_Update();
|
||||
end
|
||||
|
||||
local function AudioOptionsPanel_Cancel (self)
|
||||
for _, control in next, self.controls do
|
||||
if ( control.oldValue ) then
|
||||
if ( control.value and control.value ~= control.oldValue ) then
|
||||
if ( control.restart ) then
|
||||
AudioOptionsFrame.audioRestart = true;
|
||||
end
|
||||
control:SetValue(control.oldValue);
|
||||
end
|
||||
elseif ( control.value ) then
|
||||
if ( control:GetValue() ~= control.value ) then
|
||||
if ( control.restart ) then
|
||||
AudioOptionsFrame.audioRestart = true;
|
||||
end
|
||||
control:SetValue(control.value);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function AudioOptionsPanel_Default (self)
|
||||
for _, control in next, self.controls do
|
||||
if ( control.defaultValue and control.value ~= control.defaultValue ) then
|
||||
if ( control.restart ) then
|
||||
AudioOptionsFrame.audioRestart = true;
|
||||
end
|
||||
control:SetValue(control.defaultValue);
|
||||
control.value = control.defaultValue;
|
||||
end
|
||||
end
|
||||
MiniMapVoiceChat_Update();
|
||||
end
|
||||
|
||||
local function AudioOptionsPanel_Refresh (self)
|
||||
for _, control in next, self.controls do
|
||||
BlizzardOptionsPanel_RefreshControl(control);
|
||||
-- record values so we can cancel back to this state
|
||||
control.oldValue = control.value;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- [[ Sound Options Panel ]] --
|
||||
|
||||
SoundPanelOptions = {
|
||||
Sound_EnableErrorSpeech = { text = "ENABLE_ERROR_SPEECH" },
|
||||
Sound_EnableMusic = { text = "ENABLE_MUSIC" },
|
||||
Sound_EnableAmbience = { text = "ENABLE_AMBIENCE" },
|
||||
Sound_EnableSFX = { text = "ENABLE_SOUNDFX" },
|
||||
Sound_EnableAllSound = { text = "ENABLE_SOUND" },
|
||||
Sound_ListenerAtCharacter = { text = "ENABLE_SOUND_AT_CHARACTER" },
|
||||
Sound_EnableEmoteSounds = { text = "ENABLE_EMOTE_SOUNDS" },
|
||||
Sound_EnablePetSounds = { text = "ENABLE_PET_SOUNDS" },
|
||||
Sound_ZoneMusicNoDelay = { text = "ENABLE_MUSIC_LOOPING" },
|
||||
Sound_EnableSoundWhenGameIsInBG = { text = "ENABLE_BGSOUND" },
|
||||
Sound_EnableReverb = { text = "ENABLE_REVERB" },
|
||||
Sound_EnableHardware = { text = "ENABLE_HARDWARE" },
|
||||
Sound_EnableSoftwareHRTF = { text = "ENABLE_SOFTWARE_HRTF" },
|
||||
Sound_EnableDSPEffects = { text = "ENABLE_DSP_EFFECTS" },
|
||||
Sound_SFXVolume = { text = "SOUND_VOLUME", minValue = 0, maxValue = 1, valueStep = 0.1, },
|
||||
Sound_MusicVolume = { text = "MUSIC_VOLUME", minValue = 0, maxValue = 1, valueStep = 0.1, },
|
||||
Sound_AmbienceVolume = { text = "AMBIENCE_VOLUME", minValue = 0, maxValue = 1, valueStep = 0.1, },
|
||||
Sound_MasterVolume = { text = "MASTER_VOLUME", minValue = 0, maxValue = 1, valueStep = SOUND_MASTERVOLUME_STEP, },
|
||||
Sound_NumChannels = { text = "SOUND_CHANNELS", minValue = 32, maxValue = 64, valueStep = 32, },
|
||||
Sound_OutputQuality = { text = "SOUND_QUALITY", minValue = 0, maxValue = 2, valueStep = 1 },
|
||||
}
|
||||
|
||||
function AudioOptionsSoundPanel_OnLoad (self)
|
||||
self.name = SOUND_LABEL;
|
||||
self.options = SoundPanelOptions;
|
||||
BlizzardOptionsPanel_OnLoad(self, AudioOptionsPanel_Okay, AudioOptionsPanel_Cancel, AudioOptionsPanel_Default, AudioOptionsPanel_Refresh);
|
||||
OptionsFrame_AddCategory(AudioOptionsFrame, self);
|
||||
end
|
||||
|
||||
function AudioOptionsSoundPanelHardwareDropDown_OnLoad (self)
|
||||
self.cvar = "Sound_OutputDriverIndex";
|
||||
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
local deviceName = Sound_GameSystem_GetOutputDriverNameByIndex(selectedDriverIndex);
|
||||
self.defaultValue = BlizzardOptionsPanel_GetCVarDefaultSafe(self.cvar);
|
||||
self.value = selectedDriverIndex;
|
||||
self.newValue = selectedDriverIndex;
|
||||
self.restart = true;
|
||||
|
||||
UIDropDownMenu_SetWidth(self, 136);
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsSoundPanelHardwareDropDown_Initialize);
|
||||
|
||||
self.SetValue =
|
||||
function (self, value)
|
||||
self.value = value;
|
||||
BlizzardOptionsPanel_SetCVarSafe(self.cvar, value);
|
||||
end
|
||||
self.GetValue =
|
||||
function (self)
|
||||
return BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
end
|
||||
self.RefreshValue =
|
||||
function (self)
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
local deviceName = Sound_GameSystem_GetOutputDriverNameByIndex(selectedDriverIndex);
|
||||
self.value = selectedDriverIndex;
|
||||
self.newValue = selectedDriverIndex;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsSoundPanelHardwareDropDown_Initialize);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsSoundPanelHardwareDropDown_Initialize(self)
|
||||
local selectedValue = UIDropDownMenu_GetSelectedValue(self);
|
||||
local num = Sound_GameSystem_GetNumOutputDrivers();
|
||||
local info = UIDropDownMenu_CreateInfo();
|
||||
for index=0,num-1,1 do
|
||||
info.text = Sound_GameSystem_GetOutputDriverNameByIndex(index);
|
||||
info.value = index;
|
||||
info.checked = nil;
|
||||
if (selectedValue and index == selectedValue) then
|
||||
UIDropDownMenu_SetText(self, info.text);
|
||||
info.checked = 1;
|
||||
else
|
||||
info.checked = nil;
|
||||
end
|
||||
info.func = AudioOptionsSoundPanelHardwareDropDown_OnClick;
|
||||
|
||||
UIDropDownMenu_AddButton(info);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsSoundPanelHardwareDropDown_OnClick(self)
|
||||
local value = self.value;
|
||||
local dropdown = AudioOptionsSoundPanelHardwareDropDown;
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, value);
|
||||
|
||||
local prevValue = dropdown:GetValue();
|
||||
dropdown:SetValue(value);
|
||||
if ( dropdown.restart and prevValue ~= value ) then
|
||||
AudioOptionsFrame_AudioRestart();
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- [[ Voice Options Panel ]] --
|
||||
|
||||
VoicePanelOptions = {
|
||||
EnableVoiceChat = { text = "ENABLE_VOICECHAT" },
|
||||
EnableMicrophone = { text = "ENABLE_MICROPHONE" },
|
||||
OutboundChatVolume = { text = "VOICE_INPUT_VOLUME", minValue = 0.25, maxValue = 2.5, valueStep = 0.05 },
|
||||
InboundChatVolume = { text = "VOICE_OUTPUT_VOLUME", minValue = 0, maxValue = 1, valueStep = 0.01 },
|
||||
ChatSoundVolume = { text = "", minValue = 0, maxValue = 1, valueStep = 0.01, tooltip = OPTION_TOOLTIP_VOICE_SOUND },
|
||||
ChatMusicVolume = { text = "", minValue = 0, maxValue = 1, valueStep = 0.01, tooltip = OPTION_TOOLTIP_VOICE_MUSIC },
|
||||
ChatAmbienceVolume = { text = "", minValue = 0, maxValue = 1, valueStep = 0.01, tooltip = OPTION_TOOLTIP_VOICE_AMBIENCE },
|
||||
PushToTalkSound = { text = "PUSHTOTALK_SOUND_TEXT" },
|
||||
VoiceActivationSensitivity = { text = "VOICE_ACTIVATION_SENSITIVITY", minValue = 0, maxValue = 1, valueStep = 0.02 },
|
||||
}
|
||||
|
||||
local AudioOptionsVoicePanelDisableList =
|
||||
{
|
||||
AudioOptionsVoicePanelChatMode1Label = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelAudioLabel = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelAudioDescription = HIGHLIGHT_FONT_COLOR,
|
||||
AudioOptionsVoicePanelAudioOff = HIGHLIGHT_FONT_COLOR,
|
||||
AudioOptionsVoicePanelAudioNormal = HIGHLIGHT_FONT_COLOR,
|
||||
AudioOptionsVoicePanelSpeakerVolumeLabel = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelSoundFadeLabel = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelMusicFadeLabel = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelAmbienceFadeLabel = NORMAL_FONT_COLOR,
|
||||
};
|
||||
|
||||
local AudioOptionsVoicePanelFrameMicrophoneList =
|
||||
{
|
||||
AudioOptionsVoicePanelMicrophoneVolumeLabel = NORMAL_FONT_COLOR,
|
||||
AudioOptionsVoicePanelMicTestText = NORMAL_FONT_COLOR,
|
||||
PlayLoopbackSoundButtonTexture = NORMAL_FONT_COLOR,
|
||||
RecordLoopbackSoundButtonTexture = RED_FONT_COLOR,
|
||||
};
|
||||
|
||||
function AudioOptionsVoicePanel_Refresh (self)
|
||||
AudioOptionsPanel_Refresh(self);
|
||||
AudioOptionsVoicePanelEnableVoice_UpdateControls(GetCVar(AudioOptionsVoicePanelEnableVoice.cvar));
|
||||
AudioOptionsVoicePanelBindingType_Update(GetCVar(AudioOptionsVoicePanelChatModeDropDown.cvar));
|
||||
AudioOptionsVoicePanelKeyBindingButton_Refresh();
|
||||
AudioOptionsVoicePanelKeyBindingButton_SetTooltip();
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_OnLoad (self)
|
||||
self.name = VOICE_LABEL;
|
||||
self.options = VoicePanelOptions;
|
||||
BlizzardOptionsPanel_OnLoad(self, AudioOptionsPanel_Okay, AudioOptionsPanel_Cancel, AudioOptionsPanel_Default, AudioOptionsVoicePanel_Refresh);
|
||||
self:SetScript("OnEvent", AudioOptionsVoicePanel_OnEvent);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_OnEvent (self, event, ...)
|
||||
if ( event == "PLAYER_ENTERING_WORLD" ) then
|
||||
if ( IsVoiceChatAllowedByServer() ) then
|
||||
OptionsFrame_AddCategory(AudioOptionsFrame, self);
|
||||
BlizzardOptionsPanel_OnEvent(self, event, ...);
|
||||
end
|
||||
self:UnregisterEvent(event);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_OnShow (self)
|
||||
VoiceChatTalkers:SetAlpha(1);
|
||||
VoiceChatTalkers.optionsLock = true;
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_OnHide (self)
|
||||
AudioOptionsVoicePanelKeyBindingButton_CancelBinding();
|
||||
VoiceChatTalkers.optionsLock = nil;
|
||||
if ( VoiceChatTalkers_CanHide() ) then
|
||||
VoiceChatTalkers_FadeOut();
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelEnableVoice_UpdateControls (value)
|
||||
local voiceChatEnabled = value == "1";
|
||||
if ( VoiceIsDisabledByClient() ) then
|
||||
--Comsat is disabled either because the computer is way old (No SSE) or another copy of WoW is running.
|
||||
BlizzardOptionsPanel_SetCVarSafe("EnableVoiceChat", 0);
|
||||
voiceChatEnabled = false;
|
||||
AudioOptionsVoicePanelEnableVoice:Hide();
|
||||
AudioOptionsVoicePanelDisabledMessage:Show();
|
||||
elseif ( not AudioOptionsVoicePanelEnableVoice:IsShown() ) then
|
||||
--Pretty certain this won't be changing dynamically, but better safe than sorry.
|
||||
AudioOptionsVoicePanelEnableVoice:Show();
|
||||
AudioOptionsVoicePanelDisabledMessage:Hide();
|
||||
end
|
||||
if ( voiceChatEnabled ) then
|
||||
UIDropDownMenu_EnableDropDown(AudioOptionsVoicePanelOutputDeviceDropDown);
|
||||
UIDropDownMenu_EnableDropDown(AudioOptionsVoicePanelChatModeDropDown);
|
||||
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButton:Enable();
|
||||
|
||||
for index, value in pairs(AudioOptionsVoicePanelDisableList) do
|
||||
_G[index]:SetVertexColor(value.r, value.g, value.b);
|
||||
end
|
||||
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelVoiceActivateSlider);
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelSpeakerVolume);
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelSoundFade);
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelMusicFade);
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelAmbienceFade);
|
||||
|
||||
AudioOptionsVoicePanelEnableMicrophone:Enable();
|
||||
AudioOptionsVoicePanelPushToTalkSound:Enable();
|
||||
AudioOptionsVoicePanelEnableMicrophone_UpdateControls(AudioOptionsVoicePanelEnableMicrophone:GetChecked());
|
||||
|
||||
if ( ChannelPullout:IsShown() ) then
|
||||
ChannelPullout_ToggleDisplay();
|
||||
end
|
||||
else
|
||||
UIDropDownMenu_DisableDropDown(AudioOptionsVoicePanelOutputDeviceDropDown);
|
||||
UIDropDownMenu_DisableDropDown(AudioOptionsVoicePanelChatModeDropDown);
|
||||
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButton:Disable();
|
||||
|
||||
for index, value in pairs(AudioOptionsVoicePanelDisableList) do
|
||||
_G[index]:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
|
||||
end
|
||||
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelVoiceActivateSlider);
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelSpeakerVolume);
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelSoundFade);
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelMusicFade);
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelAmbienceFade);
|
||||
|
||||
AudioOptionsVoicePanelEnableMicrophone:Disable();
|
||||
AudioOptionsVoicePanelPushToTalkSound:Disable();
|
||||
AudioOptionsVoicePanelEnableMicrophone_UpdateControls(AudioOptionsVoicePanelEnableMicrophone:GetChecked());
|
||||
|
||||
if ( ChannelPullout:IsShown() ) then
|
||||
ChannelPullout_ToggleDisplay();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_DisableMicrophoneControls ()
|
||||
UIDropDownMenu_DisableDropDown(AudioOptionsVoicePanelInputDeviceDropDown);
|
||||
RecordLoopbackSoundButton:Disable();
|
||||
PlayLoopbackSoundButton:Disable();
|
||||
VoiceChat_StopRecordingLoopbackSound();
|
||||
VoiceChat_StopPlayingLoopbackSound();
|
||||
|
||||
for index in pairs(AudioOptionsVoicePanelFrameMicrophoneList) do
|
||||
_G[index]:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
|
||||
end
|
||||
|
||||
BlizzardOptionsPanel_Slider_Disable(AudioOptionsVoicePanelMicrophoneVolume);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_EnableMicrophoneControls ()
|
||||
UIDropDownMenu_EnableDropDown(AudioOptionsVoicePanelInputDeviceDropDown);
|
||||
RecordLoopbackSoundButton:Enable();
|
||||
PlayLoopbackSoundButton:Enable();
|
||||
|
||||
for index, value in pairs(AudioOptionsVoicePanelFrameMicrophoneList) do
|
||||
_G[index]:SetVertexColor(value.r, value.g, value.b);
|
||||
end
|
||||
|
||||
BlizzardOptionsPanel_Slider_Enable(AudioOptionsVoicePanelMicrophoneVolume);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelEnableMicrophone_UpdateControls (value)
|
||||
if ( not AudioOptionsVoicePanelEnableVoice:GetChecked() or
|
||||
not value or value == "0" or
|
||||
VoiceIsDisabledByClient() ) then
|
||||
--If VoiceChat is disabled, the microphone controls should be too.
|
||||
AudioOptionsVoicePanel_DisableMicrophoneControls();
|
||||
else
|
||||
AudioOptionsVoicePanel_EnableMicrophoneControls();
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelBindingType_Update (value)
|
||||
local mode = tonumber(value) + 1;
|
||||
if ( mode == 1 ) then
|
||||
AudioOptionsVoicePanelChatMode1:Show();
|
||||
AudioOptionsVoicePanelChatMode2:Hide();
|
||||
else
|
||||
AudioOptionsVoicePanelChatMode1:Hide();
|
||||
AudioOptionsVoicePanelChatMode2:Show();
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_Refresh ()
|
||||
PUSH_TO_TALK_BUTTON = BlizzardOptionsPanel_GetCVarSafe("PushToTalkButton");
|
||||
local bindingText = GetBindingText(PUSH_TO_TALK_BUTTON, "KEY_");
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButtonHiddenText:SetText(bindingText);
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButton:SetText(bindingText);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_SetTooltip ()
|
||||
local textWidth = AudioOptionsVoicePanelChatMode1KeyBindingButtonHiddenText:GetWidth();
|
||||
if ( textWidth > 135 ) then
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButton.tooltip = AudioOptionsVoicePanelChatMode1KeyBindingButtonHiddenText:GetText();
|
||||
else
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButton.tooltip = nil;
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_OnEnter (self)
|
||||
if ( self.tooltip ) then
|
||||
GameTooltip:SetOwner(self);
|
||||
GameTooltip:SetText(self.tooltip);
|
||||
GameTooltip:Show();
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_OnKeyUp (self, key)
|
||||
if ( self.buttonPressed ) then
|
||||
AudioOptionsVoicePanelKeyBindingButton_BindButton(self);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_OnKeyDown (self, key)
|
||||
if ( GetBindingFromClick(key) == "SCREENSHOT" ) then
|
||||
RunBinding("SCREENSHOT");
|
||||
return;
|
||||
end
|
||||
if ( self.buttonPressed ) then
|
||||
if ( key == "UNKNOWN" ) then
|
||||
return;
|
||||
end
|
||||
|
||||
if ( key == "LSHIFT" or key == "RSHIFT" or key == "LCTRL" or key == "RCTRL" or key == "LALT" or key == "RALT" ) then
|
||||
if ( PUSH_TO_TALK_MODIFIER == "" ) then
|
||||
PUSH_TO_TALK_MODIFIER = key;
|
||||
else
|
||||
PUSH_TO_TALK_MODIFIER = PUSH_TO_TALK_MODIFIER.."-"..key;
|
||||
end
|
||||
return;
|
||||
elseif ( PUSH_TO_TALK_BUTTON ~= "" ) then
|
||||
AudioOptionsVoicePanelBindingOutputText:SetText(ERROR_CANNOT_BIND);
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText("");
|
||||
AudioOptionsVoicePanelBindingOutput:SetAlpha(1.0);
|
||||
AudioOptionsVoicePanelBindingOutput.fade = VOICE_OPTIONS_BINDING_FAIL_FADE;
|
||||
self:UnlockHighlight();
|
||||
self.buttonPressed = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if ( PUSH_TO_TALK_MODIFIER == "" ) then
|
||||
PUSH_TO_TALK_BUTTON = key;
|
||||
else
|
||||
PUSH_TO_TALK_BUTTON = PUSH_TO_TALK_MODIFIER.."-"..key;
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_CancelBinding ()
|
||||
local self = AudioOptionsVoicePanelChatMode1KeyBindingButton;
|
||||
self:UnlockHighlight();
|
||||
self.buttonPressed = nil;
|
||||
AudioOptionsVoicePanelBindingOutputText:SetText("");
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText("");
|
||||
self:SetScript("OnKeyDown", nil);
|
||||
self:SetScript("OnKeyUp", nil);
|
||||
AudioOptionsVoicePanelBindingOutput:SetAlpha(1.0)
|
||||
AudioOptionsVoicePanelBindingOutput.fade = 0;
|
||||
UIFrameFadeIn(AudioOptionsVoicePanelBindingOutput, 0);
|
||||
PUSH_TO_TALK_BUTTON = "";
|
||||
PUSH_TO_TALK_MODIFIER = "";
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_OnClick (self, button)
|
||||
if ( button == "UNKNOWN" ) then
|
||||
return;
|
||||
end
|
||||
if ( not IsShiftKeyDown() and not IsControlKeyDown() and not IsAltKeyDown() ) then
|
||||
if ( button == "LeftButton" or button == "RightButton" ) then
|
||||
if ( self.buttonPressed ) then
|
||||
AudioOptionsVoicePanelKeyBindingButton_CancelBinding(self);
|
||||
else
|
||||
self:LockHighlight();
|
||||
self.buttonPressed = 1;
|
||||
AudioOptionsVoicePanelBindingOutputText:SetText(CAN_BIND_PTT);
|
||||
self:SetScript("OnKeyDown", AudioOptionsVoicePanelKeyBindingButton_OnKeyDown);
|
||||
self:SetScript("OnKeyUp", AudioOptionsVoicePanelKeyBindingButton_OnKeyUp);
|
||||
AudioOptionsVoicePanelBindingOutput:SetAlpha(1.0)
|
||||
AudioOptionsVoicePanelBindingOutput.fade = 0;
|
||||
UIFrameFadeIn(AudioOptionsVoicePanelBindingOutput, 0);
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText("");
|
||||
PUSH_TO_TALK_BUTTON = "";
|
||||
PUSH_TO_TALK_MODIFIER = "";
|
||||
end
|
||||
return;
|
||||
end
|
||||
end
|
||||
|
||||
if ( self.buttonPressed ) then
|
||||
if ( PUSH_TO_TALK_BUTTON ~= "" ) then
|
||||
AudioOptionsVoicePanelBindingOutputText:SetText(ERROR_CANNOT_BIND);
|
||||
AudioOptionsVoicePanelBindingOutput:SetAlpha(1.0);
|
||||
AudioOptionsVoicePanelBindingOutput.fade = VOICE_OPTIONS_BINDING_FAIL_FADE;
|
||||
AudioOptionsVoicePanelBindingOutputText:SetVertexColor(1, 1, 1);
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText("");
|
||||
self:UnlockHighlight();
|
||||
self.buttonPressed = nil;
|
||||
return;
|
||||
end
|
||||
|
||||
if ( PUSH_TO_TALK_MODIFIER == "" ) then
|
||||
PUSH_TO_TALK_BUTTON = button;
|
||||
else
|
||||
PUSH_TO_TALK_BUTTON = PUSH_TO_TALK_MODIFIER.."-"..button;
|
||||
end
|
||||
AudioOptionsVoicePanelKeyBindingButton_BindButton(self);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelKeyBindingButton_BindButton (self)
|
||||
if ( PUSH_TO_TALK_BUTTON == "" and PUSH_TO_TALK_MODIFIER ~= "" ) then
|
||||
PUSH_TO_TALK_BUTTON = PUSH_TO_TALK_MODIFIER;
|
||||
end
|
||||
if ( PUSH_TO_TALK_BUTTON ~= "" ) then
|
||||
BlizzardOptionsPanel_SetCVarSafe("PushToTalkButton", PUSH_TO_TALK_BUTTON);
|
||||
local bindingText = GetBindingText(PUSH_TO_TALK_BUTTON, "KEY_");
|
||||
self:SetText(bindingText);
|
||||
AudioOptionsVoicePanelChatMode1KeyBindingButtonHiddenText:SetText(bindingText);
|
||||
|
||||
self:UnlockHighlight();
|
||||
self.buttonPressed = nil;
|
||||
|
||||
local currentbinding = GetBindingByKey(PUSH_TO_TALK_BUTTON);
|
||||
if ( currentbinding ) then
|
||||
UIErrorsFrame:AddMessage(format(ALREADY_BOUND, GetBindingText(currentbinding, "BINDING_NAME_")), 1.0, 1.0, 0.0, 1.0);
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText(format(ALREADY_BOUND, GetBindingText(currentbinding, "BINDING_NAME_")));
|
||||
else
|
||||
AudioOptionsVoicePanelBindingOutputTextConflict:SetText("");
|
||||
end
|
||||
|
||||
AudioOptionsVoicePanelBindingOutputText:SetText(PTT_BOUND);
|
||||
AudioOptionsVoicePanelBindingOutput:SetAlpha(1.0);
|
||||
AudioOptionsVoicePanelBindingOutput.fade = VOICE_OPTIONS_BINDING_SUCCESS_FADE;
|
||||
self:SetScript("OnKeyDown", nil);
|
||||
self:SetScript("OnKeyUp", nil);
|
||||
end
|
||||
AudioOptionsVoicePanelKeyBindingButton_SetTooltip();
|
||||
if ( GameTooltip:GetOwner() == self ) then
|
||||
AudioOptionsVoicePanelKeyBindingButton_OnEnter(self);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelBindingOutput_OnUpdate(self, elapsed)
|
||||
if ( self.fade and self.fade > 0 ) then
|
||||
self:SetAlpha(self.fade);
|
||||
self.fade = self.fade - elapsed;
|
||||
if ( self.fade < 0 ) then
|
||||
self.fade = 0;
|
||||
self:SetAlpha(0);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_SetOutputDevice(deviceIndex)
|
||||
VoiceSelectOutputDevice(VoiceEnumerateOutputDevices(deviceIndex));
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanel_SetInputDevice(deviceIndex)
|
||||
VoiceSelectCaptureDevice(VoiceEnumerateCaptureDevices(deviceIndex));
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelInputDeviceDropDown_OnLoad (self)
|
||||
UIDropDownMenu_SetWidth(self, 140);
|
||||
|
||||
self.cvar = "Sound_VoiceChatInputDriverIndex";
|
||||
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.defaultValue = BlizzardOptionsPanel_GetCVarDefaultSafe(self.cvar);
|
||||
self.value = selectedDriverIndex;
|
||||
self.nextValue = selectedDriverIndex;
|
||||
self.restart = true;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelInputDeviceDropDown_Initialize);
|
||||
|
||||
self.SetValue =
|
||||
function (self, value)
|
||||
self.value = value;
|
||||
AudioOptionsVoicePanel_SetInputDevice(value);
|
||||
BlizzardOptionsPanel_SetCVarSafe(self.cvar, value);
|
||||
end
|
||||
self.GetValue =
|
||||
function (self)
|
||||
return BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
end
|
||||
self.RefreshValue =
|
||||
function (self)
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.value = selectedDriverIndex;
|
||||
self.newValue = selectedDriverIndex;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelInputDeviceDropDown_Initialize);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelInputDeviceDropDown_Initialize(self)
|
||||
local selectedValue = UIDropDownMenu_GetSelectedValue(self);
|
||||
local num = Sound_ChatSystem_GetNumInputDrivers();
|
||||
local info = UIDropDownMenu_CreateInfo();
|
||||
for index=0,num-1,1 do
|
||||
info.text = Sound_ChatSystem_GetInputDriverNameByIndex(index);
|
||||
info.value = index;
|
||||
if (selectedValue and index == selectedValue) then
|
||||
info.checked = 1;
|
||||
UIDropDownMenu_SetText(self, info.text);
|
||||
else
|
||||
info.checked = nil;
|
||||
end
|
||||
info.func = AudioOptionsVoicePanelInputDeviceDropDown_OnClick;
|
||||
|
||||
UIDropDownMenu_AddButton(info);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelInputDeviceDropDown_OnClick(self)
|
||||
local value = self.value;
|
||||
local dropdown = AudioOptionsVoicePanelInputDeviceDropDown;
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, value);
|
||||
dropdown:SetValue(value);
|
||||
end
|
||||
|
||||
--==============================
|
||||
--
|
||||
-- Record Loopback functions
|
||||
--
|
||||
--==============================
|
||||
|
||||
function RecordLoopbackSoundButton_OnUpdate (self)
|
||||
if ( self.clicked ) then
|
||||
if ( not AudioOptionsVoicePanelEnableVoice:GetChecked() or
|
||||
not AudioOptionsVoicePanelEnableMicrophone:GetChecked() ) then
|
||||
-- NOTE: add VoiceIsDisabledByClient() if turning voice on and off ever happens dynamically
|
||||
RecordLoopbackSoundButton:Disable();
|
||||
RecordLoopbackSoundButtonTexture:SetVertexColor(0.5, 0.5, 0.5);
|
||||
else
|
||||
local isRecording = VoiceChat_IsRecordingLoopbackSound();
|
||||
if ( isRecording == 0 ) then
|
||||
RecordLoopbackSoundButton:Enable();
|
||||
RecordLoopbackSoundButtonTexture:SetVertexColor(1, 0, 0);
|
||||
self.clicked = nil;
|
||||
else
|
||||
RecordLoopbackSoundButton:Disable();
|
||||
RecordLoopbackSoundButtonTexture:SetVertexColor(0.5, 0.5, 0.5);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--==============================
|
||||
--
|
||||
-- VU Meter functions
|
||||
--
|
||||
--==============================
|
||||
|
||||
function LoopbackVUMeter_OnLoad (self)
|
||||
self:SetMinMaxValues(0, 100);
|
||||
self:SetValue(0);
|
||||
end
|
||||
|
||||
function LoopbackVUMeter_OnUpdate (self, elapsed)
|
||||
local isRecording = VoiceChat_IsRecordingLoopbackSound();
|
||||
local isPlaying = VoiceChat_IsPlayingLoopbackSound();
|
||||
if ( isRecording == 0 and isPlaying == 0 ) then
|
||||
self:SetValue(0);
|
||||
else
|
||||
local volume = VoiceChat_GetCurrentMicrophoneSignalLevel();
|
||||
self:SetValue(volume);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelChatModeDropDown_OnLoad (self)
|
||||
UIDropDownMenu_SetWidth(self, 140);
|
||||
|
||||
self.cvar = "VoiceChatMode";
|
||||
|
||||
local voiceChatMode = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.tooltip = _G["OPTION_TOOLTIP_VOICE_TYPE"..(voiceChatMode+1)];
|
||||
self.defaultValue = BlizzardOptionsPanel_GetCVarDefaultSafe(self.cvar);
|
||||
self.value = voiceChatMode;
|
||||
self.newValue = voiceChatMode;
|
||||
self.restart = true;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, voiceChatMode);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelChatModeDropDown_Initialize);
|
||||
|
||||
self.SetValue =
|
||||
function (self, value)
|
||||
self.value = value;
|
||||
BlizzardOptionsPanel_SetCVarSafe(self.cvar, value);
|
||||
AudioOptionsVoicePanelBindingType_Update(value);
|
||||
SetSelfMuteState();
|
||||
end
|
||||
self.GetValue =
|
||||
function (self)
|
||||
return BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
end
|
||||
self.RefreshValue =
|
||||
function (self)
|
||||
local voiceChatMode = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.tooltip = _G["OPTION_TOOLTIP_VOICE_TYPE"..(voiceChatMode+1)];
|
||||
self.value = voiceChatMode;
|
||||
self.newValue = voiceChatMode;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, voiceChatMode);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelChatModeDropDown_Initialize);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelChatModeDropDown_Initialize(self)
|
||||
local selectedValue = UIDropDownMenu_GetSelectedValue(self);
|
||||
local info = UIDropDownMenu_CreateInfo();
|
||||
|
||||
info.text = PUSH_TO_TALK;
|
||||
info.func = AudioOptionsVoicePanelChatModeDropDown_OnClick;
|
||||
info.value = 0;
|
||||
if ( info.value == selectedValue ) then
|
||||
info.checked = 1;
|
||||
UIDropDownMenu_SetText(self, info.text);
|
||||
else
|
||||
info.checked = nil;
|
||||
end
|
||||
info.tooltipTitle = PUSH_TO_TALK;
|
||||
info.tooltipText = OPTION_TOOLTIP_VOICE_TYPE1;
|
||||
UIDropDownMenu_AddButton(info);
|
||||
|
||||
info.text = VOICE_ACTIVATED;
|
||||
info.func = AudioOptionsVoicePanelChatModeDropDown_OnClick;
|
||||
info.value = 1;
|
||||
if ( info.value == selectedValue ) then
|
||||
info.checked = 1;
|
||||
UIDropDownMenu_SetText(self, info.text);
|
||||
else
|
||||
info.checked = nil;
|
||||
end
|
||||
info.tooltipTitle = VOICE_ACTIVATED;
|
||||
info.tooltipText = OPTION_TOOLTIP_VOICE_TYPE2;
|
||||
UIDropDownMenu_AddButton(info);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelChatModeDropDown_OnClick(self)
|
||||
local value = self.value;
|
||||
local dropdown = AudioOptionsVoicePanelChatModeDropDown;
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, value);
|
||||
dropdown.tooltip = _G["OPTION_TOOLTIP_VOICE_TYPE"..(value+1)];
|
||||
dropdown:SetValue(value);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelOutputDeviceDropDown_OnLoad (self)
|
||||
UIDropDownMenu_SetWidth(self, 140);
|
||||
|
||||
self.cvar = "Sound_VoiceChatOutputDriverIndex";
|
||||
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.defaultValue = BlizzardOptionsPanel_GetCVarDefaultSafe(self.cvar);
|
||||
self.value = selectedDriverIndex;
|
||||
self.nextValue = selectedDriverIndex;
|
||||
self.restart = true;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelOutputDeviceDropDown_Initialize);
|
||||
|
||||
self.SetValue =
|
||||
function (self, value)
|
||||
self.value = value;
|
||||
AudioOptionsVoicePanel_SetOutputDevice(value);
|
||||
BlizzardOptionsPanel_SetCVarSafe("Sound_VoiceChatOutputDriverIndex", value);
|
||||
end
|
||||
self.GetValue =
|
||||
function (self)
|
||||
return BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
end
|
||||
self.RefreshValue =
|
||||
function (self)
|
||||
local selectedDriverIndex = BlizzardOptionsPanel_GetCVarSafe(self.cvar);
|
||||
|
||||
self.value = selectedDriverIndex;
|
||||
self.nextValue = selectedDriverIndex;
|
||||
|
||||
UIDropDownMenu_SetSelectedValue(self, selectedDriverIndex);
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelOutputDeviceDropDown_Initialize);
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelOutputDeviceDropDown_Initialize(self)
|
||||
local selectedValue = UIDropDownMenu_GetSelectedValue(self);
|
||||
local num = Sound_ChatSystem_GetNumOutputDrivers();
|
||||
local info = UIDropDownMenu_CreateInfo();
|
||||
if ( num == 0 ) then
|
||||
UIDropDownMenu_SetText(self, "");
|
||||
else
|
||||
for index=0,num-1,1 do
|
||||
info.text = Sound_ChatSystem_GetOutputDriverNameByIndex(index);
|
||||
info.value = index;
|
||||
if (selectedValue and index == selectedValue) then
|
||||
info.checked = 1;
|
||||
UIDropDownMenu_SetText(self, info.text);
|
||||
else
|
||||
info.checked = nil;
|
||||
end
|
||||
info.func = AudioOptionsVoicePanelOutputDeviceDropDown_OnClick;
|
||||
|
||||
UIDropDownMenu_AddButton(info);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelOutputDeviceDropDown_OnClick(self)
|
||||
local value = self.value;
|
||||
local dropdown = AudioOptionsVoicePanelOutputDeviceDropDown;
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, value);
|
||||
dropdown:SetValue(value);
|
||||
end
|
||||
|
||||
function AudioOptionsVoicePanelOutputDeviceDropDown_OnEvent(self, event, ...)
|
||||
if ( event == "VOICE_CHAT_ENABLED_UPDATE" ) then
|
||||
UIDropDownMenu_Initialize(self, AudioOptionsVoicePanelOutputDeviceDropDown_Initialize);
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user