From 44e8b06603d91d398c0955f34da33d0242b7551a Mon Sep 17 00:00:00 2001 From: jussi Date: Sun, 22 May 2022 14:47:06 +0300 Subject: Pong example, type named fields and vector lib changes. --- src/lua_core.c | 434 +++++++++++++++++++++++++++++++++++++-------------------- src/main.c | 14 +- src/models.c | 6 +- 3 files changed, 296 insertions(+), 158 deletions(-) (limited to 'src') diff --git a/src/lua_core.c b/src/lua_core.c index 9169e74..9a61120 100644 --- a/src/lua_core.c +++ b/src/lua_core.c @@ -1022,27 +1022,43 @@ Color uluaGetColor( lua_State *L ) { int t = lua_gettop( L ), i = 0; lua_pushnil( L ); - while ( lua_next( L, t ) != 0 ) { - if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - color.r = (uint8_t)lua_tointeger( L, -1 ); - break; - case 1: - color.g = (uint8_t)lua_tointeger( L, -1 ); - break; - case 2: - color.b = (uint8_t)lua_tointeger( L, -1 ); - break; - case 3: - color.a = (uint8_t)lua_tointeger( L, -1 ); - break; - default: - break; - } - } - i++; - lua_pop( L, 1 ); + while ( lua_next( L, t ) != 0 ) { + if ( lua_isnumber( L, -1 ) ) { + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + color.r = (uint8_t)lua_tointeger( L, -1 ); + break; + case 1: + color.g = (uint8_t)lua_tointeger( L, -1 ); + break; + case 2: + color.b = (uint8_t)lua_tointeger( L, -1 ); + break; + case 3: + color.a = (uint8_t)lua_tointeger( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "r", (char*)lua_tostring( L, -2 ) ) == 0 ) { + color.r = (uint8_t)lua_tointeger( L, -1 ); + } + else if ( strcmp( "g", (char*)lua_tostring( L, -2 ) ) == 0 ) { + color.g = (uint8_t)lua_tointeger( L, -1 ); + } + else if ( strcmp( "b", (char*)lua_tostring( L, -2 ) ) == 0 ) { + color.b = (uint8_t)lua_tointeger( L, -1 ); + } + else if ( strcmp( "a", (char*)lua_tostring( L, -2 ) ) == 0 ) { + color.a = (uint8_t)lua_tointeger( L, -1 ); + } + } + i++; + lua_pop( L, 1 ); + } } return color; } @@ -1058,20 +1074,30 @@ Vector2 uluaGetVector2( lua_State *L ) { lua_pushnil( L ); while ( lua_next( L, t ) != 0 ) { - if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - vector.x = lua_tonumber( L, -1 ); - break; - case 1: - vector.y = lua_tonumber( L, -1 ); - break; - default: - break; - } - } - i++; - lua_pop( L, 1 ); + if ( lua_isnumber( L, -1 ) ) { + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + vector.x = lua_tonumber( L, -1 ); + break; + case 1: + vector.y = lua_tonumber( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "x", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.x = lua_tonumber( L, -1 ); + } + else if ( strcmp( "y", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.y = lua_tonumber( L, -1 ); + } + } + i++; + lua_pop( L, 1 ); + } } return vector; } @@ -1088,19 +1114,32 @@ Vector3 uluaGetVector3( lua_State *L ) { while ( lua_next( L, t ) != 0 ) { if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - vector.x = lua_tonumber( L, -1 ); - break; - case 1: - vector.y = lua_tonumber( L, -1 ); - break; - case 2: - vector.z = lua_tonumber( L, -1 ); - break; - default: - break; - } + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + vector.x = lua_tonumber( L, -1 ); + break; + case 1: + vector.y = lua_tonumber( L, -1 ); + break; + case 2: + vector.z = lua_tonumber( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "x", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.x = lua_tonumber( L, -1 ); + } + else if ( strcmp( "y", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.y = lua_tonumber( L, -1 ); + } + else if ( strcmp( "z", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.z = lua_tonumber( L, -1 ); + } + } } i++; lua_pop( L, 1 ); @@ -1120,22 +1159,38 @@ Vector4 uluaGetVector4( lua_State *L ) { while ( lua_next( L, t ) != 0 ) { if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - vector.x = lua_tonumber( L, -1 ); - break; - case 1: - vector.y = lua_tonumber( L, -1 ); - break; - case 2: - vector.z = lua_tonumber( L, -1 ); - break; - case 3: - vector.w = lua_tonumber( L, -1 ); - break; - default: - break; - } + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + vector.x = lua_tonumber( L, -1 ); + break; + case 1: + vector.y = lua_tonumber( L, -1 ); + break; + case 2: + vector.z = lua_tonumber( L, -1 ); + break; + case 3: + vector.w = lua_tonumber( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "x", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.x = lua_tonumber( L, -1 ); + } + else if ( strcmp( "y", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.y = lua_tonumber( L, -1 ); + } + else if ( strcmp( "z", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.z = lua_tonumber( L, -1 ); + } + else if ( strcmp( "w", (char*)lua_tostring( L, -2 ) ) == 0 ) { + vector.w = lua_tonumber( L, -1 ); + } + } } i++; lua_pop( L, 1 ); @@ -1153,24 +1208,40 @@ Rectangle uluaGetRectangle( lua_State *L ) { int t = lua_gettop( L ), i = 0; lua_pushnil( L ); - while ( lua_next( L, t ) != 0 ) { + while ( lua_next( L, t ) != 0 ) { if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - rect.x = lua_tonumber( L, -1 ); - break; - case 1: - rect.y = lua_tonumber( L, -1 ); - break; - case 2: - rect.width = lua_tonumber( L, -1 ); - break; - case 3: - rect.height = lua_tonumber( L, -1 ); - break; - default: - break; - } + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + rect.x = lua_tonumber( L, -1 ); + break; + case 1: + rect.y = lua_tonumber( L, -1 ); + break; + case 2: + rect.width = lua_tonumber( L, -1 ); + break; + case 3: + rect.height = lua_tonumber( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "x", (char*)lua_tostring( L, -2 ) ) == 0 ) { + rect.x = lua_tonumber( L, -1 ); + } + else if ( strcmp( "y", (char*)lua_tostring( L, -2 ) ) == 0 ) { + rect.y = lua_tonumber( L, -1 ); + } + else if ( strcmp( "width", (char*)lua_tostring( L, -2 ) ) == 0 ) { + rect.width = lua_tonumber( L, -1 ); + } + else if ( strcmp( "height", (char*)lua_tostring( L, -2 ) ) == 0 ) { + rect.height = lua_tonumber( L, -1 ); + } + } } i++; lua_pop( L, 1 ); @@ -1190,22 +1261,38 @@ Quaternion uluaGetQuaternion( lua_State *L ) { while ( lua_next( L, t ) != 0 ) { if ( lua_isnumber( L, -1 ) ) { - switch ( i ) { - case 0: - quaternion.x = lua_tonumber( L, -1 ); - break; - case 1: - quaternion.y = lua_tonumber( L, -1 ); - break; - case 2: - quaternion.z = lua_tonumber( L, -1 ); - break; - case 3: - quaternion.w = lua_tonumber( L, -1 ); - break; - default: - break; - } + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + quaternion.x = lua_tonumber( L, -1 ); + break; + case 1: + quaternion.y = lua_tonumber( L, -1 ); + break; + case 2: + quaternion.z = lua_tonumber( L, -1 ); + break; + case 3: + quaternion.w = lua_tonumber( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "x", (char*)lua_tostring( L, -2 ) ) == 0 ) { + quaternion.x = lua_tonumber( L, -1 ); + } + else if ( strcmp( "y", (char*)lua_tostring( L, -2 ) ) == 0 ) { + quaternion.y = lua_tonumber( L, -1 ); + } + else if ( strcmp( "z", (char*)lua_tostring( L, -2 ) ) == 0 ) { + quaternion.z = lua_tonumber( L, -1 ); + } + else if ( strcmp( "w", (char*)lua_tostring( L, -2 ) ) == 0 ) { + quaternion.w = lua_tonumber( L, -1 ); + } + } } i++; lua_pop( L, 1 ); @@ -1258,21 +1345,31 @@ BoundingBox uluaGetBoundingBox( lua_State *L ) { int t = lua_gettop( L ), i = 0; lua_pushnil( L ); - while ( lua_next( L, t ) != 0 ) { - if ( lua_istable( L, -1 ) ) { - switch ( i ) { - case 0: - box.min = uluaGetVector3( L ); - break; - case 1: - box.max = uluaGetVector3( L ); - break; - default: - break; - } - } - i++; - lua_pop( L, 1 ); + while ( lua_next( L, t ) != 0 ) { + if ( lua_isnumber( L, -1 ) ) { + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + box.min = uluaGetVector3( L ); + break; + case 1: + box.max = uluaGetVector3( L ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "min", (char*)lua_tostring( L, -2 ) ) == 0 ) { + box.min = uluaGetVector3( L ); + } + else if ( strcmp( "max", (char*)lua_tostring( L, -2 ) ) == 0 ) { + box.max = uluaGetVector3( L ); + } + } + i++; + lua_pop( L, 1 ); + } } return box; @@ -1288,21 +1385,31 @@ Ray uluaGetRay( lua_State *L ) { int t = lua_gettop( L ), i = 0; lua_pushnil( L ); - while ( lua_next( L, t ) != 0 ) { - if ( lua_istable( L, -1 ) ) { - switch ( i ) { - case 0: - ray.position = uluaGetVector3( L ); - break; - case 1: - ray.direction = uluaGetVector3( L ); - break; - default: - break; - } - } - i++; - lua_pop( L, 1 ); + while ( lua_next( L, t ) != 0 ) { + if ( lua_isnumber( L, -1 ) ) { + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + ray.position = uluaGetVector3( L ); + break; + case 1: + ray.direction = uluaGetVector3( L ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "position", (char*)lua_tostring( L, -2 ) ) == 0 ) { + ray.position = uluaGetVector3( L ); + } + else if ( strcmp( "direction", (char*)lua_tostring( L, -2 ) ) == 0 ) { + ray.direction = uluaGetVector3( L ); + } + } + i++; + lua_pop( L, 1 ); + } } return ray; @@ -1318,33 +1425,56 @@ NPatchInfo uluaGetNPatchInfo( lua_State *L ) { int t = lua_gettop( L ), i = 0; lua_pushnil( L ); - while ( lua_next( L, t ) != 0 ) { - switch ( i ) { - case 0: - npatch.source = uluaGetRectangle( L ); - break; - case 1: - npatch.left = lua_tointeger( L, -1 ); - break; - case 2: - npatch.top = lua_tointeger( L, -1 ); - break; - case 3: - npatch.right = lua_tointeger( L, -1 ); - break; - case 4: - npatch.bottom = lua_tointeger( L, -1 ); - break; - case 5: - npatch.layout = lua_tointeger( L, -1 ); - break; - default: - break; + while ( lua_next( L, t ) != 0 ) { + if ( lua_isnumber( L, -1 ) ) { + if ( lua_isnumber( L, -2 ) ) { + switch ( i ) { + case 0: + npatch.source = uluaGetRectangle( L ); + break; + case 1: + npatch.left = lua_tointeger( L, -1 ); + break; + case 2: + npatch.top = lua_tointeger( L, -1 ); + break; + case 3: + npatch.right = lua_tointeger( L, -1 ); + break; + case 4: + npatch.bottom = lua_tointeger( L, -1 ); + break; + case 5: + npatch.layout = lua_tointeger( L, -1 ); + break; + default: + break; + } + } + else if ( lua_isstring( L, -2 ) ) { + if ( strcmp( "source", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.source = uluaGetRectangle( L ); + } + else if ( strcmp( "left", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.left = lua_tointeger( L, -1 ); + } + else if ( strcmp( "top", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.top = lua_tointeger( L, -1 ); + } + else if ( strcmp( "right", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.right = lua_tointeger( L, -1 ); + } + else if ( strcmp( "bottom", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.bottom = lua_tointeger( L, -1 ); + } + else if ( strcmp( "layout", (char*)lua_tostring( L, -2 ) ) == 0 ) { + npatch.layout = lua_tointeger( L, -1 ); + } + } + i++; + lua_pop( L, 1 ); } - i++; - lua_pop( L, 1 ); } - return npatch; } diff --git a/src/main.c b/src/main.c index 9bb5d2e..9155cd7 100644 --- a/src/main.c +++ b/src/main.c @@ -2,13 +2,21 @@ #include "state.h" #include "lua_core.h" +inline static void printVersion() { + if ( VERSION_DEV ) { + TraceLog( LOG_INFO, "ReiLua %d.%d.%d-Dev", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH ); + } + else { + TraceLog( LOG_INFO, "ReiLua %d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH ); + } +} + int main( int argn, const char **argc ) { char exePath[ STRING_LEN ] = { '\0' }; if ( 1 < argn ) { if ( strcmp( argc[1], "--version" ) == 0 || strcmp( argc[1], "-v" ) == 0 ) { - printf( "ReiLua %d.%d.%d\n", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH ); - + printVersion(); return 1; } else{ @@ -18,7 +26,7 @@ int main( int argn, const char **argc ) { else { sprintf( exePath, "%s/", GetWorkingDirectory() ); } - TraceLog( LOG_INFO, "ReiLua %d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH ); + printVersion(); stateInit( exePath ); while ( state->run ) { diff --git a/src/models.c b/src/models.c index 8ad2f2c..0ae7805 100644 --- a/src/models.c +++ b/src/models.c @@ -1202,7 +1202,7 @@ int lmodelsUpdateMesh( lua_State *L ) { i++; lua_pop( L, 1 ); } - UpdateMeshBuffer( *mesh, 3, (void*)data, len * 4 * sizeof(unsigned char), 0 ); + UpdateMeshBuffer( *mesh, 3, (void*)data, len * 4 * sizeof( unsigned char ), 0 ); } else if ( strcmp( "indices", (char*)lua_tostring( L, -2 ) ) == 0 && lua_istable( L, -1 ) ) { size_t len = uluaGetTableLen( L ); @@ -1217,7 +1217,7 @@ int lmodelsUpdateMesh( lua_State *L ) { i++; lua_pop( L, 1 ); } - UpdateMeshBuffer( *mesh, 6, (void*)data, len * sizeof(unsigned short), 0 ); + UpdateMeshBuffer( *mesh, 6, (void*)data, len * sizeof( unsigned short ), 0 ); } lua_pop( L, 1 ); } @@ -2245,7 +2245,7 @@ int lmodelsGetRayCollisionModel( lua_State *L ) { lua_pushnil( L ); return 1; } - // uluaPushRayCollision( L, GetRayCollisionModel( ray, *state->models[ modelId ] ) ); + uluaPushRayCollision( L, GetRayCollisionModel( ray, *state->models[ modelId ] ) ); return 1; } -- cgit v1.2.3