Fix Lua HUD interpolation
This commit is contained in:
parent
d639158a59
commit
8f87807c92
3 changed files with 25 additions and 14 deletions
|
|
@ -478,6 +478,21 @@ static int call_mapped(Hook_State *hook, const hook_t *map)
|
|||
return map->numHooks;
|
||||
}
|
||||
|
||||
static int call_mapped_hud(Hook_State *hook, const hook_t *map)
|
||||
{
|
||||
int k;
|
||||
|
||||
for (k = 0; k < map->numHooks; ++k)
|
||||
{
|
||||
hud_interpolate = hud_interpstring = hud_interplatch = false;
|
||||
hud_interpcounter++;
|
||||
get_hook(hook, map->ids, k);
|
||||
call_single_hook(hook);
|
||||
}
|
||||
|
||||
return map->numHooks;
|
||||
}
|
||||
|
||||
static int call_string_hooks(Hook_State *hook)
|
||||
{
|
||||
const stringhook_t *map = &stringHooks[hook->hook_type];
|
||||
|
|
@ -654,10 +669,11 @@ void LUA_HookHUD(huddrawlist_h list, int hook_type)
|
|||
begin_hook_values(&hook);
|
||||
|
||||
LUA_SetHudHook(hook_type, list);
|
||||
hud_interpcounter = 0;
|
||||
|
||||
hud_running = true; // local hook
|
||||
init_hook_call(&hook, 0, res_none);
|
||||
call_mapped(&hook, map);
|
||||
call_mapped_hud(&hook, map);
|
||||
hud_running = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1420,10 +1420,6 @@ boolean LUA_HudEnabled(enum hud option)
|
|||
void LUA_SetHudHook(int hook, huddrawlist_h list)
|
||||
{
|
||||
lua_getref(gL, lib_draw_ref);
|
||||
|
||||
// Update interpolation
|
||||
hud_interpolate = hud_interpstring = hud_interplatch = false;
|
||||
hud_interpcounter++;
|
||||
|
||||
lua_pushlightuserdata(gL, list);
|
||||
lua_setfield(gL, LUA_REGISTRYINDEX, "HUD_DRAW_LIST");
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ enum drawitem_e {
|
|||
DI_DrawString,
|
||||
DI_FadeScreen,
|
||||
DI_DrawTitleCardString,
|
||||
DI_DrawTitleCardStringBoss,
|
||||
DI_DrawKartString,
|
||||
DI_MAX,
|
||||
};
|
||||
|
|
@ -56,21 +57,17 @@ typedef struct drawitem_s {
|
|||
INT32 align; // drawString
|
||||
INT32 num; // drawNum, drawPaddedNum, drawPingNum
|
||||
UINT16 color; // fadeScreen
|
||||
INT32 timer; // drawTitleCardString
|
||||
};
|
||||
union {
|
||||
fixed_t vscale; // drawStretched
|
||||
fixed_t h; // drawFill
|
||||
INT32 digits; // drawPaddedNum
|
||||
UINT8 strength; // fadeScreen
|
||||
INT32 threshold; // drawTitleCardString
|
||||
};
|
||||
UINT8 *colormap;
|
||||
|
||||
union { // for title cards
|
||||
boolean bossmode;
|
||||
boolean p4;
|
||||
INT32 timer;
|
||||
INT32 threshold;
|
||||
};
|
||||
// pointers (and size_t's) last, for potentially better packing
|
||||
union {
|
||||
patch_t *patch;
|
||||
|
|
@ -530,12 +527,11 @@ void LUA_HUD_AddDrawTitleCardString(
|
|||
size_t i = AllocateDrawItem(list);
|
||||
drawitem_t *item = &list->items[i];
|
||||
item->id = GetItemId();
|
||||
item->type = DI_DrawTitleCardString;
|
||||
item->type = bossmode ? DI_DrawTitleCardStringBoss : DI_DrawTitleCardString;
|
||||
item->x = x;
|
||||
item->y = y;
|
||||
item->flags = flags;
|
||||
item->stroffset = CopyString(list, str);
|
||||
item->bossmode = bossmode;
|
||||
item->timer = timer;
|
||||
item->threshold = threshold;
|
||||
}
|
||||
|
|
@ -688,7 +684,10 @@ void LUA_HUD_DrawList(huddrawlist_h list)
|
|||
V_DrawFadeScreen(item->color, item->strength);
|
||||
break;
|
||||
case DI_DrawTitleCardString:
|
||||
V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, item->bossmode, item->timer, item->threshold);
|
||||
V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, false, item->timer, item->threshold);
|
||||
break;
|
||||
case DI_DrawTitleCardStringBoss:
|
||||
V_DrawTitleCardString(LERPS(x), LERPS(y), itemstr, item->flags, true, item->timer, item->threshold);
|
||||
break;
|
||||
case DI_DrawKartString:
|
||||
V_DrawKartString(LERPS(x), LERPS(y), item->flags, itemstr);
|
||||
|
|
|
|||
Loading…
Reference in a new issue