Switched to Raylib vertion 4.5. Removed some functions and added others. Main changes to camera3D.

This commit is contained in:
jussi
2023-04-06 19:19:44 +03:00
parent 2526c9732e
commit fe15e836bd
25 changed files with 744 additions and 957 deletions

View File

@@ -397,56 +397,6 @@ int laudioResumeSound( lua_State *L ) {
return 1;
}
/*
> success = RL.PlaySoundMulti( Sound sound )
Play a sound ( Using multichannel buffer pool )
- Failure return false
- Success return true
*/
int laudioPlaySoundMulti( lua_State *L ) {
if ( !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.PlaySoundMulti( Sound sound )" );
lua_pushboolean( L, false );
return 1;
}
size_t soundId = lua_tointeger( L, -1 );
if ( !validSound( soundId ) ) {
lua_pushboolean( L, false );
return 1;
}
PlaySoundMulti( *state->sounds[ soundId ] );
lua_pushboolean( L, true );
return 1;
}
/*
> RL.StopSoundMulti()
Stop any sound playing ( using multichannel buffer pool )
*/
int laudioStopSoundMulti( lua_State *L ) {
StopSoundMulti();
return 0;
}
/*
> count = RL.GetSoundsPlaying()
Get number of sounds playing in the multichannel
- Success return int
*/
int laudioGetSoundsPlaying( lua_State *L ) {
lua_pushinteger( L, GetSoundsPlaying() );
return 1;
}
/*
> playing = RL.IsSoundPlaying( Sound sound )

View File

@@ -2547,7 +2547,7 @@ int lcoreSetCamera2DOffset( lua_State *L ) {
}
/*
> success = RL.SetCamera2DRotation( camera3D camera, float rotation )
> success = RL.SetCamera2DRotation( camera2D camera, float rotation )
Set camera rotation in degrees
@@ -2556,7 +2556,7 @@ Set camera rotation in degrees
*/
int lcoreSetCamera2DRotation( lua_State *L ) {
if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCamera2DRotation( camera3D camera, float rotation )" );
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCamera2DRotation( camera2D camera, float rotation )" );
lua_pushboolean( L, false );
return 1;
}
@@ -2574,7 +2574,7 @@ int lcoreSetCamera2DRotation( lua_State *L ) {
}
/*
> success = RL.SetCamera2DZoom( camera3D camera, float zoom )
> success = RL.SetCamera2DZoom( camera2D camera, float zoom )
Set camera zoom ( scaling ), should be 1.0f by default
@@ -2583,7 +2583,7 @@ Set camera zoom ( scaling ), should be 1.0f by default
*/
int lcoreSetCamera2DZoom( lua_State *L ) {
if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCamera2DZoom( camera3D camera, float zoom )" );
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCamera2DZoom( camera2D camera, float zoom )" );
lua_pushboolean( L, false );
return 1;
}
@@ -2727,7 +2727,6 @@ int lcoreCreateCamera3D( lua_State *L ) {
state->camera3Ds[i]->up = (Vector3){ 0.0, 0.0, 0.0 };
state->camera3Ds[i]->fovy = 45.0f;
state->camera3Ds[i]->projection = CAMERA_PERSPECTIVE;
SetCameraMode( *state->camera3Ds[i], CAMERA_CUSTOM );
lua_pushinteger( L, i );
checkCamera3DRealloc(i);
@@ -2939,33 +2938,6 @@ int lcoreSetCamera3DProjection( lua_State *L ) {
return 1;
}
/*
> success = RL.SetCameraMode( camera3D camera, int mode )
Set camera mode ( CAMERA_CUSTOM, CAMERA_FREE, CAMERA_ORBITAL... )
- Failure return false
- Success return true
*/
int lcoreSetCameraMode( lua_State *L ) {
if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCameraMode( camera3D camera, int mode )" );
lua_pushboolean( L, false );
return 1;
}
size_t cameraId = lua_tointeger( L, -2 );
if ( !validCamera3D( cameraId ) ) {
lua_pushboolean( L, false );
return 1;
}
SetCameraMode( *state->camera3Ds[ cameraId ], lua_tointeger( L, -1 ) );
lua_pushboolean( L, true );
return 1;
}
/*
> position = RL.GetCamera3DPosition( camera3D camera )
@@ -3097,7 +3069,7 @@ int lcoreGetCamera3DProjection( lua_State *L ) {
}
/*
> success = RL.UpdateCamera3D( camera3D camera )
> success = RL.UpdateCamera3D( camera3D camera, int mode )
Update camera position for selected mode
@@ -3105,11 +3077,14 @@ Update camera position for selected mode
- Success return true
*/
int lcoreUpdateCamera3D( lua_State *L ) {
if ( !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.UpdateCamera3D( camera3D camera )" );
if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.UpdateCamera3D( camera3D camera, int mode )" );
lua_pushboolean( L, false );
return 1;
}
int mode = lua_tointeger( L, -1 );
lua_pop( L, 1 );
size_t cameraId = lua_tointeger( L, -1 );
if ( !validCamera3D( cameraId ) ) {
@@ -3117,95 +3092,41 @@ int lcoreUpdateCamera3D( lua_State *L ) {
return 1;
}
UpdateCamera( state->camera3Ds[ cameraId ] );
UpdateCamera( state->camera3Ds[ cameraId ], mode );
lua_pushboolean( L, true );
return 1;
}
/*
> success = RL.SetCameraPanControl( int keyPan )
> success = RL.UpdateCamera3DPro( camera3D camera, Vector3 movement, Vector3 rotation, float zoom )
Set camera pan key to combine with mouse movement ( free camera )
Update camera movement, movement/rotation values should be provided by user
- Failure return false
- Success return true
*/
int lcoreSetCameraPanControl( lua_State *L ) {
if ( !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCameraPanControl( int keyPan )" );
int lcoreUpdateCamera3DPro( lua_State *L ) {
if ( !lua_isnumber( L, -4 ) || !lua_istable( L, -3 ) || !lua_istable( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.UpdateCamera3DPro( camera3D camera, Vector3 movement, Vector3 rotation, float zoom )" );
lua_pushboolean( L, false );
return 1;
}
SetCameraPanControl( lua_tointeger( L, -1 ) );
lua_pushboolean( L, true );
return 1;
}
float zoom = lua_tointeger( L, -1 );
lua_pop( L, 1 );
Vector3 rotation = uluaGetVector3( L );
lua_pop( L, 1 );
Vector3 movement = uluaGetVector3( L );
lua_pop( L, 1 );
size_t cameraId = lua_tointeger( L, -1 );
/*
> success = RL.SetCameraAltControl( int keyAlt )
Set camera alt key to combine with mouse movement ( free camera )
- Failure return false
- Success return true
*/
int lcoreSetCameraAltControl( lua_State *L ) {
if ( !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCameraAltControl( int keyAlt )" );
if ( !validCamera3D( cameraId ) ) {
lua_pushboolean( L, false );
return 1;
}
SetCameraAltControl( lua_tointeger( L, -1 ) );
lua_pushboolean( L, true );
return 1;
}
/*
> success = RL.SetCameraSmoothZoomControl( int keySmoothZoom )
Set camera smooth zoom key to combine with mouse ( free camera )
- Failure return false
- Success return true
*/
int lcoreSetCameraSmoothZoomControl( lua_State *L ) {
if ( !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCameraSmoothZoomControl( int keySmoothZoom )" );
lua_pushboolean( L, false );
return 1;
}
SetCameraSmoothZoomControl( lua_tointeger( L, -1 ) );
lua_pushboolean( L, true );
return 1;
}
/*
> success = RL.SetCameraMoveControls( int keyFront, int keyBack, int keyRight, int keyLeft, int keyUp, int keyDown )
Set camera move controls ( 1st person and 3rd person cameras )
- Failure return false
- Success return true
*/
int lcoreSetCameraMoveControls( lua_State *L ) {
if ( !lua_isnumber( L, -6 ) || !lua_isnumber( L, -5 ) || !lua_isnumber( L, -4 )
|| !lua_isnumber( L, -3 ) || !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.SetCameraMoveControls( int keyFront, int keyBack, int keyRight, int keyLeft, int keyUp, int keyDown )" );
lua_pushboolean( L, false );
return 1;
}
int keyDown = lua_tointeger( L, -1 );
int keyUp = lua_tointeger( L, -2 );
int keyLeft = lua_tointeger( L, -3 );
int keyRight = lua_tointeger( L, -4 );
int keyBack = lua_tointeger( L, -5 );
int keyFront = lua_tointeger( L, -6 );
SetCameraMoveControls( keyFront, keyBack, keyRight, keyLeft, keyUp, keyDown );
UpdateCameraPro( state->camera3Ds[ cameraId ], movement, rotation, zoom );
lua_pushboolean( L, true );
return 1;

View File

@@ -341,6 +341,7 @@ void defineGlobals() {
assignGlobalInt( BLEND_SUBTRACT_COLORS, "BLEND_SUBTRACT_COLORS" );
assignGlobalInt( BLEND_ALPHA_PREMULTIPLY, "BLEND_ALPHA_PREMULTIPLY" );
assignGlobalInt( BLEND_CUSTOM, "BLEND_CUSTOM" );
assignGlobalInt( BLEND_CUSTOM_SEPARATE, "BLEND_CUSTOM_SEPARATE" );
/* Gesture */
assignGlobalInt( GESTURE_NONE, "GESTURE_NONE" );
assignGlobalInt( GESTURE_TAP, "GESTURE_TAP" );
@@ -814,11 +815,12 @@ void luaRegister() {
assingGlobalFunction( "GetCamera3DFovy", lcoreGetCamera3DFovy );
assingGlobalFunction( "GetCamera3DProjection", lcoreGetCamera3DProjection );
assingGlobalFunction( "UpdateCamera3D", lcoreUpdateCamera3D );
assingGlobalFunction( "SetCameraMode", lcoreSetCameraMode );
assingGlobalFunction( "SetCameraPanControl", lcoreSetCameraPanControl );
assingGlobalFunction( "SetCameraAltControl", lcoreSetCameraAltControl );
assingGlobalFunction( "SetCameraSmoothZoomControl", lcoreSetCameraSmoothZoomControl );
assingGlobalFunction( "SetCameraMoveControls", lcoreSetCameraMoveControls );
assingGlobalFunction( "UpdateCamera3DPro", lcoreUpdateCamera3DPro );
// assingGlobalFunction( "SetCameraMode", lcoreSetCameraMode );
// assingGlobalFunction( "SetCameraPanControl", lcoreSetCameraPanControl );
// assingGlobalFunction( "SetCameraAltControl", lcoreSetCameraAltControl );
// assingGlobalFunction( "SetCameraSmoothZoomControl", lcoreSetCameraSmoothZoomControl );
// assingGlobalFunction( "SetCameraMoveControls", lcoreSetCameraMoveControls );
/* Input-related Keyboard. */
assingGlobalFunction( "IsKeyPressed", lcoreIsKeyPressed );
assingGlobalFunction( "IsKeyDown", lcoreIsKeyDown );
@@ -987,10 +989,10 @@ void luaRegister() {
/* Texture Drawing. */
assingGlobalFunction( "DrawTexture", ltexturesDrawTexture );
assingGlobalFunction( "DrawTextureRec", ltexturesDrawTextureRec );
assingGlobalFunction( "DrawTextureTiled", ltexturesDrawTextureTiled );
// assingGlobalFunction( "DrawTextureTiled", ltexturesDrawTextureTiled );
assingGlobalFunction( "DrawTexturePro", ltexturesDrawTexturePro );
assingGlobalFunction( "DrawTextureNPatch", ltexturesDrawTextureNPatch );
assingGlobalFunction( "DrawTexturePoly", ltexturesDrawTexturePoly );
// assingGlobalFunction( "DrawTexturePoly", ltexturesDrawTexturePoly );
assingGlobalFunction( "BeginTextureMode", ltexturesBeginTextureMode );
assingGlobalFunction( "EndTextureMode", ltexturesEndTextureMode );
assingGlobalFunction( "SetTextureSource", ltexturesSetTextureSource );
@@ -1023,7 +1025,7 @@ void luaRegister() {
assingGlobalFunction( "DrawTriangle3D", lmodelsDrawTriangle3D );
assingGlobalFunction( "DrawCube", lmodelsDrawCube );
assingGlobalFunction( "DrawCubeWires", lmodelsDrawCubeWires );
assingGlobalFunction( "DrawCubeTexture", lmodelsDrawCubeTexture );
// assingGlobalFunction( "DrawCubeTexture", lmodelsDrawCubeTexture );
assingGlobalFunction( "DrawSphere", lmodelsDrawSphere );
assingGlobalFunction( "DrawSphereEx", lmodelsDrawSphereEx );
assingGlobalFunction( "DrawSphereWires", lmodelsDrawSphereWires );
@@ -1123,9 +1125,9 @@ void luaRegister() {
assingGlobalFunction( "StopSound", laudioStopSound );
assingGlobalFunction( "PauseSound", laudioPauseSound );
assingGlobalFunction( "ResumeSound", laudioResumeSound );
assingGlobalFunction( "PlaySoundMulti", laudioPlaySoundMulti );
assingGlobalFunction( "StopSoundMulti", laudioStopSoundMulti );
assingGlobalFunction( "GetSoundsPlaying", laudioGetSoundsPlaying );
// assingGlobalFunction( "PlaySoundMulti", laudioPlaySoundMulti );
// assingGlobalFunction( "StopSoundMulti", laudioStopSoundMulti );
// assingGlobalFunction( "GetSoundsPlaying", laudioGetSoundsPlaying );
assingGlobalFunction( "IsSoundPlaying", laudioIsSoundPlaying );
assingGlobalFunction( "SetSoundVolume", laudioSetSoundVolume );
assingGlobalFunction( "SetSoundPitch", laudioSetSoundPitch );
@@ -1167,6 +1169,7 @@ void luaRegister() {
assingGlobalFunction( "Vector2Distance", lmathVector2Distance );
assingGlobalFunction( "Vector2DistanceSqr", lmathVector2DistanceSqr );
assingGlobalFunction( "Vector2Angle", lmathVector2Angle );
assingGlobalFunction( "Vector2LineAngle", lmathVector2LineAngle );
assingGlobalFunction( "Vector2Scale", lmathVector2Scale );
assingGlobalFunction( "Vector2Multiply", lmathVector2Multiply );
assingGlobalFunction( "Vector2Negate", lmathVector2Negate );

View File

@@ -120,6 +120,26 @@ static int newMesh() {
return i;
}
// Unload model (but not meshes) from memory (RAM and/or VRAM)
void UnloadModelKeepMeshes( Model model ) {
// Unload materials maps
// NOTE: As the user could be sharing shaders and textures between models,
// we don't unload the material but just free it's maps,
// the user is responsible for freeing models shaders and textures
for (int i = 0; i < model.materialCount; i++) RL_FREE(model.materials[i].maps);
// Unload arrays
RL_FREE(model.meshes);
RL_FREE(model.materials);
RL_FREE(model.meshMaterial);
// Unload animation data
RL_FREE(model.bones);
RL_FREE(model.bindPose);
TRACELOG(LOG_INFO, "MODEL: Unloaded model (but not meshes) from RAM and VRAM");
}
/*
## Models - Basic
*/
@@ -292,30 +312,30 @@ Draw cube textured
- Failure return false
- Success return true
*/
int lmodelsDrawCubeTexture( lua_State *L ) {
if ( !lua_isnumber( L, -4 ) || !lua_istable( L, -3 ) || !lua_istable( L, -2 ) || !lua_istable( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.DrawCubeTexture( Texture2D texture, Vector3 position, Vector3 size, Color color )" );
lua_pushboolean( L, false );
return 1;
}
Color color = uluaGetColor( L );
lua_pop( L, 1 );
Vector3 size = uluaGetVector3( L );
lua_pop( L, 1 );
Vector3 pos = uluaGetVector3( L );
lua_pop( L, 1 );
size_t texId = lua_tointeger( L, -1 );
// int lmodelsDrawCubeTexture( lua_State *L ) {
// if ( !lua_isnumber( L, -4 ) || !lua_istable( L, -3 ) || !lua_istable( L, -2 ) || !lua_istable( L, -1 ) ) {
// TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.DrawCubeTexture( Texture2D texture, Vector3 position, Vector3 size, Color color )" );
// lua_pushboolean( L, false );
// return 1;
// }
// Color color = uluaGetColor( L );
// lua_pop( L, 1 );
// Vector3 size = uluaGetVector3( L );
// lua_pop( L, 1 );
// Vector3 pos = uluaGetVector3( L );
// lua_pop( L, 1 );
// size_t texId = lua_tointeger( L, -1 );
if ( !validSourceTexture( texId ) ) {
lua_pushboolean( L, false );
return 1;
}
// if ( !validSourceTexture( texId ) ) {
// lua_pushboolean( L, false );
// return 1;
// }
DrawCubeTexture( *texturesGetSourceTexture( texId ), pos, size.x, size.y, size.z, color );
lua_pushboolean( L, true );
// DrawCubeTexture( *texturesGetSourceTexture( texId ), pos, size.x, size.y, size.z, color );
// lua_pushboolean( L, true );
return 1;
}
// return 1;
// }
/*
> success = RL.DrawSphere( Vector3 centerPos, float radius, Color color )

View File

@@ -411,6 +411,31 @@ int lmathVector2Angle( lua_State *L ) {
return 1;
}
/*
> result = RL.Vector2LineAngle( Vector2 start, Vector2 end )
Calculate angle defined by a two vectors line.
NOTE: Parameters need to be normalized.
Current implementation should be aligned with glm::angle.
- Failure return false
- Success return float
*/
int lmathVector2LineAngle( lua_State *L ) {
if ( !lua_istable( L, -2 ) || !lua_istable( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.Vector2LineAngle( Vector2 start, Vector2 end )" );
lua_pushboolean( L, false );
return 1;
}
Vector2 end = uluaGetVector2( L );
lua_pop( L, 1 );
Vector2 start = uluaGetVector2( L );
lua_pushnumber( L, Vector2LineAngle( start, end ) );
return 1;
}
/*
> result = RL.Vector2Scale( Vector2 v, float scale )

View File

@@ -2,6 +2,7 @@
#include "state.h"
#include "lua_core.h"
#include "textures.h"
#include "models.h"
State *state;
@@ -167,7 +168,9 @@ void stateFree() {
}
for ( int i = 0; i < state->modelCount; ++i ) {
if ( state->models[i] != NULL ) {
//TODO Test if UnloadModel causes segfaults on exit.
UnloadModelKeepMeshes( *state->models[i] );
// UnloadModel( *state->models[i] );
free( state->models[i] );
}
}

View File

@@ -1996,46 +1996,6 @@ int ltexturesDrawTextureRec( lua_State *L ) {
return 1;
}
/*
> success = RL.DrawTextureTiled( Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint )
Draw part of a texture ( defined by a rectangle ) with rotation and scale tiled into dest
- Failure return false
- Success return true
*/
int ltexturesDrawTextureTiled( lua_State *L ) {
if ( !lua_isnumber( L, -7 ) || !lua_istable( L, -6 ) || !lua_istable( L, -5 ) || !lua_istable( L, -4 )
|| !lua_isnumber( L, -3 ) || !lua_isnumber( L, -2 ) || !lua_istable( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.DrawTextureTiled( Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint )" );
lua_pushboolean( L, false );
return 1;
}
Color color = uluaGetColor( L );
lua_pop( L, 1 );
float scale = lua_tonumber( L, -1 );
lua_pop( L, 1 );
float rot = lua_tonumber( L, -1 );
lua_pop( L, 1 );
Vector2 origin = uluaGetVector2( L );
lua_pop( L, 1 );
Rectangle dstRect = uluaGetRectangle( L );
lua_pop( L, 1 );
Rectangle srcRect = uluaGetRectangle( L );
lua_pop( L, 1 );
size_t texId = lua_tointeger( L, -1 );
if ( !validSourceTexture( texId ) ) {
lua_pushboolean( L, false );
return 1;
}
DrawTextureTiled( *texturesGetSourceTexture( texId ), srcRect, dstRect, origin, rot, scale, color );
lua_pushboolean( L, true );
return 1;
}
/*
> success = RL.DrawTexturePro( Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint )
@@ -2112,64 +2072,6 @@ int ltexturesDrawTextureNPatch( lua_State *L ) {
return 1;
}
/*
> success = RL.DrawTexturePoly( Texture2D texture, Vector2 center, Vector2{} points, Vector2{} texcoords, int pointsCount, Color tint )
Draw a textured polygon ( Convex )
- Failure return false
- Success return true
*/
int ltexturesDrawTexturePoly( lua_State *L ) {
if ( !lua_isnumber( L, -6 ) || !lua_istable( L, -5 ) || !lua_istable( L, -4 )
|| !lua_istable( L, -3 ) || !lua_isnumber( L, -2 ) || !lua_istable( L, -1 ) ) {
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL.DrawTexturePoly( Texture2D texture, Vector2 center, Vector2 points{}, Vector2 texcoords{}, int pointsCount, Color tint )" );
lua_pushboolean( L, false );
return 1;
}
Color color = uluaGetColor( L );
lua_pop( L, 1 );
int pointsCount = lua_tointeger( L, -1 );
lua_pop( L, 1 );
Vector2 texCoords[ pointsCount ];
int t = lua_gettop( L ), i = 0;
lua_pushnil( L );
while ( lua_next( L, t ) != 0 ) {
texCoords[i] = uluaGetVector2( L );
i++;
lua_pop( L, 1 );
}
lua_pop( L, 1 );
Vector2 points[ pointsCount ];
t = lua_gettop( L );
i = 0;
lua_pushnil( L );
while ( lua_next( L, t ) != 0 ) {
points[i] = uluaGetVector2( L );
i++;
lua_pop( L, 1 );
}
lua_pop( L, 1 );
Vector2 center = uluaGetVector2( L );
lua_pop( L, 1 );
size_t texId = lua_tointeger( L, -1 );
if ( !validSourceTexture( texId ) ) {
lua_pushboolean( L, false );
return 1;
}
DrawTexturePoly( *texturesGetSourceTexture( texId ), center, points, texCoords, pointsCount, color );
lua_pushboolean( L, true );
return 1;
}
/*
> success = RL.BeginTextureMode( RenderTexture2D target )