Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
229 changes: 229 additions & 0 deletions code/scripting/api/libs/ui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
#include "scripting/api/objs/vecmath.h"
#include "scripting/lua/LuaTable.h"
#include "sound/audiostr.h"
#include "sound/fsspeech.h"
#include "stats/medals.h"
#include "stats/stats.h"

Expand Down Expand Up @@ -682,6 +683,63 @@ ADE_LIB_DERIV(l_UserInterface_Brief,
"API for accessing data related to the Briefing UI.",
l_UserInterface);

ADE_FUNC(playTextToSpeech,
l_UserInterface_Brief,
"string text",
"Speaks the given text using the engine's text-to-speech voice. Does nothing unless the briefing speech option is enabled. Color codes are stripped automatically.",
nullptr,
nullptr)
{
const char* text = nullptr;
if (!ade_get_args(L, "s", &text))
return ADE_RETURN_NIL;

fsspeech_play(FSSPEECH_FROM_BRIEFING, text);
return ADE_RETURN_NIL;
}

ADE_FUNC(stopTextToSpeech, l_UserInterface_Brief, nullptr, "Stops any text-to-speech playback.", nullptr, nullptr)
{
SCP_UNUSED(L);
fsspeech_stop();
return ADE_RETURN_NIL;
}

ADE_FUNC(pauseTextToSpeech,
l_UserInterface_Brief,
"boolean pause",
"Pauses (true) or resumes (false) text-to-speech playback.",
nullptr,
nullptr)
{
bool pause = true;
if (!ade_get_args(L, "b", &pause))
return ADE_RETURN_NIL;

fsspeech_pause(pause);
return ADE_RETURN_NIL;
}

ADE_FUNC(isTextToSpeechPlaying,
l_UserInterface_Brief,
nullptr,
"Returns whether text-to-speech is currently speaking.",
"boolean",
"true if speaking, false otherwise")
{
return ade_set_args(L, "b", fsspeech_playing());
}

ADE_FUNC(isTextToSpeechEnabled,
l_UserInterface_Brief,
nullptr,
"Returns whether briefing text-to-speech is enabled and available.",
"boolean",
"true if enabled, false otherwise")
{
return ade_set_args(L, "b", fsspeech_play_from(FSSPEECH_FROM_BRIEFING));
}

