Merge branch 'expose-clip-rect' into 'master'

Expose clip rect functions to lua

See merge request KartKrew/RingRacers!39
This commit is contained in:
Sal 2024-08-28 22:02:06 +00:00
commit 6efa0d6d0f
4 changed files with 91 additions and 3 deletions

View file

@ -688,11 +688,11 @@ void LUA_HookHUD(huddrawlist_h list, int hook_type)
hud_running = true; // local hook hud_running = true; // local hook
// Catch runaway clipping rectangles.
V_ClearClipRect();
init_hook_call(&hook, 0, res_none); init_hook_call(&hook, 0, res_none);
call_mapped(&hook, &hudHookIds[hook_type]); call_mapped(&hook, &hudHookIds[hook_type]);
// Catch runaway clipping rectangles.
V_ClearClipRect();
hud_running = false; hud_running = false;
} }

View file

@ -893,6 +893,45 @@ static int libd_drawKartString(lua_State *L)
return 0; return 0;
} }
static int libd_setClipRect(lua_State *L)
{
fixed_t x = luaL_checkinteger(L, 1);
fixed_t y = luaL_checkinteger(L, 2);
fixed_t w = luaL_checkinteger(L, 3);
fixed_t h = luaL_checkinteger(L, 4);
INT32 flags = luaL_optinteger(L, 5, 0);
huddrawlist_h list;
flags &= ~V_PARAMMASK; // Don't let crashes happen.
HUDONLY
lua_getfield(L, LUA_REGISTRYINDEX, "HUD_DRAW_LIST");
list = (huddrawlist_h) lua_touserdata(L, -1);
lua_pop(L, 1);
if (LUA_HUD_IsDrawListValid(list))
LUA_HUD_AddSetClipRect(list, x, y, w, h, flags);
else
V_SetClipRect(x, y, w, h, flags);
return 0;
}
static int libd_clearClipRect(lua_State *L)
{
huddrawlist_h list;
HUDONLY
lua_getfield(L, LUA_REGISTRYINDEX, "HUD_DRAW_LIST");
list = (huddrawlist_h) lua_touserdata(L, -1);
lua_pop(L, 1);
if (LUA_HUD_IsDrawListValid(list))
LUA_HUD_AddClearClipRect(list);
else
V_ClearClipRect();
return 0;
}
static int libd_titleCardStringWidth(lua_State *L) static int libd_titleCardStringWidth(lua_State *L)
{ {
const char *str = luaL_checkstring(L, 1); const char *str = luaL_checkstring(L, 1);
@ -1111,6 +1150,8 @@ static luaL_Reg lib_draw[] = {
{"drawString", libd_drawString}, {"drawString", libd_drawString},
{"drawTitleCardString", libd_drawTitleCardString}, {"drawTitleCardString", libd_drawTitleCardString},
{"drawKartString", libd_drawKartString}, {"drawKartString", libd_drawKartString},
{"setClipRect", libd_setClipRect},
{"clearClipRect", libd_clearClipRect},
// misc // misc
{"stringWidth", libd_stringWidth}, {"stringWidth", libd_stringWidth},
{"titleCardStringWidth", libd_titleCardStringWidth}, {"titleCardStringWidth", libd_titleCardStringWidth},

View file

@ -30,6 +30,8 @@ enum drawitem_e {
DI_FadeScreen, DI_FadeScreen,
DI_DrawTitleCardString, DI_DrawTitleCardString,
DI_DrawKartString, DI_DrawKartString,
DI_SetClipRect,
DI_ClearClipRect,
DI_MAX, DI_MAX,
}; };
@ -394,6 +396,34 @@ void LUA_HUD_AddDrawKartString(
item->flags = flags; item->flags = flags;
} }
void LUA_HUD_AddSetClipRect(
huddrawlist_h list,
fixed_t x,
fixed_t y,
fixed_t w,
fixed_t h,
INT32 flags
)
{
size_t i = AllocateDrawItem(list);
drawitem_t *item = &list->items[i];
item->type = DI_SetClipRect;
item->x = x;
item->y = y;
item->w = w;
item->h = h;
item->flags = flags;
}
void LUA_HUD_AddClearClipRect(
huddrawlist_h list
)
{
size_t i = AllocateDrawItem(list);
drawitem_t *item = &list->items[i];
item->type = DI_ClearClipRect;
}
void LUA_HUD_DrawList(huddrawlist_h list) void LUA_HUD_DrawList(huddrawlist_h list)
{ {
size_t i; size_t i;
@ -474,6 +504,12 @@ void LUA_HUD_DrawList(huddrawlist_h list)
case DI_DrawKartString: case DI_DrawKartString:
V_DrawTimerString(item->x, item->y, item->flags, itemstr); V_DrawTimerString(item->x, item->y, item->flags, itemstr);
break; break;
case DI_SetClipRect:
V_SetClipRect(item->x, item->y, item->w, item->h, item->flags);
break;
case DI_ClearClipRect:
V_ClearClipRect();
break;
default: default:
I_Error("can't draw draw list item: invalid draw list item type"); I_Error("can't draw draw list item: invalid draw list item type");
continue; continue;

View file

@ -122,6 +122,17 @@ void LUA_HUD_AddDrawKartString(
const char *str, const char *str,
INT32 flags INT32 flags
); );
void LUA_HUD_AddSetClipRect(
huddrawlist_h list,
fixed_t x,
fixed_t y,
fixed_t w,
fixed_t h,
INT32 flags
);
void LUA_HUD_AddClearClipRect(
huddrawlist_h list
);
// Draws the given draw list // Draws the given draw list
void LUA_HUD_DrawList(huddrawlist_h list); void LUA_HUD_DrawList(huddrawlist_h list);