Added new physics functions

* Added some new physics functions
* Added new documentation
* Added some auto checks for OS to rc_os_defines.h
* Fixed bugs on settting and getting position of sprites
This commit is contained in:
n00b
2024-11-15 20:42:08 -05:00
parent 3f4a1ce1cc
commit 40ca65cb3f
37 changed files with 1652 additions and 987 deletions

View File

@@ -0,0 +1,6 @@
#title DeleteJoint [RCBasic Doc]
#header Sub DeleteJoint( joint_id )
Clears a joint from memory
#ref CreateDistanceJoint CreateFrictionJoint CreateGearJoint CreateMotorJoint CreatePrismaticJoint CreatePulleyJoint CreateRevoluteJoint CreateWeldJoint CreateWheelJoint

View File

@@ -0,0 +1,4 @@
#title GetSpriteAABB [RCBasic Doc]
#header sub GetSpriteAABB( spr_id, ByRef x1, ByRef y1, ByRef x2, ByRef y2 )
Returns the axis aligned bounding box for a sprite

View File

@@ -0,0 +1,6 @@
#title GetSpriteDensity [RCBasic Doc]
#header function GetSpriteDensity( spr_id )
Returns the density of a sprite. Higher density means a heavier sprite.
#ref SetSpriteDensity

View File

@@ -0,0 +1,7 @@
#title GetSpriteFriction [RCBasic Doc]
#header function GetSpriteFriction( spr_id )
Returns a sprite's friction
#ref GetSpriteFriction

View File

@@ -0,0 +1,6 @@
#title GetSpriteRestitution [RCBasic Doc]
#header function GetSpriteRestitution( spr_id )
Returns the restitution coefficient for a sprite
#ref SetSpriteRestitution

View File

@@ -0,0 +1,6 @@
#title GetSpriteRestitutionThreshold [RCBasic Doc]
#header function GetSpriteRestitutionThreshold( spr_id )
Returns the restitution velocity threshold for a sprite
#ref SetSpriteRestitutionThreshold

View File

@@ -0,0 +1,6 @@
#title GetWorld2DAutoClearForces [RCBasic Doc]
#header function GetWorld2DAutoClearForces()
Returns the auto clear forces flag for the active canvas
#ref SetWorld2DAutoClearForces

View File

@@ -0,0 +1,7 @@
#title GetWorld2DPositionIterations [RCBasic Doc]
#header function GetWorld2DPositionIterations()
Returns the number of position iterations for the position constraint solver
#ref SetWorld2DPositionIterations

View File

@@ -0,0 +1,6 @@
#title GetWorld2DTimeStep [RCBasic Doc]
#header function GetWorld2DTimeStep()
Returns the timestep for the active canvas
#ref SetWorld2DTimeStep

View File

@@ -0,0 +1,6 @@
#title GetWorld2DVelocityIterations [RCBasic Doc]
#header function GetWorld2DVelocityIterations()
Returns the number of velocity iterations for the velocity constraint solver
#ref SetWorld2DVelocityIterations

View File

@@ -0,0 +1,5 @@
#title GetWorld3DMaxSubSteps [RCBasic Doc]
#header function GetWorld3DMaxSubSteps()
Returns the maximum substeps in the 3d physics time step

View File

@@ -0,0 +1,4 @@
#title GetWorld3DTimeStep [RCBasic Doc]
#header function GetWorld3DTimeStep()
Returns the timestep of the 3d physics simulation

View File

@@ -0,0 +1,9 @@
#title SetSpriteDensity [RCBasic Doc]
#header sub SetSpriteDensity( spr_id, density )
Sets the density of a sprite. Higher density means a heavier sprite.
Density is used to calculate mass for a sprite.
#ref GetSpriteDensity

View File

@@ -0,0 +1,6 @@
#title SetSpriteFriction [RCBasic Doc]
#header sub SetSpriteFriction( spr_id, friction )
Sets a sprite's friction
#ref GetSpriteFriction

View File

@@ -0,0 +1,7 @@
#title SetSpriteRestitution [RCBasic Doc]
#header sub SetSpriteRestitution( spr_id, restitution )
Sets the restitution coefficient for a sprite
#ref GetSpriteRestitution

View File

@@ -0,0 +1,6 @@
#title SetSpriteRestitutionThreshold [RCBasic Doc]
#header sub SetSpriteRestitutionThreshold( spr_id, threshold )
Sets the restitution threshold for a sprite.
#ref GetSpriteRestitutionThreshold

View File