ADE_FUNC(getBriefingMusicName,
l_UserInterface_Brief,
nullptr,
Expand Down Expand Up @@ -1074,6 +1132,63 @@ ADE_LIB_DERIV(l_UserInterface_CmdBrief,
"API for accessing data related to the Command Briefing UI.",
l_UserInterface);

ADE_FUNC(playTextToSpeech,
l_UserInterface_CmdBrief,
"string text",
"Speaks the given text using the engine's text-to-speech voice. Does nothing unless the briefing speech option is enabled. Color codes are stripped automatically.",
nullptr,
nullptr)
{
const char* text = nullptr;
if (!ade_get_args(L, "s", &text))
return ADE_RETURN_NIL;

fsspeech_play(FSSPEECH_FROM_BRIEFING, text);
return ADE_RETURN_NIL;
}

ADE_FUNC(stopTextToSpeech, l_UserInterface_CmdBrief, nullptr, "Stops any text-to-speech playback.", nullptr, nullptr)
{
SCP_UNUSED(L);
fsspeech_stop();
return ADE_RETURN_NIL;
}

ADE_FUNC(pauseTextToSpeech,
l_UserInterface_CmdBrief,
"boolean pause",
"Pauses (true) or resumes (false) text-to-speech playback.",
nullptr,
nullptr)
{
bool pause = true;
if (!ade_get_args(L, "b", &pause))
return ADE_RETURN_NIL;

fsspeech_pause(pause);
return ADE_RETURN_NIL;
}

ADE_FUNC(isTextToSpeechPlaying,
l_UserInterface_CmdBrief,
nullptr,
"Returns whether text-to-speech is currently speaking.",
"boolean",
"true if speaking, false otherwise")
{
return ade_set_args(L, "b", fsspeech_playing());
}

ADE_FUNC(isTextToSpeechEnabled,
l_UserInterface_CmdBrief,
nullptr,
"Returns whether briefing text-to-speech is enabled and available.",
"boolean",
"true if enabled, false otherwise")
{
return ade_set_args(L, "b", fsspeech_play_from(FSSPEECH_FROM_BRIEFING));
}

ADE_FUNC(getCmdBriefing,
l_UserInterface_CmdBrief,
nullptr,
Expand All @@ -1092,6 +1207,63 @@ ADE_LIB_DERIV(l_UserInterface_Debrief,
"API for accessing data related to the Debriefing UI.",
l_UserInterface);

ADE_FUNC(playTextToSpeech,
l_UserInterface_Debrief,
"string text",
"Speaks the given text using the engine's text-to-speech voice. Does nothing unless the briefing speech option is enabled. Color codes are stripped automatically.",
nullptr,
nullptr)
{
const char* text = nullptr;
if (!ade_get_args(L, "s", &text))
return ADE_RETURN_NIL;

fsspeech_play(FSSPEECH_FROM_BRIEFING, text);
return ADE_RETURN_NIL;
}

ADE_FUNC(stopTextToSpeech, l_UserInterface_Debrief, nullptr, "Stops any text-to-speech playback.", nullptr, nullptr)
{
SCP_UNUSED(L);
fsspeech_stop();
return ADE_RETURN_NIL;
}

ADE_FUNC(pauseTextToSpeech,
l_UserInterface_Debrief,
"boolean pause",
"Pauses (true) or resumes (false) text-to-speech playback.",
nullptr,
nullptr)
{
bool pause = true;
if (!ade_get_args(L, "b", &pause))
return ADE_RETURN_NIL;

fsspeech_pause(pause);
return ADE_RETURN_NIL;
}

ADE_FUNC(isTextToSpeechPlaying,
l_UserInterface_Debrief,
nullptr,
"Returns whether text-to-speech is currently speaking.",
"boolean",
"true if speaking, false otherwise")
{
return ade_set_args(L, "b", fsspeech_playing());
}

ADE_FUNC(isTextToSpeechEnabled,
l_UserInterface_Debrief,
nullptr,
"Returns whether briefing text-to-speech is enabled and available.",
"boolean",
"true if enabled, false otherwise")
{
return ade_set_args(L, "b", fsspeech_play_from(FSSPEECH_FROM_BRIEFING));
}

ADE_FUNC(initDebriefing,
l_UserInterface_Debrief,
nullptr,
Expand Down Expand Up @@ -1707,6 +1879,63 @@ ADE_LIB_DERIV(l_UserInterface_TechRoom,
"API for accessing data related to the Tech Room UIs.",
l_UserInterface);

ADE_FUNC(playTextToSpeech,
l_UserInterface_TechRoom,
"string text",
"Speaks the given text using the engine's text-to-speech voice. Does nothing unless the tech room speech option is enabled. Color codes are stripped automatically.",
nullptr,
nullptr)
{
const char* text = nullptr;
if (!ade_get_args(L, "s", &text))
return ADE_RETURN_NIL;

fsspeech_play(FSSPEECH_FROM_TECHROOM, text);
return ADE_RETURN_NIL;
}

ADE_FUNC(stopTextToSpeech, l_UserInterface_TechRoom, nullptr, "Stops any text-to-speech playback.", nullptr, nullptr)
{
SCP_UNUSED(L);
fsspeech_stop();
return ADE_RETURN_NIL;
}

ADE_FUNC(pauseTextToSpeech,
l_UserInterface_TechRoom,
"boolean pause",
"Pauses (true) or resumes (false) text-to-speech playback.",
nullptr,
nullptr)
{
bool pause = true;
if (!ade_get_args(L, "b", &pause))
return ADE_RETURN_NIL;

fsspeech_pause(pause);
return ADE_RETURN_NIL;
}

ADE_FUNC(isTextToSpeechPlaying,
l_UserInterface_TechRoom,
nullptr,
"Returns whether text-to-speech is currently speaking.",
"boolean",
"true if speaking, false otherwise")
{
return ade_set_args(L, "b", fsspeech_playing());
}

ADE_FUNC(isTextToSpeechEnabled,
l_UserInterface_TechRoom,
nullptr,
"Returns whether tech room text-to-speech is enabled and available.",
"boolean",
"true if enabled, false otherwise")
{
return ade_set_args(L, "b", fsspeech_play_from(FSSPEECH_FROM_TECHROOM));
}

ADE_FUNC(buildMissionList,
l_UserInterface_TechRoom,
nullptr,
Expand Down
Loading