Added ray cast functions
This commit is contained in:
@@ -81,7 +81,7 @@ ul, #myUL {
|
||||
<ul id="myUL">
|
||||
<li><span class="box">Console IO</span>
|
||||
<ul class="nested">
|
||||
<li><a href="fprint.html" target="main">Fprint</a></li>
|
||||
<li><a href="fprint.html" target="main">FPrint</a></li>
|
||||
|
||||
<li><a href="input.html" target="main">Input$</a></li>
|
||||
|
||||
@@ -1361,6 +1361,12 @@ ul, #myUL {
|
||||
|
||||
<li><a href="getworld2dautoclearforces.html" target="main">GetWorld2DAutoClearForces</a></li>
|
||||
|
||||
<li><a href="castray2d.html" target="main">CastRay2D</a></li>
|
||||
|
||||
<li><a href="castray2d_all.html" target="main">CastRay2D_All</a></li>
|
||||
|
||||
<li><a href="getrayhit2d.html" target="main">GetRayHit2D</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@@ -1801,6 +1807,12 @@ ul, #myUL {
|
||||
|
||||
<li><a href="setactorsleepstate.html" target="main">SetActorSleepState</a></li>
|
||||
|
||||
<li><a href="castray3d.html" target="main">CastRay3D</a></li>
|
||||
|
||||
<li><a href="castray3d_all.html" target="main">CastRay3D_All</a></li>
|
||||
|
||||
<li><a href="getrayhit3d.html" target="main">GetRayHit3D</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -538,6 +538,9 @@ rc_getWorld2DVelocityIterations( )
|
||||
rc_getWorld2DPositionIterations( )
|
||||
rc_setWorld2DAutoClearForces( SETWORLD2DAUTOCLEARFORCES_FLAG )
|
||||
rc_getWorld2DAutoClearForces( )
|
||||
rc_castRay2D( CASTRAY2D_FROM_X, CASTRAY2D_FROM_Y, CASTRAY2D_TO_X, CASTRAY2D_TO_Y )
|
||||
rc_castRay2D_All( CASTRAY2D_ALL_FROM_X, CASTRAY2D_ALL_FROM_Y, CASTRAY2D_ALL_TO_X, CASTRAY2D_ALL_TO_Y )
|
||||
rc_getRayHit2D( GETRAYHIT2D_INDEX, &GETRAYHIT2D_SPR_ID, &GETRAYHIT2D_X, &GETRAYHIT2D_Y, &GETRAYHIT2D_NORMAL_X, &GETRAYHIT2D_NORMAL_Y )
|
||||
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 )
|
||||
@@ -734,6 +737,9 @@ rc_computeActorGyroImpulseLocal( COMPUTEACTORGYROIMPULSELOCAL_ACTOR, COMPUTEACT
|
||||
rc_computeActorGyroImpulseWorld( COMPUTEACTORGYROIMPULSEWORLD_ACTOR, COMPUTEACTORGYROIMPULSEWORLD_DT, &COMPUTEACTORGYROIMPULSEWORLD_X, &COMPUTEACTORGYROIMPULSEWORLD_Y, &COMPUTEACTORGYROIMPULSEWORLD_Z )
|
||||
rc_getActorLocalInertia( GETACTORLOCALINERTIA_ACTOR, &GETACTORLOCALINERTIA_X, &GETACTORLOCALINERTIA_Y, &GETACTORLOCALINERTIA_Z )
|
||||
rc_setActorSleepState( SETACTORSLEEPSTATE_ACTOR, SETACTORSLEEPSTATE_STATE )
|
||||
rc_castRay3D( CASTRAY3D_FROM_X, CASTRAY3D_FROM_Y, CASTRAY3D_FROM_Z, CASTRAY3D_TO_X, CASTRAY3D_TO_Y, CASTRAY3D_TO_Z )
|
||||
rc_castRay3D_All( CASTRAY3D_ALL_FROM_X, CASTRAY3D_ALL_FROM_Y, CASTRAY3D_ALL_FROM_Z, CASTRAY3D_ALL_TO_X, CASTRAY3D_ALL_TO_Y, CASTRAY3D_ALL_TO_Z )
|
||||
rc_getRayHit3D( GETRAYHIT3D_INDEX, &GETRAYHIT3D_ACTOR_ID, &GETRAYHIT3D_X, &GETRAYHIT3D_Y, &GETRAYHIT3D_Z, &GETRAYHIT3D_NORMAL_X, &GETRAYHIT3D_NORMAL_Y, &GETRAYHIT3D_NORMAL_Z )
|
||||
rc_createPointConstraint( CREATEPOINTCONSTRAINT_ACTORA, CREATEPOINTCONSTRAINT_PXA, CREATEPOINTCONSTRAINT_PYA, CREATEPOINTCONSTRAINT_PZA )
|
||||
rc_createPointConstraintEx( CREATEPOINTCONSTRAINTEX_ACTORA, CREATEPOINTCONSTRAINTEX_ACTORB, CREATEPOINTCONSTRAINTEX_PXA, CREATEPOINTCONSTRAINTEX_PYA, CREATEPOINTCONSTRAINTEX_PZA, CREATEPOINTCONSTRAINTEX_PXB, CREATEPOINTCONSTRAINTEX_PYB, CREATEPOINTCONSTRAINTEX_PZB )
|
||||
rc_setPointPivotA( SETPOINTPIVOTA_CONSTRAINT_ID, SETPOINTPIVOTA_X, SETPOINTPIVOTA_Y, SETPOINTPIVOTA_Z )
|
||||
|
||||
@@ -57,3 +57,6 @@ sub computeActorGyroImpulseLocal( actor, dt, ByRef x, ByRef y, ByRef z)
|
||||
sub computeActorGyroImpulseWorld( actor, dt, ByRef x, ByRef y, ByRef z)
|
||||
sub getActorLocalInertia( actor, ByRef x, ByRef y, ByRef z)
|
||||
sub SetActorSleepState(actor, state)
|
||||
function CastRay3D( from_x, from_y, from_z, to_x, to_y, to_z )
|
||||
function CastRay3D_All( from_x, from_y, from_z, to_x, to_y, to_z )
|
||||
sub GetRayHit3D( index, ByRef actor_id, ByRef x, ByRef y, ByRef z, ByRef normal_x, ByRef normal_y, ByRef normal_z )
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
sub Fprint(txt$)
|
||||
sub FPrint(txt$)
|
||||
function Input$(prompt$)
|
||||
|
||||
@@ -49,3 +49,6 @@ function GetWorld2DVelocityIterations()
|
||||
function GetWorld2DPositionIterations()
|
||||
sub SetWorld2DAutoClearForces( flag )
|
||||
function GetWorld2DAutoClearForces()
|
||||
function CastRay2D( from_x, from_y, to_x, to_y )
|
||||
function CastRay2D_All( from_x, from_y, to_x, to_y )
|
||||
sub GetRayHit2D( index, ByRef spr_id, ByRef x, ByRef y, ByRef normal_x, ByRef normal_y )
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
void init_embedded_functions()
|
||||
{
|
||||
embed_function("Fprint", ID_TYPE_SUB);
|
||||
embed_function("FPrint", ID_TYPE_SUB);
|
||||
add_embedded_arg("txt$", ID_TYPE_STR);
|
||||
embed_function("Input$", ID_TYPE_FN_STR);
|
||||
add_embedded_arg("prompt$", ID_TYPE_STR);
|
||||
@@ -1559,6 +1559,23 @@ void init_embedded_functions()
|
||||
embed_function("SetWorld2DAutoClearForces", ID_TYPE_SUB);
|
||||
add_embedded_arg("flag", ID_TYPE_NUM);
|
||||
embed_function("GetWorld2DAutoClearForces", ID_TYPE_FN_NUM);
|
||||
embed_function("CastRay2D", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
embed_function("CastRay2D_All", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
embed_function("GetRayHit2D", ID_TYPE_SUB);
|
||||
add_embedded_arg("index", ID_TYPE_NUM);
|
||||
add_embedded_arg("spr_id", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_y", ID_TYPE_BYREF_NUM);
|
||||
embed_function("createDistanceJoint", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("spriteA", ID_TYPE_NUM);
|
||||
add_embedded_arg("spriteB", ID_TYPE_NUM);
|
||||
@@ -2299,6 +2316,29 @@ void init_embedded_functions()
|
||||
embed_function("SetActorSleepState", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("state", ID_TYPE_NUM);
|
||||
embed_function("CastRay3D", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_z", ID_TYPE_NUM);
|
||||
embed_function("CastRay3D_All", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_z", ID_TYPE_NUM);
|
||||
embed_function("GetRayHit3D", ID_TYPE_SUB);
|
||||
add_embedded_arg("index", ID_TYPE_NUM);
|
||||
add_embedded_arg("actor_id", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_z", ID_TYPE_BYREF_NUM);
|
||||
embed_function("createPointConstraint", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("actorA", ID_TYPE_NUM);
|
||||
add_embedded_arg("pxA", ID_TYPE_NUM);
|
||||
|
||||
@@ -1 +1,43 @@
|
||||
/home/n00b/Music/Simple 3D Platformer/main.bas
|
||||
embedded_functions.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/conio.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/arrays.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/math.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/strings.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/stacks.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/files.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/directories.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/datetime.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/window.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/canvas.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/prim2d.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/images.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/keyboard.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/audio.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/joystick.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/gfxconsole.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/text.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/touch.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/network.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/video.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/system.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/matrix.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/process.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/clipboard.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/textedit.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprites.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprite_animation.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprite_physics.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/joint2D.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/tilemaps.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/mesh.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_animation.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_physics.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/constraint3D.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/camera.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/scene.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/particles.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/lights.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/terrain.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/water.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/materials.bas
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
embed_function("Fprint", ID_TYPE_SUB);
|
||||
embed_function("FPrint", ID_TYPE_SUB);
|
||||
add_embedded_arg("txt$", ID_TYPE_STR);
|
||||
embed_function("Input$", ID_TYPE_FN_STR);
|
||||
add_embedded_arg("prompt$", ID_TYPE_STR);
|
||||
@@ -1553,6 +1553,23 @@ 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("CastRay2D", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
embed_function("CastRay2D_All", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
embed_function("GetRayHit2D", ID_TYPE_SUB);
|
||||
add_embedded_arg("index", ID_TYPE_NUM);
|
||||
add_embedded_arg("spr_id", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_y", ID_TYPE_BYREF_NUM);
|
||||
embed_function("createDistanceJoint", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("spriteA", ID_TYPE_NUM);
|
||||
add_embedded_arg("spriteB", ID_TYPE_NUM);
|
||||
@@ -2293,6 +2310,29 @@ add_embedded_arg("z", ID_TYPE_BYREF_NUM);
|
||||
embed_function("SetActorSleepState", ID_TYPE_SUB);
|
||||
add_embedded_arg("actor", ID_TYPE_NUM);
|
||||
add_embedded_arg("state", ID_TYPE_NUM);
|
||||
embed_function("CastRay3D", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_z", ID_TYPE_NUM);
|
||||
embed_function("CastRay3D_All", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("from_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("from_z", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_y", ID_TYPE_NUM);
|
||||
add_embedded_arg("to_z", ID_TYPE_NUM);
|
||||
embed_function("GetRayHit3D", ID_TYPE_SUB);
|
||||
add_embedded_arg("index", ID_TYPE_NUM);
|
||||
add_embedded_arg("actor_id", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("z", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_x", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_y", ID_TYPE_BYREF_NUM);
|
||||
add_embedded_arg("normal_z", ID_TYPE_BYREF_NUM);
|
||||
embed_function("createPointConstraint", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("actorA", ID_TYPE_NUM);
|
||||
add_embedded_arg("pxA", ID_TYPE_NUM);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
case FN_Fprint: //Sub Procedure
|
||||
case FN_FPrint: //Sub Procedure
|
||||
rc_fprint( FPRINT_TXT$ );
|
||||
break;
|
||||
case FN_Input$: //String Function
|
||||
@@ -1646,6 +1646,15 @@ case FN_SetWorld2DAutoClearForces: //Sub Procedure
|
||||
case FN_GetWorld2DAutoClearForces: //Number Function
|
||||
rc_push_num(rc_getWorld2DAutoClearForces( ));
|
||||
break;
|
||||
case FN_CastRay2D: //Number Function
|
||||
rc_push_num(rc_castRay2D( CASTRAY2D_FROM_X, CASTRAY2D_FROM_Y, CASTRAY2D_TO_X, CASTRAY2D_TO_Y ));
|
||||
break;
|
||||
case FN_CastRay2D_All: //Number Function
|
||||
rc_push_num(rc_castRay2D_All( CASTRAY2D_ALL_FROM_X, CASTRAY2D_ALL_FROM_Y, CASTRAY2D_ALL_TO_X, CASTRAY2D_ALL_TO_Y ));
|
||||
break;
|
||||
case FN_GetRayHit2D: //Sub Procedure
|
||||
rc_getRayHit2D( GETRAYHIT2D_INDEX, &GETRAYHIT2D_SPR_ID, &GETRAYHIT2D_X, &GETRAYHIT2D_Y, &GETRAYHIT2D_NORMAL_X, &GETRAYHIT2D_NORMAL_Y );
|
||||
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;
|
||||
@@ -2234,6 +2243,15 @@ case FN_getActorLocalInertia: //Sub Procedure
|
||||
case FN_SetActorSleepState: //Sub Procedure
|
||||
rc_setActorSleepState( SETACTORSLEEPSTATE_ACTOR, SETACTORSLEEPSTATE_STATE );
|
||||
break;
|
||||
case FN_CastRay3D: //Number Function
|
||||
rc_push_num(rc_castRay3D( CASTRAY3D_FROM_X, CASTRAY3D_FROM_Y, CASTRAY3D_FROM_Z, CASTRAY3D_TO_X, CASTRAY3D_TO_Y, CASTRAY3D_TO_Z ));
|
||||
break;
|
||||
case FN_CastRay3D_All: //Number Function
|
||||
rc_push_num(rc_castRay3D_All( CASTRAY3D_ALL_FROM_X, CASTRAY3D_ALL_FROM_Y, CASTRAY3D_ALL_FROM_Z, CASTRAY3D_ALL_TO_X, CASTRAY3D_ALL_TO_Y, CASTRAY3D_ALL_TO_Z ));
|
||||
break;
|
||||
case FN_GetRayHit3D: //Sub Procedure
|
||||
rc_getRayHit3D( GETRAYHIT3D_INDEX, &GETRAYHIT3D_ACTOR_ID, &GETRAYHIT3D_X, &GETRAYHIT3D_Y, &GETRAYHIT3D_Z, &GETRAYHIT3D_NORMAL_X, &GETRAYHIT3D_NORMAL_Y, &GETRAYHIT3D_NORMAL_Z );
|
||||
break;
|
||||
case FN_createPointConstraint: //Number Function
|
||||
rc_push_num(rc_createPointConstraint( CREATEPOINTCONSTRAINT_ACTORA, CREATEPOINTCONSTRAINT_PXA, CREATEPOINTCONSTRAINT_PYA, CREATEPOINTCONSTRAINT_PZA ));
|
||||
break;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
case FN_Fprint: //Sub Procedure
|
||||
case FN_FPrint: //Sub Procedure
|
||||
rc_fprint( FPRINT_TXT$ );
|
||||
break;
|
||||
case FN_Input$: //String Function
|
||||
@@ -1646,6 +1646,15 @@ case FN_SetWorld2DAutoClearForces: //Sub Procedure
|
||||
case FN_GetWorld2DAutoClearForces: //Number Function
|
||||
rc_push_num(rc_getWorld2DAutoClearForces( ));
|
||||
break;
|
||||
case FN_CastRay2D: //Number Function
|
||||
rc_push_num(rc_castRay2D( CASTRAY2D_FROM_X, CASTRAY2D_FROM_Y, CASTRAY2D_TO_X, CASTRAY2D_TO_Y ));
|
||||
break;
|
||||
case FN_CastRay2D_All: //Number Function
|
||||
rc_push_num(rc_castRay2D_All( CASTRAY2D_ALL_FROM_X, CASTRAY2D_ALL_FROM_Y, CASTRAY2D_ALL_TO_X, CASTRAY2D_ALL_TO_Y ));
|
||||
break;
|
||||
case FN_GetRayHit2D: //Sub Procedure
|
||||
rc_getRayHit2D( GETRAYHIT2D_INDEX, &GETRAYHIT2D_SPR_ID, &GETRAYHIT2D_X, &GETRAYHIT2D_Y, &GETRAYHIT2D_NORMAL_X, &GETRAYHIT2D_NORMAL_Y );
|
||||
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;
|
||||
@@ -2234,6 +2243,15 @@ case FN_getActorLocalInertia: //Sub Procedure
|
||||
case FN_SetActorSleepState: //Sub Procedure
|
||||
rc_setActorSleepState( SETACTORSLEEPSTATE_ACTOR, SETACTORSLEEPSTATE_STATE );
|
||||
break;
|
||||
case FN_CastRay3D: //Number Function
|
||||
rc_push_num(rc_castRay3D( CASTRAY3D_FROM_X, CASTRAY3D_FROM_Y, CASTRAY3D_FROM_Z, CASTRAY3D_TO_X, CASTRAY3D_TO_Y, CASTRAY3D_TO_Z ));
|
||||
break;
|
||||
case FN_CastRay3D_All: //Number Function
|
||||
rc_push_num(rc_castRay3D_All( CASTRAY3D_ALL_FROM_X, CASTRAY3D_ALL_FROM_Y, CASTRAY3D_ALL_FROM_Z, CASTRAY3D_ALL_TO_X, CASTRAY3D_ALL_TO_Y, CASTRAY3D_ALL_TO_Z ));
|
||||
break;
|
||||
case FN_GetRayHit3D: //Sub Procedure
|
||||
rc_getRayHit3D( GETRAYHIT3D_INDEX, &GETRAYHIT3D_ACTOR_ID, &GETRAYHIT3D_X, &GETRAYHIT3D_Y, &GETRAYHIT3D_Z, &GETRAYHIT3D_NORMAL_X, &GETRAYHIT3D_NORMAL_Y, &GETRAYHIT3D_NORMAL_Z );
|
||||
break;
|
||||
case FN_createPointConstraint: //Number Function
|
||||
rc_push_num(rc_createPointConstraint( CREATEPOINTCONSTRAINT_ACTORA, CREATEPOINTCONSTRAINT_PXA, CREATEPOINTCONSTRAINT_PYA, CREATEPOINTCONSTRAINT_PZA ));
|
||||
break;
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
#include "SDL.h"
|
||||
#include "btBulletDynamicsCommon.h"
|
||||
#include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
|
||||
#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
|
||||
#else
|
||||
#include <SDL2/SDL.h>
|
||||
#include <bullet/btBulletDynamicsCommon.h>
|
||||
#include <BulletSoftBody/btSoftRigidDynamicsWorld.h>
|
||||
#include <bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h>
|
||||
#endif // _IRR_ANDROID_PLATFORM_
|
||||
#include <irrlicht.h>
|
||||
#include <iostream>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define RC_OS_DEFINES_H_INCLUDED
|
||||
|
||||
//USED FOR TESTING ONLY
|
||||
#define RC_TESTING
|
||||
//#define RC_TESTING
|
||||
|
||||
//I am checking Android first since I think it also defines __linux__
|
||||
|
||||
|
||||
@@ -3,6 +3,93 @@
|
||||
|
||||
#include "rc_gfx_core.h"
|
||||
|
||||
struct rc_rayHit3D_obj
|
||||
{
|
||||
int actor_id;
|
||||
btVector3 hit_point;
|
||||
btVector3 hit_normal;
|
||||
};
|
||||
|
||||
irr::core::array<rc_rayHit3D_obj> rc_rayHit3D;
|
||||
|
||||
///all hits
|
||||
int rc_castRay3D_All(double from_x, double from_y, double from_z, double to_x, double to_y, double to_z)
|
||||
{
|
||||
rc_rayHit3D.clear();
|
||||
btVector3 from(from_x, from_y, from_z);
|
||||
btVector3 to(to_x, to_y, to_z);
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawLine(from, to, btVector4(0, 0, 0, 1));
|
||||
btCollisionWorld::AllHitsRayResultCallback allResults(from, to);
|
||||
allResults.m_flags |= btTriangleRaycastCallback::kF_KeepUnflippedNormal;
|
||||
//kF_UseGjkConvexRaytest flag is now enabled by default, use the faster but more approximate algorithm
|
||||
//allResults.m_flags |= btTriangleRaycastCallback::kF_UseSubSimplexConvexCastRaytest;
|
||||
allResults.m_flags |= btTriangleRaycastCallback::kF_UseSubSimplexConvexCastRaytest;
|
||||
|
||||
rc_physics3D.world->getPointer()->rayTest(from, to, allResults);
|
||||
|
||||
for (int i = 0; i < allResults.m_hitFractions.size(); i++)
|
||||
{
|
||||
rc_rayHit3D_obj hit;
|
||||
hit.hit_point = from.lerp(to, allResults.m_hitFractions[i]);
|
||||
hit.hit_normal = allResults.m_hitNormalWorld[i];
|
||||
btRigidBody* body = (btRigidBody*)allResults.m_collisionObjects[i];
|
||||
SCollisionObjectIdentification* colID = (SCollisionObjectIdentification*)body->getUserPointer();
|
||||
hit.actor_id = colID->getId();
|
||||
rc_rayHit3D.push_back(hit);
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawSphere(p, 0.1, red);
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawLine(p, p + allResults.m_hitNormalWorld[i], red);
|
||||
}
|
||||
|
||||
return allResults.m_hitFractions.size();
|
||||
}
|
||||
|
||||
///first hit
|
||||
bool rc_castRay3D(double from_x, double from_y, double from_z, double to_x, double to_y, double to_z)
|
||||
{
|
||||
rc_rayHit3D.clear();
|
||||
btVector3 from(from_x, from_y, from_z);
|
||||
btVector3 to(to_x, to_y, to_z);
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawLine(from, to, btVector4(0, 0, 1, 1));
|
||||
|
||||
btCollisionWorld::ClosestRayResultCallback closestResults(from, to);
|
||||
closestResults.m_flags |= btTriangleRaycastCallback::kF_FilterBackfaces;
|
||||
|
||||
rc_physics3D.world->getPointer()->rayTest(from, to, closestResults);
|
||||
|
||||
if (closestResults.hasHit())
|
||||
{
|
||||
rc_rayHit3D_obj hit;
|
||||
hit.hit_point = from.lerp(to, closestResults.m_closestHitFraction);
|
||||
hit.hit_normal = closestResults.m_hitNormalWorld;
|
||||
btRigidBody* body = (btRigidBody*)closestResults.m_collisionObject;
|
||||
SCollisionObjectIdentification* colID = (SCollisionObjectIdentification*)body->getUserPointer();
|
||||
hit.actor_id = colID->getId();
|
||||
rc_rayHit3D.push_back(hit);
|
||||
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawSphere(p, 0.1, blue);
|
||||
//m_dynamicsWorld->getDebugDrawer()->drawLine(p, p + closestResults.m_hitNormalWorld, blue);
|
||||
}
|
||||
|
||||
return closestResults.hasHit();
|
||||
}
|
||||
|
||||
void rc_getRayHit3D( int index, double* actor_id, double* x, double* y, double* z, double* normal_x, double* normal_y, double* normal_z )
|
||||
{
|
||||
if(index < 0 || index >= rc_rayHit3D.size())
|
||||
{
|
||||
*actor_id = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
*actor_id = rc_rayHit3D[index].actor_id;
|
||||
*x = rc_rayHit3D[index].hit_point.getX();
|
||||
*y = rc_rayHit3D[index].hit_point.getY();
|
||||
*z = rc_rayHit3D[index].hit_point.getZ();
|
||||
*normal_x = rc_rayHit3D[index].hit_normal.getX();
|
||||
*normal_y = rc_rayHit3D[index].hit_normal.getY();
|
||||
*normal_z = rc_rayHit3D[index].hit_normal.getZ();
|
||||
}
|
||||
|
||||
//Set Gravity
|
||||
void rc_setGravity3D(double x, double y, double z)
|
||||
{
|
||||
|
||||
@@ -586,3 +586,115 @@ void rc_getGravity2D(double* x, double* y)
|
||||
*x = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().x;
|
||||
*y = rc_canvas[rc_active_canvas].physics2D.world->GetGravity().y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Custom callback to collect all ray cast hits
|
||||
class RayCastCallback : public b2RayCastCallback {
|
||||
public:
|
||||
struct Hit {
|
||||
b2Fixture* fixture;
|
||||
b2Vec2 point;
|
||||
b2Vec2 normal;
|
||||
float fraction;
|
||||
};
|
||||
|
||||
std::vector<Hit> hits;
|
||||
|
||||
// This function is called for every fixture hit by the ray
|
||||
float ReportFixture(b2Fixture* fixture, const b2Vec2& point, const b2Vec2& normal, float fraction) override {
|
||||
hits.push_back({fixture, point, normal, fraction});
|
||||
return 1.0f; // Continue the ray cast to find all hits
|
||||
}
|
||||
};
|
||||
|
||||
struct rc_rayHit2D_obj
|
||||
{
|
||||
int sprite_id;
|
||||
b2Vec2 hit_point;
|
||||
b2Vec2 hit_normal;
|
||||
};
|
||||
|
||||
std::vector<rc_rayHit2D_obj> rc_rayHit2D;
|
||||
|
||||
// Function to perform a ray cast and collect all hits
|
||||
int rc_castRay2D_All(double from_x, double from_y, double to_x, double to_y)
|
||||
{
|
||||
rc_rayHit2D.clear();
|
||||
RayCastCallback callback;
|
||||
const b2Vec2 point1(from_x, from_y);
|
||||
const b2Vec2 point2(to_x, to_y);
|
||||
|
||||
rc_canvas[rc_active_canvas].physics2D.world->RayCast(&callback, point1, point2);
|
||||
|
||||
std::vector<RayCastCallback::Hit> cb_hits = callback.hits;
|
||||
|
||||
for(int i = 0; i < cb_hits.size(); i++)
|
||||
{
|
||||
rc_rayHit2D_obj hit;
|
||||
rc_sprite2D_obj* h_sprite = (rc_sprite2D_obj*)cb_hits[i].fixture->GetBody()->GetUserData().pointer;
|
||||
hit.sprite_id = h_sprite->id;
|
||||
hit.hit_point = cb_hits[i].point;
|
||||
hit.hit_normal = cb_hits[i].normal;
|
||||
rc_rayHit2D.push_back(hit);
|
||||
}
|
||||
|
||||
return cb_hits.size();
|
||||
}
|
||||
|
||||
// Function to perform a ray cast and collect the closest hit
|
||||
int rc_castRay2D(double from_x, double from_y, double to_x, double to_y)
|
||||
{
|
||||
rc_rayHit2D.clear();
|
||||
RayCastCallback callback;
|
||||
const b2Vec2 point1(from_x, from_y);
|
||||
const b2Vec2 point2(to_x, to_y);
|
||||
|
||||
rc_canvas[rc_active_canvas].physics2D.world->RayCast(&callback, point1, point2);
|
||||
|
||||
std::vector<RayCastCallback::Hit> cb_hits = callback.hits;
|
||||
|
||||
float min_fraction = 0;
|
||||
int index = 0;
|
||||
|
||||
for(int i = 0; i < cb_hits.size(); i++)
|
||||
{
|
||||
rc_rayHit2D_obj hit;
|
||||
rc_sprite2D_obj* h_sprite = (rc_sprite2D_obj*)cb_hits[i].fixture->GetBody()->GetUserData().pointer;
|
||||
hit.sprite_id = h_sprite->id;
|
||||
hit.hit_point = cb_hits[i].point;
|
||||
hit.hit_normal = cb_hits[i].normal;
|
||||
|
||||
if(i == 0 || cb_hits[i].fraction < min_fraction)
|
||||
{
|
||||
min_fraction = cb_hits[i].fraction;
|
||||
index = rc_rayHit2D.size();
|
||||
rc_rayHit2D.push_back(hit);
|
||||
}
|
||||
}
|
||||
|
||||
if(cb_hits.size() == 0)
|
||||
return 0;
|
||||
|
||||
rc_rayHit2D_obj min_hit = rc_rayHit2D[index];
|
||||
rc_rayHit2D.clear();
|
||||
rc_rayHit2D.push_back(min_hit);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void rc_getRayHit2D(int index, double* spr_id, double* x, double* y, double* normal_x, double* normal_y)
|
||||
{
|
||||
if(index < 0 || index >= rc_rayHit2D.size())
|
||||
{
|
||||
*spr_id = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
*spr_id = rc_rayHit2D[index].sprite_id;
|
||||
*x = rc_rayHit2D[index].hit_point.x;
|
||||
*y = rc_rayHit2D[index].hit_point.y;
|
||||
*normal_x = rc_rayHit2D[index].hit_normal.x;
|
||||
*normal_y = rc_rayHit2D[index].hit_normal.y;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
1734119283 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
<TargetConditionals.h>
|
||||
|
||||
1733959765 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
1734207007 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
|
||||
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
|
||||
"rc_os_defines.h"
|
||||
@@ -1272,13 +1272,15 @@
|
||||
"rc_joints.h"
|
||||
<irrtheora.h>
|
||||
|
||||
1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
||||
1734192650 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
|
||||
"SDL.h"
|
||||
"btBulletDynamicsCommon.h"
|
||||
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
|
||||
"BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
|
||||
<SDL2/SDL.h>
|
||||
<bullet/btBulletDynamicsCommon.h>
|
||||
<BulletSoftBody/btSoftRigidDynamicsWorld.h>
|
||||
<bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h>
|
||||
<irrlicht.h>
|
||||
<iostream>
|
||||
<sstream>
|
||||
@@ -2273,7 +2275,7 @@
|
||||
"rc_gfx_core.h"
|
||||
<irrtheora.h>
|
||||
|
||||
1733959765 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
1734207007 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
|
||||
1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
|
||||
"irrBullet.h"
|
||||
@@ -2506,7 +2508,7 @@
|
||||
<irrlicht.h>
|
||||
<vector>
|
||||
|
||||
1731903210 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h
|
||||
1734205862 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h
|
||||
"rc_sprite2D.h"
|
||||
|
||||
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_joints.h
|
||||
@@ -2515,10 +2517,10 @@
|
||||
"rc_sprite2D.h"
|
||||
"rc_gfx_core.h"
|
||||
|
||||
1733590876 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
|
||||
1734206925 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
|
||||
"rc_gfx_core.h"
|
||||
|
||||
1734125778 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
|
||||
1734138955 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
|
||||
|
||||
1731710840 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h
|
||||
|
||||
@@ -2539,3 +2541,7 @@
|
||||
|
||||
1733959687 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h
|
||||
|
||||
1608686973 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
|
||||
"BulletCollision/CollisionShapes/btTriangleCallback.h"
|
||||
"LinearMath/btTransform.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user