@@ -0,0 +1,6 @@
#title SetWorld2DAutoClearForces [RCBasic Doc]
#header sub SetWorld2DAutoClearForces( flag )
Sets the auto clear forces flag for the active canvas
#ref GetWorld2DAutoClearForces

View File

@@ -0,0 +1,6 @@
#title SetWorld2DPositionIterations [RCBasic Doc]
#header sub SetWorld2DPositionIterations( p )
Sets the number of position iterations for the position constraint solver
#ref GetWorld2DPositionIterations

View File

@@ -0,0 +1,6 @@
#title SetWorld2DTimeStep [RCBasic Doc]
#header sub SetWorld2DTimeStep( ts )
Sets the timestep for the active canvas
#ref GetWorld2DTimeStep

View File

@@ -0,0 +1,6 @@
#title SetWorld2DVelocityIterations [RCBasic Doc]
#header sub SetWorld2DVelocityIterations( v )
Sets the number of velocity iterations for the velocity constraint solver
#ref GetWorld2DVelocityIterations

View File

@@ -520,6 +520,25 @@ rc_setSpriteAwake( SETSPRITEAWAKE_SPR_ID, SETSPRITEAWAKE_FLAG )
rc_spriteIsAwake( SPRITEISAWAKE_SPR_ID )
rc_setSpriteFixedRotation( SETSPRITEFIXEDROTATION_SPR_ID, SETSPRITEFIXEDROTATION_FLAG )
rc_spriteIsFixedRotation( SPRITEISFIXEDROTATION_SPR_ID )
rc_setSpriteDensity( SETSPRITEDENSITY_SPR_ID, SETSPRITEDENSITY_DENSITY )
rc_getSpriteDensity( GETSPRITEDENSITY_SPR_ID )
rc_setSpriteFriction( SETSPRITEFRICTION_SPR_ID, SETSPRITEFRICTION_FRICTION )
rc_getSpriteFriction( GETSPRITEFRICTION_SPR_ID )
rc_setSpriteRestitution( SETSPRITERESTITUTION_SPR_ID, SETSPRITERESTITUTION_RESTITUTION )
rc_getSpriteRestitution( GETSPRITERESTITUTION_SPR_ID )
rc_setSpriteRestitutionThreshold( SETSPRITERESTITUTIONTHRESHOLD_SPR_ID, SETSPRITERESTITUTIONTHRESHOLD_THRESHOLD )
rc_getSpriteRestitutionThreshold( GETSPRITERESTITUTIONTHRESHOLD_SPR_ID )
rc_getSpriteAABB( GETSPRITEAABB_SPR_ID, &GETSPRITEAABB_X1, &GETSPRITEAABB_Y1, &GETSPRITEAABB_X2, &GETSPRITEAABB_Y2 )
rc_setGravity2D( SETGRAVITY2D_X, SETGRAVITY2D_Y )
rc_getGravity2D( &GETGRAVITY2D_X, &GETGRAVITY2D_Y )
rc_setWorld2DTimeStep( SETWORLD2DTIMESTEP_TS )
rc_setWorld2DVelocityIterations( SETWORLD2DVELOCITYITERATIONS_V )
rc_setWorld2DPositionIterations( SETWORLD2DPOSITIONITERATIONS_P )
rc_getWorld2DTimeStep( )
rc_getWorld2DVelocityIterations( )
rc_getWorld2DPositionIterations( )
rc_setWorld2DAutoClearForces( SETWORLD2DAUTOCLEARFORCES_FLAG )
rc_getWorld2DAutoClearForces( )
rc_createDistanceJoint( CREATEDISTANCEJOINT_SPRITEA, CREATEDISTANCEJOINT_SPRITEB, CREATEDISTANCEJOINT_AX, CREATEDISTANCEJOINT_AY, CREATEDISTANCEJOINT_BX, CREATEDISTANCEJOINT_BY, CREATEDISTANCEJOINT_COLLIDE_CONNECT )
rc_createFrictionJoint( CREATEFRICTIONJOINT_SPRITEA, CREATEFRICTIONJOINT_SPRITEB, CREATEFRICTIONJOINT_X, CREATEFRICTIONJOINT_Y, CREATEFRICTIONJOINT_COLLIDE_CONNECT )
rc_createGearJoint( CREATEGEARJOINT_JOINTA, CREATEGEARJOINT_JOINTB, CREATEGEARJOINT_G_RATIO, CREATEGEARJOINT_COLLIDE_CONNECT )
@@ -845,6 +864,8 @@ rc_addSceneSkyDomeEx( ADDSCENESKYDOMEEX_IMG, ADDSCENESKYDOMEEX_HORIRES, ADDSCE
rc_removeSceneSky( )
rc_setWorld3DMaxSubSteps( SETWORLD3DMAXSUBSTEPS_STEPS )
rc_setWorld3DTimeStep( SETWORLD3DTIMESTEP_TS )
rc_getWorld3DMaxSubSteps( )
rc_getWorld3DTimeStep( )
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR )
rc_stopParticleEmitter( STOPPARTICLEEMITTER_ACTOR )
rc_setParticleDirection( SETPARTICLEDIRECTION_ACTOR, SETPARTICLEDIRECTION_X, SETPARTICLEDIRECTION_Y, SETPARTICLEDIRECTION_Z )

