Bit fastes uluaGet* functions for vectors, color, rectangle and quaternion.
This commit is contained in:
@@ -59,6 +59,7 @@ DETAILED CHANGES:
|
|||||||
- ADDED: AudioStream management functions.
|
- ADDED: AudioStream management functions.
|
||||||
- ADDED: GetSoundStream and GetMusicStream.
|
- ADDED: GetSoundStream and GetMusicStream.
|
||||||
- ADDED: Audio stream effects example.
|
- ADDED: Audio stream effects example.
|
||||||
|
- CHANGE: Bit fastes uluaGet* functions for vectors, color, rectangle and quaternion.
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0
|
Release: ReiLua version 0.8.0 Using Raylib 5.0 and Forked Raygui 4.0
|
||||||
|
|||||||
382
src/lua_core.c
382
src/lua_core.c
@@ -25,6 +25,12 @@
|
|||||||
#include "platforms/core_web.c"
|
#include "platforms/core_web.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Custom implementation since LuaJIT doesn't have lua_geti. */
|
||||||
|
static void lua_getiCustom( lua_State* L, int index, int i ) {
|
||||||
|
lua_pushinteger( L, i ); // Push the index onto the stack
|
||||||
|
lua_gettable( L, index ); // Get the value at the index
|
||||||
|
}
|
||||||
|
|
||||||
/* Define types. */
|
/* Define types. */
|
||||||
|
|
||||||
/* Buffer. */
|
/* Buffer. */
|
||||||
@@ -2858,47 +2864,39 @@ Color uluaGetColor( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Color color = { 0, 0, 0, 255 };
|
Color color = { 0, 0, 0, 255 };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "r" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "r" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
color.r = (uint8_t)lua_tointeger( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "g" );
|
||||||
color.r = (uint8_t)lua_tointeger( L, -1 );
|
color.g = (uint8_t)lua_tointeger( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
lua_getfield( L, index, "b" );
|
||||||
color.g = (uint8_t)lua_tointeger( L, -1 );
|
color.b = (uint8_t)lua_tointeger( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 2:
|
lua_getfield( L, index, "a" );
|
||||||
color.b = (uint8_t)lua_tointeger( L, -1 );
|
color.a = (uint8_t)lua_tointeger( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 3:
|
|
||||||
color.a = (uint8_t)lua_tointeger( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "r", lua_tostring( L, -2 ) ) ) {
|
|
||||||
color.r = (uint8_t)lua_tointeger( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "g", lua_tostring( L, -2 ) ) ) {
|
|
||||||
color.g = (uint8_t)lua_tointeger( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "b", lua_tostring( L, -2 ) ) ) {
|
|
||||||
color.b = (uint8_t)lua_tointeger( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "a", lua_tostring( L, -2 ) ) ) {
|
|
||||||
color.a = (uint8_t)lua_tointeger( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
color.r = (uint8_t)lua_tointeger( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
color.g = (uint8_t)lua_tointeger( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 3 );
|
||||||
|
color.b = (uint8_t)lua_tointeger( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 4 );
|
||||||
|
color.a = (uint8_t)lua_tointeger( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2906,35 +2904,27 @@ Vector2 uluaGetVector2( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Vector2 vector = { 0.0f, 0.0f };
|
Vector2 vector = { 0.0f, 0.0f };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "x" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "x" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "y" );
|
||||||
vector.x = lua_tonumber( L, -1 );
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
|
||||||
vector.y = lua_tonumber( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "x", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.x = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "y", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.y = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2942,41 +2932,33 @@ Vector3 uluaGetVector3( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Vector3 vector = { 0.0f, 0.0f, 0.0f };
|
Vector3 vector = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "x" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "x" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "y" );
|
||||||
vector.x = lua_tonumber( L, -1 );
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
lua_getfield( L, index, "z" );
|
||||||
vector.y = lua_tonumber( L, -1 );
|
vector.z = luaL_checknumber( L, -1 );
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
vector.z = lua_tonumber( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "x", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.x = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "y", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.y = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "z", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.z = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 3 );
|
||||||
|
vector.z = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2984,47 +2966,39 @@ Vector4 uluaGetVector4( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Vector4 vector = { 0.0f, 0.0f, 0.0f, 0.0f };
|
Vector4 vector = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "x" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "x" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "y" );
|
||||||
vector.x = lua_tonumber( L, -1 );
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
lua_getfield( L, index, "z" );
|
||||||
vector.y = lua_tonumber( L, -1 );
|
vector.z = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 2:
|
lua_getfield( L, index, "w" );
|
||||||
vector.z = lua_tonumber( L, -1 );
|
vector.w = luaL_checknumber( L, -1 );
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
vector.w = lua_tonumber( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "x", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.x = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "y", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.y = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "z", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.z = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "w", lua_tostring( L, -2 ) ) ) {
|
|
||||||
vector.w = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
vector.x = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
vector.y = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 3 );
|
||||||
|
vector.z = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 4 );
|
||||||
|
vector.w = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3032,47 +3006,39 @@ Rectangle uluaGetRectangle( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Rectangle rect = { 0.0f, 0.0f, 0.0f, 0.0f };
|
Rectangle rect = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "x" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "x" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
rect.x = luaL_checknumber( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "y" );
|
||||||
rect.x = lua_tonumber( L, -1 );
|
rect.y = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
lua_getfield( L, index, "width" );
|
||||||
rect.y = lua_tonumber( L, -1 );
|
rect.width = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 2:
|
lua_getfield( L, index, "height" );
|
||||||
rect.width = lua_tonumber( L, -1 );
|
rect.height = luaL_checknumber( L, -1 );
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
rect.height = lua_tonumber( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "x", lua_tostring( L, -2 ) ) ) {
|
|
||||||
rect.x = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "y", lua_tostring( L, -2 ) ) ) {
|
|
||||||
rect.y = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "width", lua_tostring( L, -2 ) ) ) {
|
|
||||||
rect.width = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "height", lua_tostring( L, -2 ) ) ) {
|
|
||||||
rect.height = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
rect.x = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
rect.y = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 3 );
|
||||||
|
rect.width = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 4 );
|
||||||
|
rect.height = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3080,47 +3046,39 @@ Quaternion uluaGetQuaternion( lua_State* L, int index ) {
|
|||||||
luaL_checktype( L, index, LUA_TTABLE );
|
luaL_checktype( L, index, LUA_TTABLE );
|
||||||
Quaternion quaternion = { 0.0f, 0.0f, 0.0f, 0.0f };
|
Quaternion quaternion = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
int t = index, i = 0;
|
/* Assume object is given in named form if gets number. */
|
||||||
lua_pushnil( L );
|
lua_getfield( L, index, "x" );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
if ( lua_isnumber( L, -1 ) ) {
|
||||||
if ( lua_isnumber( L, -1 ) ) {
|
lua_getfield( L, index, "x" );
|
||||||
if ( lua_isnumber( L, -2 ) ) {
|
quaternion.x = luaL_checknumber( L, -1 );
|
||||||
switch ( i ) {
|
lua_pop( L, 1 );
|
||||||
case 0:
|
lua_getfield( L, index, "y" );
|
||||||
quaternion.x = lua_tonumber( L, -1 );
|
quaternion.y = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 1:
|
lua_getfield( L, index, "z" );
|
||||||
quaternion.y = lua_tonumber( L, -1 );
|
quaternion.z = luaL_checknumber( L, -1 );
|
||||||
break;
|
lua_pop( L, 1 );
|
||||||
case 2:
|
lua_getfield( L, index, "w" );
|
||||||
quaternion.z = lua_tonumber( L, -1 );
|
quaternion.w = luaL_checknumber( L, -1 );
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
quaternion.w = lua_tonumber( L, -1 );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( lua_isstring( L, -2 ) ) {
|
|
||||||
if ( TextIsEqual( "x", lua_tostring( L, -2 ) ) ) {
|
|
||||||
quaternion.x = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "y", lua_tostring( L, -2 ) ) ) {
|
|
||||||
quaternion.y = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "z", lua_tostring( L, -2 ) ) ) {
|
|
||||||
quaternion.z = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
else if ( TextIsEqual( "w", lua_tostring( L, -2 ) ) ) {
|
|
||||||
quaternion.w = lua_tonumber( L, -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
lua_getiCustom( L, index, 1 );
|
||||||
|
quaternion.x = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 2 );
|
||||||
|
quaternion.y = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 3 );
|
||||||
|
quaternion.z = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
lua_getiCustom( L, index, 4 );
|
||||||
|
quaternion.w = luaL_checknumber( L, -1 );
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
}
|
||||||
|
lua_pop( L, 1 );
|
||||||
|
|
||||||
return quaternion;
|
return quaternion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user