mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
SAPI: Accept either ARGB8 table or ColorString to specify colors
This commit is contained in:
parent
8f9af57314
commit
fb36c471d7
5 changed files with 77 additions and 54 deletions
|
@ -23,35 +23,23 @@ extern "C" {
|
|||
}
|
||||
|
||||
#include "util/numeric.h"
|
||||
#include "util/string.h"
|
||||
#include "common/c_converter.h"
|
||||
#include "constants.h"
|
||||
|
||||
|
||||
#define CHECK_TYPE(index, name, type) do { \
|
||||
int t = lua_type(L, (index)); \
|
||||
if (t != (type)) { \
|
||||
throw LuaError(std::string("Invalid ") + (name) + \
|
||||
" (expected " + lua_typename(L, (type)) + \
|
||||
" got " + lua_typename(L, t) + ")."); \
|
||||
} \
|
||||
} while(0)
|
||||
int t = lua_type(L, (index)); \
|
||||
if (t != (type)) { \
|
||||
throw LuaError(std::string("Invalid ") + (name) + \
|
||||
" (expected " + lua_typename(L, (type)) + \
|
||||
" got " + lua_typename(L, t) + ")."); \
|
||||
} \
|
||||
} while(0)
|
||||
#define CHECK_POS_COORD(name) CHECK_TYPE(-1, "position coordinate '" name "'", LUA_TNUMBER)
|
||||
#define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE)
|
||||
|
||||
|
||||
void push_ARGB8(lua_State *L, video::SColor color)
|
||||
{
|
||||
lua_newtable(L);
|
||||
lua_pushnumber(L, color.getAlpha());
|
||||
lua_setfield(L, -2, "a");
|
||||
lua_pushnumber(L, color.getRed());
|
||||
lua_setfield(L, -2, "r");
|
||||
lua_pushnumber(L, color.getGreen());
|
||||
lua_setfield(L, -2, "g");
|
||||
lua_pushnumber(L, color.getBlue());
|
||||
lua_setfield(L, -2, "b");
|
||||
}
|
||||
|
||||
void push_v3f(lua_State *L, v3f p)
|
||||
{
|
||||
lua_newtable(L);
|
||||
|
@ -176,6 +164,19 @@ v3f check_v3f(lua_State *L, int index)
|
|||
return pos;
|
||||
}
|
||||
|
||||
void push_ARGB8(lua_State *L, video::SColor color)
|
||||
{
|
||||
lua_newtable(L);
|
||||
lua_pushnumber(L, color.getAlpha());
|
||||
lua_setfield(L, -2, "a");
|
||||
lua_pushnumber(L, color.getRed());
|
||||
lua_setfield(L, -2, "r");
|
||||
lua_pushnumber(L, color.getGreen());
|
||||
lua_setfield(L, -2, "g");
|
||||
lua_pushnumber(L, color.getBlue());
|
||||
lua_setfield(L, -2, "b");
|
||||
}
|
||||
|
||||
void pushFloatPos(lua_State *L, v3f p)
|
||||
{
|
||||
p /= BS;
|
||||
|
@ -212,13 +213,31 @@ v3s16 check_v3s16(lua_State *L, int index)
|
|||
return floatToInt(pf, 1.0);
|
||||
}
|
||||
|
||||
video::SColor readARGB8(lua_State *L, int index)
|
||||
bool read_color(lua_State *L, int index, video::SColor *color)
|
||||
{
|
||||
if (lua_istable(L, index)) {
|
||||
*color = read_ARGB8(L, index);
|
||||
} else if (lua_isnumber(L, index)) {
|
||||
color->set(lua_tonumber(L, index));
|
||||
} else if (lua_isstring(L, index)) {
|
||||
video::SColor parsed_color;
|
||||
if (!parseColorString(lua_tostring(L, index), parsed_color, true))
|
||||
return false;
|
||||
|
||||
*color = parsed_color;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
video::SColor read_ARGB8(lua_State *L, int index)
|
||||
{
|
||||
video::SColor color(0);
|
||||
CHECK_TYPE(index, "ARGB color", LUA_TTABLE);
|
||||
lua_getfield(L, index, "a");
|
||||
if(lua_isnumber(L, -1))
|
||||
color.setAlpha(lua_tonumber(L, -1));
|
||||
color.setAlpha(lua_isnumber(L, -1) ? lua_tonumber(L, -1) : 0xFF);
|
||||
lua_pop(L, 1);
|
||||
lua_getfield(L, index, "r");
|
||||
color.setRed(lua_tonumber(L, -1));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue