Files
fs2open.github.com/code/scripting/api/libs/hud.cpp
T
wookieejedi 1fb1368882 Add getHUDConfigShowStatus for scripting (#3961)
* Add view show status for HUD gauges in scripting

Many FSO mods use scripted HUD gauges, but previously the scripted HUD gauges were always forced to be on for the player, unlike retail gauges that can be toggled in the HUD Config screen. This PR allows scripters to view the show status of a HUD gauge, which is very useful for adding a check in the script to only show the gauge if a certain gauge is active. This is similar behavior to the getColor function, which allowed scripters to get the HUD Config colors of a given default gauge.

Tested and works as expected.

* appease clang
2022-01-27 11:17:38 +09:00

180 lines
4.1 KiB
C++

//
//
#include "hud.h"
#include "scripting/api/objs/hudgauge.h"
#include "hud/hud.h"
#include "hud/hudconfig.h"
namespace scripting {
namespace api {
//**********LIBRARY: HUD library
ADE_LIB(l_HUD, "HUD", "hu", "HUD library");
ADE_VIRTVAR(HUDDrawn, l_HUD, "boolean", "Current HUD draw status", "boolean", "If the HUD is drawn or not")
{
bool to_draw = false;
if(!ade_get_args(L, "*|b", &to_draw))
return ADE_RETURN_NIL;
if(ADE_SETTING_VAR)
{
if (to_draw)
HUD_draw = 1;
else
HUD_draw = 0;
}
if (HUD_draw)
return ADE_RETURN_TRUE;
else
return ADE_RETURN_FALSE;
}
ADE_VIRTVAR(HUDDisabledExceptMessages, l_HUD, "boolean", "Specifies if only the messages gauges of the hud are drawn", "boolean", "true if only the message gauges are drawn, false otherwise")
{
bool to_draw = false;
if (!ade_get_args(L, "*|b", &to_draw))
return ADE_RETURN_NIL;
if (ADE_SETTING_VAR)
{
hud_disable_except_messages(to_draw);
}
if (hud_disabled_except_messages())
return ADE_RETURN_TRUE;
else
return ADE_RETURN_FALSE;
}
ADE_VIRTVAR(HUDDefaultGaugeCount, l_HUD, "number", "Specifies the amount of HUD gauges defined by FSO", "number", "The number of FSO HUD gauges")
{
int amount = (int)default_hud_gauges.size();
return ade_set_args(L, "i", amount);
}
ADE_FUNC(getHUDConfigShowStatus, l_HUD, "number gaugeIndex", "Gets the HUD configuration show status for the specified default HUD gauge.", "boolean", "Returns show status or nil if gauge invalid")
{
int idx = -1;
if (!ade_get_args(L, "i", &idx))
return ADE_RETURN_NIL;
if ((idx < 0) || (idx >= (int)default_hud_gauges.size()))
return ADE_RETURN_NIL;
if (hud_config_show_flag_is_set(idx))
return ADE_RETURN_TRUE;
else
return ADE_RETURN_FALSE;
}
ADE_FUNC(setHUDGaugeColor, l_HUD,
"number gaugeIndex, [number red, number green, number blue, number alpha]",
"Modifies color used to draw the gauge in the pilot config", "boolean", "If the operation was successful")
{
int idx = -1;
int r = 0;
int g = 0;
int b = 0;
int a = 0;
if(!ade_get_args(L, "i|iiii", &idx, &r, &g, &b, &a))
return ADE_RETURN_FALSE;
if ((idx < 0) || (idx >= NUM_HUD_GAUGES))
return ADE_RETURN_FALSE;
gr_init_alphacolor(&HUD_config.clr[idx], r, g, b, a);
return ADE_RETURN_TRUE;
}
ADE_FUNC(getHUDGaugeColor,
l_HUD,
"number gaugeIndex",
"Color specified in the config to draw the gauge",
"number, number, number, number",
"Red, green, blue, and alpha of the gauge")
{
int idx = -1;
if(!ade_get_args(L, "i", &idx))
return ADE_RETURN_NIL;
if ((idx < 0) || (idx >= NUM_HUD_GAUGES))
return ADE_RETURN_NIL;
color c = HUD_config.clr[idx];
return ade_set_args(L, "iiii", (int) c.red, (int) c.green, (int) c.blue, (int) c.alpha);
}
ADE_FUNC(setHUDGaugeColorInMission, l_HUD,
"number gaugeIndex, [number red, number green, number blue, number alpha]",
"Set color currently used to draw the gauge", "boolean", "If the operation was successful")
{
int idx = -1;
int r = 0;
int g = 0;
int b = 0;
int a = 255;
if(!ade_get_args(L, "i|iiii", &idx, &r, &g, &b, &a))
return ADE_RETURN_FALSE;
if ((idx < 0) || (idx >= (int)default_hud_gauges.size()))
return ADE_RETURN_FALSE;
default_hud_gauges[idx]->updateColor(r, g, b, a);
return ADE_RETURN_TRUE;
}
ADE_FUNC(getHUDGaugeColorInMission,
l_HUD,
"number gaugeIndex",
"Color currently used to draw the gauge",
"number, number, number, number",
"Red, green, blue, and alpha of the gauge")
{
int idx = -1;
if(!ade_get_args(L, "i", &idx))
return ADE_RETURN_NIL;
if ((idx < 0) || (idx >= (int)default_hud_gauges.size()))
return ADE_RETURN_NIL;
color c = default_hud_gauges[idx]->getColor();
return ade_set_args(L, "iiii", (int) c.red, (int) c.green, (int) c.blue, (int) c.alpha);
}
ADE_FUNC(getHUDGaugeHandle, l_HUD, "string Name", "Returns a handle to a specified HUD gauge", "HudGauge", "HUD Gauge handle, or nil if invalid")
{
const char* name;
if (!ade_get_args(L, "s", &name))
return ADE_RETURN_NIL;
HudGauge* gauge = NULL;
gauge = hud_get_gauge(name);
if (gauge == NULL)
return ADE_RETURN_NIL;
else
return ade_set_args(L, "o", l_HudGauge.Set(gauge));
}
}
}