Added ray cast functions
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user