View File

@@ -912,7 +912,7 @@ int main(int argc, char * argv[])
{
string line = "";
rcbasic_dev("embedded_functions.bas"); rcbasic_output_debug_info(); return 0;
//rcbasic_dev("embedded_functions.bas"); rcbasic_output_debug_info(); return 0;
string rc_filename = "";// = "tst.bas";

View File

@@ -1516,6 +1516,48 @@ void init_embedded_functions()
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("spriteIsFixedRotation", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteDensity", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("density", ID_TYPE_NUM);
embed_function("GetSpriteDensity", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteFriction", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("friction", ID_TYPE_NUM);
embed_function("GetSpriteFriction", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteRestitution", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("restitution", ID_TYPE_NUM);
embed_function("GetSpriteRestitution", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteRestitutionThreshold", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("threshold", ID_TYPE_NUM);
embed_function("GetSpriteAABB", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("x1", ID_TYPE_BYREF_NUM);
add_embedded_arg("y1", ID_TYPE_BYREF_NUM);
add_embedded_arg("x2", ID_TYPE_BYREF_NUM);
add_embedded_arg("y2", ID_TYPE_BYREF_NUM);
embed_function("SetGravity2D", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
embed_function("GetGravity2D", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
embed_function("SetWorld2DTimeStep", ID_TYPE_SUB);
add_embedded_arg("ts", ID_TYPE_NUM);
embed_function("SetWorld2DVelocityIterations", ID_TYPE_SUB);
add_embedded_arg("v", ID_TYPE_NUM);
embed_function("SetWorld2DPositionIterations", ID_TYPE_SUB);
add_embedded_arg("p", ID_TYPE_NUM);
embed_function("GetWorld2DTimeStep", ID_TYPE_FN_NUM);
embed_function("GetWorld2DVelocityIterations", ID_TYPE_FN_NUM);
embed_function("GetWorld2DPositionIterations", ID_TYPE_FN_NUM);
embed_function("SetWorld2DAutoClearForces", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetWorld2DAutoClearForces", ID_TYPE_FN_NUM);
embed_function("createDistanceJoint", ID_TYPE_FN_NUM);
add_embedded_arg("spriteA", ID_TYPE_NUM);
add_embedded_arg("spriteB", ID_TYPE_NUM);
@@ -2647,6 +2689,8 @@ void init_embedded_functions()
add_embedded_arg("steps", ID_TYPE_NUM);
embed_function("SetWorld3DTimeStep", ID_TYPE_SUB);
add_embedded_arg("ts", ID_TYPE_NUM);
embed_function("GetWorld3DMaxSubSteps", ID_TYPE_FN_NUM);
embed_function("GetWorld3DTimeStep", ID_TYPE_FN_NUM);
embed_function("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

Binary file not shown.

View File

@@ -1510,6 +1510,48 @@ add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("spriteIsFixedRotation", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteDensity", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("density", ID_TYPE_NUM);
embed_function("GetSpriteDensity", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteFriction", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("friction", ID_TYPE_NUM);
embed_function("GetSpriteFriction", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteRestitution", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("restitution", ID_TYPE_NUM);
embed_function("GetSpriteRestitution", ID_TYPE_FN_NUM);
add_embedded_arg("spr_id", ID_TYPE_NUM);
embed_function("SetSpriteRestitutionThreshold", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("threshold", ID_TYPE_NUM);
embed_function("GetSpriteAABB", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("x1", ID_TYPE_BYREF_NUM);
add_embedded_arg("y1", ID_TYPE_BYREF_NUM);
add_embedded_arg("x2", ID_TYPE_BYREF_NUM);
add_embedded_arg("y2", ID_TYPE_BYREF_NUM);
embed_function("SetGravity2D", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
embed_function("GetGravity2D", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
embed_function("SetWorld2DTimeStep", ID_TYPE_SUB);
add_embedded_arg("ts", ID_TYPE_NUM);
embed_function("SetWorld2DVelocityIterations", ID_TYPE_SUB);
add_embedded_arg("v", ID_TYPE_NUM);
embed_function("SetWorld2DPositionIterations", ID_TYPE_SUB);
add_embedded_arg("p", ID_TYPE_NUM);
embed_function("GetWorld2DTimeStep", ID_TYPE_FN_NUM);
embed_function("GetWorld2DVelocityIterations", ID_TYPE_FN_NUM);
embed_function("GetWorld2DPositionIterations", ID_TYPE_FN_NUM);
embed_function("SetWorld2DAutoClearForces", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetWorld2DAutoClearForces", ID_TYPE_FN_NUM);
embed_function("createDistanceJoint", ID_TYPE_FN_NUM);
add_embedded_arg("spriteA", ID_TYPE_NUM);
add_embedded_arg("spriteB", ID_TYPE_NUM);
@@ -2641,6 +2683,8 @@ embed_function("SetWorld3DMaxSubSteps", ID_TYPE_SUB);
add_embedded_arg("steps", ID_TYPE_NUM);
embed_function("SetWorld3DTimeStep", ID_TYPE_SUB);
add_embedded_arg("ts", ID_TYPE_NUM);
embed_function("GetWorld3DMaxSubSteps", ID_TYPE_FN_NUM);
embed_function("GetWorld3DTimeStep", ID_TYPE_FN_NUM);
embed_function("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

File diff suppressed because it is too large Load Diff

View File

@@ -1592,6 +1592,60 @@ case FN_setSpriteFixedRotation: //Sub Procedure
case FN_spriteIsFixedRotation: //Number Function
rc_push_num(rc_spriteIsFixedRotation( SPRITEISFIXEDROTATION_SPR_ID ));
break;
case FN_SetSpriteDensity: //Sub Procedure
rc_setSpriteDensity( SETSPRITEDENSITY_SPR_ID, SETSPRITEDENSITY_DENSITY );
break;
case FN_GetSpriteDensity: //Number Function
rc_push_num(rc_getSpriteDensity( GETSPRITEDENSITY_SPR_ID ));
break;
case FN_SetSpriteFriction: //Sub Procedure
rc_setSpriteFriction( SETSPRITEFRICTION_SPR_ID, SETSPRITEFRICTION_FRICTION );
break;
case FN_GetSpriteFriction: //Number Function
rc_push_num(rc_getSpriteFriction( GETSPRITEFRICTION_SPR_ID ));
break;
case FN_SetSpriteRestitution: //Sub Procedure
rc_setSpriteRestitution( SETSPRITERESTITUTION_SPR_ID, SETSPRITERESTITUTION_RESTITUTION );
break;
case FN_GetSpriteRestitution: //Number Function
rc_push_num(rc_getSpriteRestitution( GETSPRITERESTITUTION_SPR_ID ));
break;
case FN_SetSpriteRestitutionThreshold: //Sub Procedure
rc_setSpriteRestitutionThreshold( SETSPRITERESTITUTIONTHRESHOLD_SPR_ID, SETSPRITERESTITUTIONTHRESHOLD_THRESHOLD );
break;
case FN_GetSpriteAABB: //Sub Procedure
rc_getSpriteAABB( GETSPRITEAABB_SPR_ID, &GETSPRITEAABB_X1, &GETSPRITEAABB_Y1, &GETSPRITEAABB_X2, &GETSPRITEAABB_Y2 );
break;
case FN_SetGravity2D: //Sub Procedure
rc_setGravity2D( SETGRAVITY2D_X, SETGRAVITY2D_Y );
break;
case FN_GetGravity2D: //Sub Procedure
rc_getGravity2D( &GETGRAVITY2D_X, &GETGRAVITY2D_Y );
break;
case FN_SetWorld2DTimeStep: //Sub Procedure
rc_setWorld2DTimeStep( SETWORLD2DTIMESTEP_TS );
break;
case FN_SetWorld2DVelocityIterations: //Sub Procedure
rc_setWorld2DVelocityIterations( SETWORLD2DVELOCITYITERATIONS_V );
break;
case FN_SetWorld2DPositionIterations: //Sub Procedure
rc_setWorld2DPositionIterations( SETWORLD2DPOSITIONITERATIONS_P );
break;
case FN_GetWorld2DTimeStep: //Number Function
rc_push_num(rc_getWorld2DTimeStep( ));
break;
case FN_GetWorld2DVelocityIterations: //Number Function
rc_push_num(rc_getWorld2DVelocityIterations( ));
break;
case FN_GetWorld2DPositionIterations: //Number Function
rc_push_num(rc_getWorld2DPositionIterations( ));
break;
case FN_SetWorld2DAutoClearForces: //Sub Procedure
rc_setWorld2DAutoClearForces( SETWORLD2DAUTOCLEARFORCES_FLAG );
break;
case FN_GetWorld2DAutoClearForces: //Number Function
rc_push_num(rc_getWorld2DAutoClearForces( ));
break;
case FN_createDistanceJoint: //Number Function
rc_push_num(rc_createDistanceJoint( CREATEDISTANCEJOINT_SPRITEA, CREATEDISTANCEJOINT_SPRITEB, CREATEDISTANCEJOINT_AX, CREATEDISTANCEJOINT_AY, CREATEDISTANCEJOINT_BX, CREATEDISTANCEJOINT_BY, CREATEDISTANCEJOINT_COLLIDE_CONNECT ));
break;
@@ -2567,6 +2621,12 @@ case FN_SetWorld3DMaxSubSteps: //Sub Procedure
case FN_SetWorld3DTimeStep: //Sub Procedure
rc_setWorld3DTimeStep( SETWORLD3DTIMESTEP_TS );
break;
case FN_GetWorld3DMaxSubSteps: //Number Function
rc_push_num(rc_getWorld3DMaxSubSteps( ));
break;
case FN_GetWorld3DTimeStep: //Number Function
rc_push_num(rc_getWorld3DTimeStep( ));
break;
case FN_startParticleEmitter: //Sub Procedure
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
break;

View File

@@ -4447,7 +4447,9 @@ int main(int argc, char * argv[])
#endif
//ogles2 test
#ifdef RC_TESTING
rc_intern_dirChange("/home/n00b/projects/rcbasic_alpha3/test_project");
#endif
rc_filename = "main.cbc";
//---------------

File diff suppressed because it is too large Load Diff

View File

@@ -1592,6 +1592,60 @@ case FN_setSpriteFixedRotation: //Sub Procedure
case FN_spriteIsFixedRotation: //Number Function
rc_push_num(rc_spriteIsFixedRotation( SPRITEISFIXEDROTATION_SPR_ID ));
break;
case FN_SetSpriteDensity: //Sub Procedure
rc_setSpriteDensity( SETSPRITEDENSITY_SPR_ID, SETSPRITEDENSITY_DENSITY );
break;
case FN_GetSpriteDensity: //Number Function
rc_push_num(rc_getSpriteDensity( GETSPRITEDENSITY_SPR_ID ));
break;
case FN_SetSpriteFriction: //Sub Procedure
rc_setSpriteFriction( SETSPRITEFRICTION_SPR_ID, SETSPRITEFRICTION_FRICTION );
break;
case FN_GetSpriteFriction: //Number Function
rc_push_num(rc_getSpriteFriction( GETSPRITEFRICTION_SPR_ID ));
break;
case FN_SetSpriteRestitution: //Sub Procedure
rc_setSpriteRestitution( SETSPRITERESTITUTION_SPR_ID, SETSPRITERESTITUTION_RESTITUTION );
break;
case FN_GetSpriteRestitution: //Number Function
rc_push_num(rc_getSpriteRestitution( GETSPRITERESTITUTION_SPR_ID ));
break;
case FN_SetSpriteRestitutionThreshold: //Sub Procedure
rc_setSpriteRestitutionThreshold( SETSPRITERESTITUTIONTHRESHOLD_SPR_ID, SETSPRITERESTITUTIONTHRESHOLD_THRESHOLD );
break;
case FN_GetSpriteAABB: //Sub Procedure
rc_getSpriteAABB( GETSPRITEAABB_SPR_ID, &GETSPRITEAABB_X1, &GETSPRITEAABB_Y1, &GETSPRITEAABB_X2, &GETSPRITEAABB_Y2 );
break;
case FN_SetGravity2D: //Sub Procedure
rc_setGravity2D( SETGRAVITY2D_X, SETGRAVITY2D_Y );
break;
case FN_GetGravity2D: //Sub Procedure
rc_getGravity2D( &GETGRAVITY2D_X, &GETGRAVITY2D_Y );
break;
case FN_SetWorld2DTimeStep: //Sub Procedure
rc_setWorld2DTimeStep( SETWORLD2DTIMESTEP_TS );
break;
case FN_SetWorld2DVelocityIterations: //Sub Procedure
rc_setWorld2DVelocityIterations( SETWORLD2DVELOCITYITERATIONS_V );
break;
case FN_SetWorld2DPositionIterations: //Sub Procedure
rc_setWorld2DPositionIterations( SETWORLD2DPOSITIONITERATIONS_P );
break;
case FN_GetWorld2DTimeStep: //Number Function
rc_push_num(rc_getWorld2DTimeStep( ));
break;
case FN_GetWorld2DVelocityIterations: //Number Function
rc_push_num(rc_getWorld2DVelocityIterations( ));
break;
case FN_GetWorld2DPositionIterations: //Number Function
rc_push_num(rc_getWorld2DPositionIterations( ));
break;
case FN_SetWorld2DAutoClearForces: //Sub Procedure
rc_setWorld2DAutoClearForces( SETWORLD2DAUTOCLEARFORCES_FLAG );
break;
case FN_GetWorld2DAutoClearForces: //Number Function
rc_push_num(rc_getWorld2DAutoClearForces( ));
break;
case FN_createDistanceJoint: //Number Function
rc_push_num(rc_createDistanceJoint( CREATEDISTANCEJOINT_SPRITEA, CREATEDISTANCEJOINT_SPRITEB, CREATEDISTANCEJOINT_AX, CREATEDISTANCEJOINT_AY, CREATEDISTANCEJOINT_BX, CREATEDISTANCEJOINT_BY, CREATEDISTANCEJOINT_COLLIDE_CONNECT ));
break;
@@ -2567,6 +2621,12 @@ case FN_SetWorld3DMaxSubSteps: //Sub Procedure
case FN_SetWorld3DTimeStep: //Sub Procedure
rc_setWorld3DTimeStep( SETWORLD3DTIMESTEP_TS );
break;
case FN_GetWorld3DMaxSubSteps: //Number Function
rc_push_num(rc_getWorld3DMaxSubSteps( ));
break;
case FN_GetWorld3DTimeStep: //Number Function
rc_push_num(rc_getWorld3DTimeStep( ));
break;
case FN_startParticleEmitter: //Sub Procedure
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
break;

View File

@@ -767,38 +767,23 @@ bool rc_restoreWindow()
return false;
}
void rc_setWindowIcon(int slot)
void rc_setWindowIcon(int img_id)
{
SDL_Rect img_rect;
img_rect.x = 0;
img_rect.y = 0;
//img_rect.w = rc_image_width[slot];
//img_rect.h = rc_image_height[slot];
/*
if(rc_himage[slot][win_num] != NULL)
{
//SDL_RendererFlip rf = (SDL_RendererFlip)(SDL_FLIP_VERTICAL);
if(img_id < 0 || img_id >= rc_image.size())
return;
SDL_Surface * tmp_surf = SDL_CreateRGBSurface(0, rc_image_width[slot], rc_image_height[slot], 32, 0, 0, 0, 0);
SDL_Texture * tmp_tex = SDL_CreateTexture(rc_win_renderer[rc_active_window], rc_pformat->format, SDL_TEXTUREACCESS_TARGET, rc_image_width[slot], rc_image_height[slot]);
SDL_SetRenderTarget(rc_win_renderer[rc_active_window],NULL);
SDL_RenderCopy(rc_win_renderer[rc_active_window],rc_himage[slot][rc_active_window],NULL,&img_rect);
//SDL_RenderCopyEx(rc_win_renderer[rc_active_window],rc_himage[slot][rc_active_window],NULL,NULL,0,NULL,rf);
if(!rc_image[img_id].image)
return;
SDL_RenderReadPixels(rc_win_renderer[rc_active_window], &img_rect, rc_pformat->format,tmp_surf->pixels,tmp_surf->pitch);
SDL_Surface* img_surface = convertTextureToSurface(rc_image[img_id].image);
SDL_SetColorKey(tmp_surf,SDL_TRUE,rc_image_colorKey[slot]);
if(!img_surface)
return;
SDL_SetWindowIcon(rc_win[rc_active_window], tmp_surf);
SDL_SetColorKey(img_surface,SDL_TRUE,0);
SDL_SetWindowIcon(rc_window, img_surface);
if(rc_active_screen >= 0)
SDL_SetRenderTarget(rc_win_renderer[rc_active_window], rc_hscreen[rc_active_window][rc_active_screen]);
SDL_DestroyTexture(tmp_tex);
SDL_FreeSurface(tmp_surf);
}
*/
SDL_FreeSurface(img_surface);
}

View File

@@ -897,5 +897,34 @@ void draw2DImage2(irr::video::IVideoDriver *driver, irr::video::ITexture* textur
}
SDL_Surface* convertTextureToSurface(irr::video::ITexture* itexture)
{
Uint32 t_width, t_height;
t_width = itexture->getSize().Width;
t_height = itexture->getSize().Height;
SDL_Surface* surface = SDL_CreateRGBSurface(0, t_width, t_height, 32, 0, 0, 0, 0);
if(surface)
{
Uint32* surface_pixels = (Uint32*)surface->pixels;
Uint32* texture_pixels = (Uint32*)rc_canvas[rc_active_canvas].texture->lock();
int i = 0;
for(int y = 0; y < t_height; y++)
{
for(int x = 0; x < t_width; x++)
{
surface_pixels[i] = texture_pixels[i];
}
}
rc_canvas[rc_active_canvas].texture->unlock();
}
return surface;
}
#endif // RC_GFX_CORE_H_INCLUDED

View File

@@ -1,12 +1,27 @@
#ifndef RC_OS_DEFINES_H_INCLUDED
#define RC_OS_DEFINES_H_INCLUDED
#define RC_LINUX
//#define RC_WEB
//#define RC_WINDOWS
//#define RC_ANDROID
//#define RC_MAC
//#define RC_IOS
//USED FOR TESTING ONLY
//#define RC_TESTING
//I am checking Android first since I think it also defines __linux__
#if defined(__ANDROID__)
#define RC_ANDROID
#elif defined(__linux__)
#define RC_LINUX
#elif __EMSCRIPTEN__
#define RC_WEB
#elif defined(_WIN32) || defined(_WIN64)
#define RC_WINDOWS
#elif defined(__APPLE__) && defined(__MACH__) // Apple OSX and iOS (Darwin)
#include <TargetConditionals.h>
#if defined(TARGET_IPHONE_SIMULATOR) || defined(TARGET_OS_IPHONE)
#define RC_IOS
#else
#define RC_MAC
#endif // TARGET_IPHONE_SIMULATOR
#endif // defined
#ifdef RC_WEB
#define RC_LINUX
@@ -20,10 +35,13 @@
#ifdef RC_IOS
#define RC_MOBILE
#define RC_DRIVER_GLES2
#endif
//FOR DEBUG PURPOSES
//FOR TESTING PURPOSES
#ifdef RC_TESTING
//#define RC_DRIVER_GLES2
#endif // RC_TESTING
#define RC_PI 3.14159265359

View File

@@ -32,4 +32,14 @@ void rc_setWorld3DTimeStep(double ts)
rc_physics3D.fixedTimeStep = ts;
}
double rc_getWorld3DMaxSubSteps()
{
return rc_physics3D.maxSubSteps;
}
double rc_getWorld3DTimeStep()
{
return rc_physics3D.fixedTimeStep;
}
#endif // RC_PHYSICS3D_BASE_H_INCLUDED

View File

@@ -43,6 +43,8 @@ void rc_setSpriteAngularVelocity(int spr_id, double av)
if(!rc_sprite[spr_id].active)
return;
av = rc_util_radians(av);
rc_sprite[spr_id].physics.body->SetAngularVelocity(av);
}
@@ -54,7 +56,7 @@ double rc_getSpriteAngularVelocity(int spr_id)
if(!rc_sprite[spr_id].active)
return 0;
return (double)rc_sprite[spr_id].physics.body->GetAngularVelocity();
return (double)rc_util_degrees(rc_sprite[spr_id].physics.body->GetAngularVelocity());
}
void rc_applySpriteForce(int spr_id, double fX, double fY, double pX, double pY)
@@ -365,3 +367,211 @@ bool rc_spriteIsFixedRotation(int spr_id)
return rc_sprite[spr_id].physics.body->IsFixedRotation();
}
void rc_setSpriteDensity( int spr_id, double density )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return;
if(!rc_sprite[spr_id].active)
return;
rc_sprite[spr_id].physics.fixture->SetDensity(density);
}
double rc_getSpriteDensity( int spr_id )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return 0;
if(!rc_sprite[spr_id].active)
return 0;
return rc_sprite[spr_id].physics.fixture->GetDensity();
}
void rc_setSpriteFriction( int spr_id, double friction )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return;
if(!rc_sprite[spr_id].active)
return;
rc_sprite[spr_id].physics.fixture->SetFriction(friction);
}
double rc_getSpriteFriction( int spr_id )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return 0;
if(!rc_sprite[spr_id].active)
return 0;
return rc_sprite[spr_id].physics.fixture->GetFriction();
}
void rc_setSpriteRestitution( int spr_id, double restitution )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return;
if(!rc_sprite[spr_id].active)
return;
rc_sprite[spr_id].physics.fixture->SetRestitution(restitution);
}
double rc_getSpriteRestitution( int spr_id )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return 0;
if(!rc_sprite[spr_id].active)
return 0;
return rc_sprite[spr_id].physics.fixture->GetRestitution();
}
void rc_setSpriteRestitutionThreshold( int spr_id, double threshold )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return;
if(!rc_sprite[spr_id].active)
return;
rc_sprite[spr_id].physics.fixture->SetRestitutionThreshold(threshold);
}
void rc_getSpriteAABB( int spr_id, double* x1, double* y1, double* x2, double* y2 )
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return;
if(!rc_sprite[spr_id].active)
return;
b2AABB bound_box = rc_sprite[spr_id].physics.fixture->GetAABB(0);
*x1 = bound_box.upperBound.x;
*y1 = bound_box.upperBound.y;
*x2 = bound_box.lowerBound.x;
*y2 = bound_box.lowerBound.y;
}
void rc_setWorld2DTimeStep( double ts )
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
rc_canvas[rc_active_canvas].physics2D.timeStep = ts;
}
void rc_setWorld2DVelocityIterations( double v )
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
rc_canvas[rc_active_canvas].physics2D.velocityIterations = (int)v;
}
void rc_setWorld2DPositionIterations( double p )
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
rc_canvas[rc_active_canvas].physics2D.positionIterations = (int)p;
}
double rc_getWorld2DTimeStep()
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return 0;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return 0;
return rc_canvas[rc_active_canvas].physics2D.timeStep;
}
double rc_getWorld2DVelocityIterations()
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return 0;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return 0;
return rc_canvas[rc_active_canvas].physics2D.velocityIterations;
}
double rc_getWorld2DPositionIterations()
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return 0;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return 0;
return rc_canvas[rc_active_canvas].physics2D.positionIterations;
}
void rc_setWorld2DAutoClearForces( bool flag )
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
rc_canvas[rc_active_canvas].physics2D.world->SetAutoClearForces(flag);
}
bool rc_getWorld2DAutoClearForces()
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return false;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return false;
return rc_canvas[rc_active_canvas].physics2D.world->GetAutoClearForces();
}
void rc_setGravity2D(double x, double y)
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
b2Vec2 gravity(x, y);
rc_canvas[rc_active_canvas].physics2D.world->SetGravity(gravity);
}
void rc_getGravity2D(double* x, double* y)
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
*x = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().x;
*y = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().y;
}

