189 lines
5.4 KiB
Lua
189 lines
5.4 KiB
Lua
local f0_local0 = module
|
|
local f0_local1, f0_local2 = ...
|
|
f0_local0( f0_local1, package.seeall )
|
|
CoD.PrintModuleLoad( _NAME )
|
|
DEBUG_DISABLE_LUI_SPEECH_PROCESSING = false
|
|
waitingForOutstandingCommandConfirmation = false
|
|
root = 0
|
|
timerElement = 0
|
|
defaultConfidence = 0.16
|
|
whatCanISayConfidence = 0.65
|
|
pauseConfidence = 0.65
|
|
changeViewConfidence = 0.65
|
|
showMenuConfidence = 0.65
|
|
goBackConfidence = 0.65
|
|
muteConfidence = 0.65
|
|
compareConfidence = 0.65
|
|
shortcutMenuConfidence = 0.65
|
|
function EnableGrammars( f1_arg0 )
|
|
local f1_local0 = nil
|
|
f1_local0 = 0
|
|
if Engine.HasSpeechFeature() then
|
|
if f1_arg0 then
|
|
if 0 < #f1_arg0 then
|
|
for f1_local4, f1_local5 in ipairs( f1_arg0 ) do
|
|
Engine.SpeechEnableGrammar( f1_local5, true )
|
|
f1_local0 = f1_local0 + 1
|
|
end
|
|
end
|
|
else
|
|
DebugPrint( "Speech: WARNING! EnableGrammars() called with no grammar file array!" )
|
|
end
|
|
if 0 < f1_local0 then
|
|
Engine.SpeechEnable( true )
|
|
end
|
|
end
|
|
end
|
|
|
|
function DisableGrammars( f2_arg0 )
|
|
if Engine.HasSpeechFeature() then
|
|
if f2_arg0 and #f2_arg0 > 0 then
|
|
for f2_local3, f2_local4 in ipairs( f2_arg0 ) do
|
|
Engine.SpeechEnableGrammar( f2_local4, false )
|
|
end
|
|
end
|
|
Engine.SpeechEnable( false )
|
|
end
|
|
end
|
|
|
|
function Restart( f3_arg0 )
|
|
if Engine.HasSpeechFeature() then
|
|
DisableGrammars( f3_arg0 )
|
|
EnableGrammars( f3_arg0 )
|
|
end
|
|
end
|
|
|
|
function PlayGoodSound()
|
|
if Engine.HasSpeechFeature() and Engine.InFrontend() then
|
|
if Engine.IsVideoPlaying and Engine.IsVideoPlaying() == true then
|
|
return
|
|
end
|
|
Engine.PlaySound( CoD.SFX.UIKinectCommandGood )
|
|
end
|
|
end
|
|
|
|
function PlayBadSound()
|
|
if Engine.HasSpeechFeature() and Engine.InFrontend() then
|
|
if Engine.IsVideoPlaying and Engine.IsVideoPlaying() == true then
|
|
return
|
|
end
|
|
Engine.PlaySound( CoD.SFX.UIKinectCommandBad )
|
|
end
|
|
end
|
|
|
|
function PerformingSpeechAction()
|
|
if Engine.HasSpeechFeature() then
|
|
PlayGoodSound()
|
|
waitingForOutstandingCommandConfirmation = false
|
|
CancelSpeechFailTimer()
|
|
end
|
|
end
|
|
|
|
function SquelchSpeechAction()
|
|
if Engine.HasSpeechFeature() then
|
|
waitingForOutstandingCommandConfirmation = false
|
|
CancelSpeechFailTimer()
|
|
end
|
|
end
|
|
|
|
function LaunchSpeechFailTimer()
|
|
if Engine.HasSpeechFeature() then
|
|
local f8_local0 = Engine.GetLuiRoot()
|
|
if f8_local0 then
|
|
CancelSpeechFailTimer()
|
|
local self = LUI.UITimer.new( 250, {
|
|
name = "speech_fail_timer"
|
|
} )
|
|
self.id = "MenuSpeechFailTimer"
|
|
root = f8_local0
|
|
timerElement = self
|
|
waitingForOutstandingCommandConfirmation = true
|
|
root:addElement( timerElement )
|
|
end
|
|
end
|
|
end
|
|
|
|
function CancelSpeechFailTimer()
|
|
if Engine.HasSpeechFeature() then
|
|
waitingForOutstandingCommandConfirmation = false
|
|
if timerElement and timerElement ~= 0 and root and 0 ~= root then
|
|
root:removeElement( timerElement )
|
|
timerElement:close()
|
|
end
|
|
root = 0
|
|
timerElement = 0
|
|
end
|
|
end
|
|
|
|
ConfidenceOverrideForLanguageTable = {
|
|
LANGUAGE_ITALIAN = {
|
|
pause = {
|
|
overriddenConfidence = 0.32
|
|
}
|
|
},
|
|
LANGUAGE_SPANISH = {
|
|
pause = {
|
|
overriddenConfidence = 0.32
|
|
}
|
|
},
|
|
LANGUAGE_SPANISHNA = {
|
|
pause = {
|
|
overriddenConfidence = 0.32
|
|
}
|
|
}
|
|
}
|
|
function GetOverriddenConfidenceLevelForLanguage( f10_arg0, f10_arg1, f10_arg2 )
|
|
local f10_local0 = ConfidenceOverrideForLanguageTable[f10_arg2]
|
|
if f10_local0 ~= nil then
|
|
local f10_local1 = f10_local0[f10_arg0]
|
|
if f10_local1 ~= nil then
|
|
DebugPrint( "Speech: Overriding default confidence of " .. tostring( f10_arg1 ) .. " for action \"" .. tostring( f10_local1 ) .. "\" and instead using " .. tostring( f10_local1.overriddenConfidence ) .. " because our language is \"" .. tostring( f10_arg2 ) .. "\"." )
|
|
return f10_local1.overriddenConfidence
|
|
end
|
|
end
|
|
return f10_arg1
|
|
end
|
|
|
|
function IsOKToProcessSpeechActionForThisController( f11_arg0 )
|
|
local f11_local0 = Engine.GetLuiRoot()
|
|
if not f11_local0 then
|
|
return false
|
|
end
|
|
local f11_local1 = f11_local0.flowManager
|
|
if f11_local1 and f11_local1.menuInfoStack then
|
|
for f11_local5, f11_local6 in ipairs( f11_local1.menuInfoStack ) do
|
|
if f11_local6.menu ~= nil and f11_local6.menu.properties.exclusiveController ~= nil and f11_local6.menu.properties.exclusiveController ~= f11_arg0 then
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function ProcessActionEvent( f12_arg0, f12_arg1, f12_arg2 )
|
|
if Engine.HasSpeechFeature() then
|
|
if DEBUG_DISABLE_LUI_SPEECH_PROCESSING == true then
|
|
DebugPrint( "Speech: LUI SPEECH IS DISABLED. TOSSING EVENT " .. f12_arg1.action .. " (" .. f12_arg1.confidence .. ")" )
|
|
return true
|
|
elseif IsOKToProcessSpeechActionForThisController( f12_arg1.controller ) == false then
|
|
DebugPrint( "Speech: AN EXCLUSIVE MENU IS OPEN FOR A CONTROLLER THAT IS NOT CONTROLLER #" .. f12_arg1.controller .. ", THEREFORE WE ARE IGNORING THIS SPEECH COMMAND!" )
|
|
return false
|
|
elseif f12_arg2 and #f12_arg2 > 0 then
|
|
local f12_local0 = Languages[Engine.GetCurrentLanguage()]
|
|
local f12_local1 = nil
|
|
for f12_local5, f12_local6 in ipairs( f12_arg2 ) do
|
|
if string.lower( f12_arg1.action ) == string.lower( f12_local6.action ) then
|
|
if GetOverriddenConfidenceLevelForLanguage( f12_arg1.action, f12_local6.confidence, f12_local0 ) <= f12_arg1.confidence then
|
|
f12_local6.handler( f12_arg0, f12_arg1, f12_local6.extradata )
|
|
return true
|
|
end
|
|
DebugPrint( "Speech: WARNING! Ignoring \"" .. tostring( f12_arg1.action ) .. "\" because confidence level " .. tostring( f12_arg1.confidence ) .. " < " .. tostring( f12_local6.confidence ) .. "!" )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
LockTable( _M )
|