Merge branch 'lua-hud-get-rotsprites' into 'next'
Get rotated sprites with v.getSprite(2)Patch See merge request STJr/SRB2!773
This commit is contained in:
commit
11a1ce6df9
|
@ -428,7 +428,7 @@ static int libd_cachePatch(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// v.getSpritePatch(sprite, [frame, [angle]])
|
// v.getSpritePatch(sprite, [frame, [angle, [rollangle]]])
|
||||||
static int libd_getSpritePatch(lua_State *L)
|
static int libd_getSpritePatch(lua_State *L)
|
||||||
{
|
{
|
||||||
UINT32 i; // sprite prefix
|
UINT32 i; // sprite prefix
|
||||||
|
@ -479,13 +479,31 @@ static int libd_getSpritePatch(lua_State *L)
|
||||||
if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range?
|
if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range?
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#ifdef ROTSPRITE
|
||||||
|
if (lua_isnumber(L, 4))
|
||||||
|
{
|
||||||
|
// rotsprite?????
|
||||||
|
angle_t rollangle = luaL_checkangle(L, 4);
|
||||||
|
INT32 rot = R_GetRollAngle(rollangle);
|
||||||
|
|
||||||
|
if (rot) {
|
||||||
|
if (!(sprframe->rotsprite.cached & (1<<angle)))
|
||||||
|
R_CacheRotSprite(i, frame, NULL, sprframe, angle, sprframe->flip & (1<<angle));
|
||||||
|
LUA_PushUserdata(L, sprframe->rotsprite.patch[angle][rot], META_PATCH);
|
||||||
|
lua_pushboolean(L, false);
|
||||||
|
lua_pushboolean(L, true);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// push both the patch and it's "flip" value
|
// push both the patch and it's "flip" value
|
||||||
LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH);
|
LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH);
|
||||||
lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0);
|
lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// v.getSprite2Patch(skin, sprite, [super?,] [frame, [angle]])
|
// v.getSprite2Patch(skin, sprite, [super?,] [frame, [angle, [rollangle]]])
|
||||||
static int libd_getSprite2Patch(lua_State *L)
|
static int libd_getSprite2Patch(lua_State *L)
|
||||||
{
|
{
|
||||||
INT32 i; // skin number
|
INT32 i; // skin number
|
||||||
|
@ -574,6 +592,24 @@ static int libd_getSprite2Patch(lua_State *L)
|
||||||
if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range?
|
if (angle >= ((sprframe->rotate & SRF_3DGE) ? 16 : 8)) // out of range?
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#ifdef ROTSPRITE
|
||||||
|
if (lua_isnumber(L, 4))
|
||||||
|
{
|
||||||
|
// rotsprite?????
|
||||||
|
angle_t rollangle = luaL_checkangle(L, 4);
|
||||||
|
INT32 rot = R_GetRollAngle(rollangle);
|
||||||
|
|
||||||
|
if (rot) {
|
||||||
|
if (!(sprframe->rotsprite.cached & (1<<angle)))
|
||||||
|
R_CacheRotSprite(SPR_PLAY, frame, &skins[i].sprinfo[j], sprframe, angle, sprframe->flip & (1<<angle));
|
||||||
|
LUA_PushUserdata(L, sprframe->rotsprite.patch[angle][rot], META_PATCH);
|
||||||
|
lua_pushboolean(L, false);
|
||||||
|
lua_pushboolean(L, true);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// push both the patch and it's "flip" value
|
// push both the patch and it's "flip" value
|
||||||
LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH);
|
LUA_PushUserdata(L, W_CachePatchNum(sprframe->lumppat[angle], PU_PATCH), META_PATCH);
|
||||||
lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0);
|
lua_pushboolean(L, (sprframe->flip & (1<<angle)) != 0);
|
||||||
|
|
Loading…
Reference in New Issue