View File

@@ -796,34 +796,6 @@ bool rc_spriteIsVisible(int spr_id)
return rc_sprite[spr_id].visible;
}
void rc_setGravity2d(double x, double y)
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
b2Vec2 gravity(x, y);
rc_canvas[rc_active_canvas].physics2D.world->SetGravity(gravity);
}
void rc_getGravity2d(double* x, double* y)
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())
return;
if(rc_canvas[rc_active_canvas].type != RC_CANVAS_TYPE_SPRITE)
return;
*x = 0;
*y = 0;
*x = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().x;
*y = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().y;
}
//-----------------------------------PHYSICS----------------------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1731339939 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
1731681709 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
"rc_os_defines.h"
<emscripten.h>
<sys/param.h>
@@ -32,9 +32,10 @@
<irrtheora.h>
"rc_func130_cases.h"
1731678428 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
1731717801 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h>
1730315467 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1731684932 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h"
@@ -1246,7 +1247,7 @@
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h>
1731541468 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
1731712885 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h"
<SDL2/SDL.h>
<irrlicht.h>
@@ -1270,7 +1271,7 @@
"rc_joints.h"
<irrtheora.h>
1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
1731709491 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
"SDL.h"
"btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2271,7 +2272,7 @@
"rc_gfx_core.h"
<irrtheora.h>
1730315467 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1731711022 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h"
@@ -2486,7 +2487,7 @@
<irrlicht.h>
<cmath>
1731679477 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
1731693546 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
"SDL.h"
<SDL2/SDL.h>
"rc_sprite2D.h"
@@ -2504,7 +2505,7 @@
<irrlicht.h>
<vector>
1730168962 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h
1731693615 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h
"rc_sprite2D.h"
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_joints.h
@@ -2513,12 +2514,12 @@
"rc_sprite2D.h"
"rc_gfx_core.h"
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
1731695180 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
"rc_gfx_core.h"
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h
1731710840 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_animation.h