Added missing functions to Projector Actors

This commit is contained in:
n00b87
2026-02-22 03:04:03 -06:00
parent 21e06b0848
commit c4d559f0d4
25 changed files with 2523 additions and 1926 deletions

View File

@@ -233,6 +233,7 @@ rc_drawTriangle( TRIANGLE_X1, TRIANGLE_Y1, TRIANGLE_X2, TRIANGLE_Y2, TRIANGL
rc_drawLine3D( LINE3D_X1, LINE3D_Y1, LINE3D_Z1, LINE3D_X2, LINE3D_Y2, LINE3D_Z2 ) rc_drawLine3D( LINE3D_X1, LINE3D_Y1, LINE3D_Z1, LINE3D_X2, LINE3D_Y2, LINE3D_Z2 )
rc_drawBox3D( BOX3D_MIN_X, BOX3D_MIN_Y, BOX3D_MIN_Z, BOX3D_MAX_X, BOX3D_MAX_Y, BOX3D_MAX_Z ) rc_drawBox3D( BOX3D_MIN_X, BOX3D_MIN_Y, BOX3D_MIN_Z, BOX3D_MAX_X, BOX3D_MAX_Y, BOX3D_MAX_Z )
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 ) rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 )
rc_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS )
rc_loadImage( LOADIMAGE_IMG$ ) rc_loadImage( LOADIMAGE_IMG$ )
rc_loadImageEx( LOADIMAGEEX_IMG$, LOADIMAGEEX_COLKEY ) rc_loadImageEx( LOADIMAGEEX_IMG$, LOADIMAGEEX_COLKEY )
rc_createImage( CREATEIMAGE_W, CREATEIMAGE_H, &CREATEIMAGE_BUFFER ) rc_createImage( CREATEIMAGE_W, CREATEIMAGE_H, &CREATEIMAGE_BUFFER )
@@ -262,6 +263,7 @@ rc_drawImage_Rotozoom( DRAWIMAGE_ROTOZOOM_SLOT, DRAWIMAGE_ROTOZOOM_X, DRAWIMAG
rc_drawImage_RotozoomEx( DRAWIMAGE_ROTOZOOMEX_SLOT, DRAWIMAGE_ROTOZOOMEX_X, DRAWIMAGE_ROTOZOOMEX_Y, DRAWIMAGE_ROTOZOOMEX_SRC_X, DRAWIMAGE_ROTOZOOMEX_SRC_Y, DRAWIMAGE_ROTOZOOMEX_SRC_W, DRAWIMAGE_ROTOZOOMEX_SRC_H, DRAWIMAGE_ROTOZOOMEX_ANGLE, DRAWIMAGE_ROTOZOOMEX_ZX, DRAWIMAGE_ROTOZOOMEX_ZY ) rc_drawImage_RotozoomEx( DRAWIMAGE_ROTOZOOMEX_SLOT, DRAWIMAGE_ROTOZOOMEX_X, DRAWIMAGE_ROTOZOOMEX_Y, DRAWIMAGE_ROTOZOOMEX_SRC_X, DRAWIMAGE_ROTOZOOMEX_SRC_Y, DRAWIMAGE_ROTOZOOMEX_SRC_W, DRAWIMAGE_ROTOZOOMEX_SRC_H, DRAWIMAGE_ROTOZOOMEX_ANGLE, DRAWIMAGE_ROTOZOOMEX_ZX, DRAWIMAGE_ROTOZOOMEX_ZY )
rc_drawImage_Flip( DRAWIMAGE_FLIP_SLOT, DRAWIMAGE_FLIP_X, DRAWIMAGE_FLIP_Y, DRAWIMAGE_FLIP_H, DRAWIMAGE_FLIP_V ) rc_drawImage_Flip( DRAWIMAGE_FLIP_SLOT, DRAWIMAGE_FLIP_X, DRAWIMAGE_FLIP_Y, DRAWIMAGE_FLIP_H, DRAWIMAGE_FLIP_V )
rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V ) rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V )
rc_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ )
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE ) rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE )
rc_getAntiAliasMode( ) rc_getAntiAliasMode( )
rc_convertToNormalMap( CONVERTTONORMALMAP_IMG_ID, CONVERTTONORMALMAP_AMP ) rc_convertToNormalMap( CONVERTTONORMALMAP_IMG_ID, CONVERTTONORMALMAP_AMP )
@@ -344,6 +346,7 @@ rc_drawText( DRAWTEXT_TXT$, DRAWTEXT_X, DRAWTEXT_Y )
rc_getTextSize( GETTEXTSIZE_TXT$, &GETTEXTSIZE_W, &GETTEXTSIZE_H ) rc_getTextSize( GETTEXTSIZE_TXT$, &GETTEXTSIZE_W, &GETTEXTSIZE_H )
rc_getTextWidth( TEXTWIDTH_TXT$ ) rc_getTextWidth( TEXTWIDTH_TXT$ )
rc_getTextHeight( TEXTHEIGHT_TXT$ ) rc_getTextHeight( TEXTHEIGHT_TXT$ )
rc_activeFont( )
rc_touchPressure( ) rc_touchPressure( )
rc_getTouch( &GETTOUCH_STATUS, &GETTOUCH_X, &GETTOUCH_Y, &GETTOUCH_DX, &GETTOUCH_DY ) rc_getTouch( &GETTOUCH_STATUS, &GETTOUCH_X, &GETTOUCH_Y, &GETTOUCH_DX, &GETTOUCH_DY )
rc_getMultiTouch( &GETMULTITOUCH_STATUS, &GETMULTITOUCH_X, &GETMULTITOUCH_Y, &GETMULTITOUCH_FINGERS, &GETMULTITOUCH_DIST, &GETMULTITOUCH_THETA ) rc_getMultiTouch( &GETMULTITOUCH_STATUS, &GETMULTITOUCH_X, &GETMULTITOUCH_Y, &GETMULTITOUCH_FINGERS, &GETMULTITOUCH_DIST, &GETMULTITOUCH_THETA )
@@ -531,6 +534,7 @@ rc_getSpriteCurrentAnimationFrame( GETSPRITECURRENTANIMATIONFRAME_SPRITE )
rc_numSpriteAnimationLoops( NUMSPRITEANIMATIONLOOPS_SPRITE ) rc_numSpriteAnimationLoops( NUMSPRITEANIMATIONLOOPS_SPRITE )
rc_spriteAnimationIsPlaying( SPRITEANIMATIONISPLAYING_SPRITE ) rc_spriteAnimationIsPlaying( SPRITEANIMATIONISPLAYING_SPRITE )
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION ) rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION )
rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION )
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y ) rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y )
rc_setSpriteLinearVelocity( SETSPRITELINEARVELOCITY_SPR_ID, SETSPRITELINEARVELOCITY_X, SETSPRITELINEARVELOCITY_Y ) rc_setSpriteLinearVelocity( SETSPRITELINEARVELOCITY_SPR_ID, SETSPRITELINEARVELOCITY_X, SETSPRITELINEARVELOCITY_Y )
rc_getSpriteLinearVelocity( GETSPRITELINEARVELOCITY_SPR_ID, &GETSPRITELINEARVELOCITY_X, &GETSPRITELINEARVELOCITY_Y ) rc_getSpriteLinearVelocity( GETSPRITELINEARVELOCITY_SPR_ID, &GETSPRITELINEARVELOCITY_X, &GETSPRITELINEARVELOCITY_Y )
@@ -1051,6 +1055,12 @@ rc_setProjectorTarget( SETPROJECTORTARGET_ACTOR, SETPROJECTORTARGET_X, SETPROJ
rc_getProjectorTarget( GETPROJECTORTARGET_ACTOR, &GETPROJECTORTARGET_X, &GETPROJECTORTARGET_Y, &GETPROJECTORTARGET_Z ) rc_getProjectorTarget( GETPROJECTORTARGET_ACTOR, &GETPROJECTORTARGET_X, &GETPROJECTORTARGET_Y, &GETPROJECTORTARGET_Z )
rc_setProjectorFOV( SETPROJECTORFOV_ACTOR, SETPROJECTORFOV_FOV ) rc_setProjectorFOV( SETPROJECTORFOV_ACTOR, SETPROJECTORFOV_FOV )
rc_getProjectorFOV( GETPROJECTORFOV_ACTOR ) rc_getProjectorFOV( GETPROJECTORFOV_ACTOR )
rc_setProjectorTexture( SETPROJECTORTEXTURE_ACTOR, SETPROJECTORTEXTURE_IMG_ID )
rc_getProjectorTexture( GETPROJECTORTEXTURE_ACTOR )
rc_addProjectorEffectActor( ADDPROJECTOREFFECTACTOR_ACTOR, ADDPROJECTOREFFECTACTOR_TGT_ACTOR )
rc_getProjectorEffectActorCount( GETPROJECTOREFFECTACTORCOUNT_ACTOR )
rc_getProjectorEffectActor( GETPROJECTOREFFECTACTOR_ACTOR, GETPROJECTOREFFECTACTOR_TGT_INDEX )
rc_removeProjectorEffectActor( REMOVEPROJECTOREFFECTACTOR_ACTOR, REMOVEPROJECTOREFFECTACTOR_TGT_INDEX )
rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX ) rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX )
rc_getCompositeChildCount( GETCOMPOSITECHILDCOUNT_ACTOR ) rc_getCompositeChildCount( GETCOMPOSITECHILDCOUNT_ACTOR )
rc_getCompositeChild( GETCOMPOSITECHILD_ACTOR, GETCOMPOSITECHILD_CHILD_INDEX ) rc_getCompositeChild( GETCOMPOSITECHILD_ACTOR, GETCOMPOSITECHILD_CHILD_INDEX )

View File

@@ -27,6 +27,7 @@ sub DrawImage_Rotozoom(slot, x, y, angle, zx, zy)
sub DrawImage_RotozoomEx(slot, x, y, src_x, src_y, src_w, src_h, angle, zx, zy) sub DrawImage_RotozoomEx(slot, x, y, src_x, src_y, src_w, src_h, angle, zx, zy)
sub DrawImage_Flip(slot, x, y, h, v) sub DrawImage_Flip(slot, x, y, h, v)
sub DrawImage_FlipEx(slot, x, y, src_x, src_y, src_w, src_h, h, v) sub DrawImage_FlipEx(slot, x, y, src_x, src_y, src_w, src_h, h, v)
function SaveBMP(img, file$)
sub SetAntiAliasMode( aa_mode ) sub SetAntiAliasMode( aa_mode )
function GetAntiAliasMode( ) function GetAntiAliasMode( )
sub ConvertToNormalMap(img_id, amp) sub ConvertToNormalMap(img_id, amp)

View File

@@ -16,3 +16,4 @@ sub Triangle(x1, y1, x2, y2, x3, y3)
sub Line3D(x1, y1, z1, x2, y2, z2) sub Line3D(x1, y1, z1, x2, y2, z2)
sub Box3D(min_x, min_y, min_z, max_x, max_y, max_z) sub Box3D(min_x, min_y, min_z, max_x, max_y, max_z)
sub Triangle3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) sub Triangle3D(x1, y1, z1, x2, y2, z2, x3, y3, z3)
Sub SetRenderCirclePoints(num_points)

View File

@@ -2,3 +2,9 @@ Sub SetProjectorTarget(actor, x, y, z)
Sub GetProjectorTarget(actor, ByRef x, ByRef y, ByRef z) Sub GetProjectorTarget(actor, ByRef x, ByRef y, ByRef z)
Sub SetProjectorFOV(actor, fov) Sub SetProjectorFOV(actor, fov)
Function GetProjectorFOV(actor) Function GetProjectorFOV(actor)
Sub SetProjectorTexture(actor, img_id)
Function GetProjectorTexture(actor)
Function AddProjectorEffectActor(actor, tgt_actor)
Function GetProjectorEffectActorCount(actor)
Function GetProjectorEffectActor(actor, tgt_index)
Sub RemoveProjectorEffectActor(actor, tgt_index)

View File

@@ -13,3 +13,4 @@ Function GetSpriteCurrentAnimationFrame(sprite)
Function NumSpriteAnimationLoops(sprite) Function NumSpriteAnimationLoops(sprite)
Function SpriteAnimationIsPlaying(sprite) Function SpriteAnimationIsPlaying(sprite)
Sub DeleteSpriteAnimation(sprite, animation) Sub DeleteSpriteAnimation(sprite, animation)
Function GetSpriteAnimationSource(sprite, animation)

View File

@@ -6,3 +6,4 @@ sub DrawText(txt$, x, y)
sub GetTextSize(txt$, byref w, byref h) sub GetTextSize(txt$, byref w, byref h)
function TextWidth(txt$) function TextWidth(txt$)
function TextHeight(txt$) function TextHeight(txt$)
function ActiveFont()

View File

@@ -919,7 +919,7 @@ int main(int argc, char * argv[])
{ {
string line = ""; 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"; string rc_filename = "";// = "tst.bas";

View File

@@ -662,6 +662,8 @@ void init_embedded_functions()
add_embedded_arg("x3", ID_TYPE_NUM); add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM); add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM); add_embedded_arg("z3", ID_TYPE_NUM);
embed_function("SetRenderCirclePoints", ID_TYPE_SUB);
add_embedded_arg("num_points", ID_TYPE_NUM);
embed_function("LoadImage", ID_TYPE_FN_NUM); embed_function("LoadImage", ID_TYPE_FN_NUM);
add_embedded_arg("img$", ID_TYPE_STR); add_embedded_arg("img$", ID_TYPE_STR);
embed_function("LoadImageEx", ID_TYPE_FN_NUM); embed_function("LoadImageEx", ID_TYPE_FN_NUM);
@@ -794,6 +796,9 @@ void init_embedded_functions()
add_embedded_arg("src_h", ID_TYPE_NUM); add_embedded_arg("src_h", ID_TYPE_NUM);
add_embedded_arg("h", ID_TYPE_NUM); add_embedded_arg("h", ID_TYPE_NUM);
add_embedded_arg("v", ID_TYPE_NUM); add_embedded_arg("v", ID_TYPE_NUM);
embed_function("SaveBMP", ID_TYPE_FN_NUM);
add_embedded_arg("img", ID_TYPE_NUM);
add_embedded_arg("file$", ID_TYPE_STR);
embed_function("SetAntiAliasMode", ID_TYPE_SUB); embed_function("SetAntiAliasMode", ID_TYPE_SUB);
add_embedded_arg("aa_mode", ID_TYPE_NUM); add_embedded_arg("aa_mode", ID_TYPE_NUM);
embed_function("GetAntiAliasMode", ID_TYPE_FN_NUM); embed_function("GetAntiAliasMode", ID_TYPE_FN_NUM);
@@ -978,6 +983,7 @@ void init_embedded_functions()
add_embedded_arg("txt$", ID_TYPE_STR); add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("TextHeight", ID_TYPE_FN_NUM); embed_function("TextHeight", ID_TYPE_FN_NUM);
add_embedded_arg("txt$", ID_TYPE_STR); add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("ActiveFont", ID_TYPE_FN_NUM);
embed_function("TouchPressure", ID_TYPE_FN_NUM); embed_function("TouchPressure", ID_TYPE_FN_NUM);
embed_function("GetTouch", ID_TYPE_SUB); embed_function("GetTouch", ID_TYPE_SUB);
add_embedded_arg("status", ID_TYPE_BYREF_NUM); add_embedded_arg("status", ID_TYPE_BYREF_NUM);
@@ -1525,6 +1531,9 @@ void init_embedded_functions()
embed_function("DeleteSpriteAnimation", ID_TYPE_SUB); embed_function("DeleteSpriteAnimation", ID_TYPE_SUB);
add_embedded_arg("sprite", ID_TYPE_NUM); add_embedded_arg("sprite", ID_TYPE_NUM);
add_embedded_arg("animation", ID_TYPE_NUM); add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("GetSpriteAnimationSource", ID_TYPE_FN_NUM);
add_embedded_arg("sprite", ID_TYPE_NUM);
add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("getSpriteCenter", ID_TYPE_SUB); embed_function("getSpriteCenter", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM); add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("x", ID_TYPE_BYREF_NUM); add_embedded_arg("x", ID_TYPE_BYREF_NUM);
@@ -3322,6 +3331,22 @@ void init_embedded_functions()
add_embedded_arg("fov", ID_TYPE_NUM); add_embedded_arg("fov", ID_TYPE_NUM);
embed_function("GetProjectorFOV", ID_TYPE_FN_NUM); embed_function("GetProjectorFOV", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM); add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("SetProjectorTexture", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("img_id", ID_TYPE_NUM);
embed_function("GetProjectorTexture", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("AddProjectorEffectActor", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_actor", ID_TYPE_NUM);
embed_function("GetProjectorEffectActorCount", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("GetProjectorEffectActor", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_index", ID_TYPE_NUM);
embed_function("RemoveProjectorEffectActor", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_index", ID_TYPE_NUM);
embed_function("AddCompositeChild", ID_TYPE_FN_NUM); embed_function("AddCompositeChild", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM); add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("child_actor", ID_TYPE_NUM); add_embedded_arg("child_actor", ID_TYPE_NUM);

Binary file not shown.

View File

@@ -54,7 +54,7 @@
1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_global.h 1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_global.h
<inttypes.h> <inttypes.h>
1771619942 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h 1771626799 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
"identifier.h" "identifier.h"
1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_vm_asm.h 1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_vm_asm.h

View File

@@ -656,6 +656,8 @@ add_embedded_arg("z2", ID_TYPE_NUM);
add_embedded_arg("x3", ID_TYPE_NUM); add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM); add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM); add_embedded_arg("z3", ID_TYPE_NUM);
embed_function("SetRenderCirclePoints", ID_TYPE_SUB);
add_embedded_arg("num_points", ID_TYPE_NUM);
embed_function("LoadImage", ID_TYPE_FN_NUM); embed_function("LoadImage", ID_TYPE_FN_NUM);
add_embedded_arg("img$", ID_TYPE_STR); add_embedded_arg("img$", ID_TYPE_STR);
embed_function("LoadImageEx", ID_TYPE_FN_NUM); embed_function("LoadImageEx", ID_TYPE_FN_NUM);
@@ -788,6 +790,9 @@ add_embedded_arg("src_w", ID_TYPE_NUM);
add_embedded_arg("src_h", ID_TYPE_NUM); add_embedded_arg("src_h", ID_TYPE_NUM);
add_embedded_arg("h", ID_TYPE_NUM); add_embedded_arg("h", ID_TYPE_NUM);
add_embedded_arg("v", ID_TYPE_NUM); add_embedded_arg("v", ID_TYPE_NUM);
embed_function("SaveBMP", ID_TYPE_FN_NUM);
add_embedded_arg("img", ID_TYPE_NUM);
add_embedded_arg("file$", ID_TYPE_STR);
embed_function("SetAntiAliasMode", ID_TYPE_SUB); embed_function("SetAntiAliasMode", ID_TYPE_SUB);
add_embedded_arg("aa_mode", ID_TYPE_NUM); add_embedded_arg("aa_mode", ID_TYPE_NUM);
embed_function("GetAntiAliasMode", ID_TYPE_FN_NUM); embed_function("GetAntiAliasMode", ID_TYPE_FN_NUM);
@@ -972,6 +977,7 @@ embed_function("TextWidth", ID_TYPE_FN_NUM);
add_embedded_arg("txt$", ID_TYPE_STR); add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("TextHeight", ID_TYPE_FN_NUM); embed_function("TextHeight", ID_TYPE_FN_NUM);
add_embedded_arg("txt$", ID_TYPE_STR); add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("ActiveFont", ID_TYPE_FN_NUM);
embed_function("TouchPressure", ID_TYPE_FN_NUM); embed_function("TouchPressure", ID_TYPE_FN_NUM);
embed_function("GetTouch", ID_TYPE_SUB); embed_function("GetTouch", ID_TYPE_SUB);
add_embedded_arg("status", ID_TYPE_BYREF_NUM); add_embedded_arg("status", ID_TYPE_BYREF_NUM);
@@ -1519,6 +1525,9 @@ add_embedded_arg("sprite", ID_TYPE_NUM);
embed_function("DeleteSpriteAnimation", ID_TYPE_SUB); embed_function("DeleteSpriteAnimation", ID_TYPE_SUB);
add_embedded_arg("sprite", ID_TYPE_NUM); add_embedded_arg("sprite", ID_TYPE_NUM);
add_embedded_arg("animation", ID_TYPE_NUM); add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("GetSpriteAnimationSource", ID_TYPE_FN_NUM);
add_embedded_arg("sprite", ID_TYPE_NUM);
add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("getSpriteCenter", ID_TYPE_SUB); embed_function("getSpriteCenter", ID_TYPE_SUB);
add_embedded_arg("spr_id", ID_TYPE_NUM); add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("x", ID_TYPE_BYREF_NUM); add_embedded_arg("x", ID_TYPE_BYREF_NUM);
@@ -3316,6 +3325,22 @@ add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("fov", ID_TYPE_NUM); add_embedded_arg("fov", ID_TYPE_NUM);
embed_function("GetProjectorFOV", ID_TYPE_FN_NUM); embed_function("GetProjectorFOV", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM); add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("SetProjectorTexture", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("img_id", ID_TYPE_NUM);
embed_function("GetProjectorTexture", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("AddProjectorEffectActor", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_actor", ID_TYPE_NUM);
embed_function("GetProjectorEffectActorCount", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("GetProjectorEffectActor", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_index", ID_TYPE_NUM);
embed_function("RemoveProjectorEffectActor", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("tgt_index", ID_TYPE_NUM);
embed_function("AddCompositeChild", ID_TYPE_FN_NUM); embed_function("AddCompositeChild", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM); add_embedded_arg("actor", ID_TYPE_NUM);
add_embedded_arg("child_actor", ID_TYPE_NUM); add_embedded_arg("child_actor", ID_TYPE_NUM);

File diff suppressed because it is too large Load Diff

View File

@@ -730,6 +730,9 @@ case FN_Box3D: //Sub Procedure
case FN_Triangle3D: //Sub Procedure case FN_Triangle3D: //Sub Procedure
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 ); rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break; break;
case FN_SetRenderCirclePoints: //Sub Procedure
rc_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS );
break;
case FN_LoadImage: //Number Function case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ )); rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break; break;
@@ -817,6 +820,9 @@ case FN_DrawImage_Flip: //Sub Procedure
case FN_DrawImage_FlipEx: //Sub Procedure case FN_DrawImage_FlipEx: //Sub Procedure
rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V ); rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V );
break; break;
case FN_SaveBMP: //Number Function
rc_push_num(rc_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ ));
break;
case FN_SetAntiAliasMode: //Sub Procedure case FN_SetAntiAliasMode: //Sub Procedure
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE ); rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE );
break; break;
@@ -1063,6 +1069,9 @@ case FN_TextWidth: //Number Function
case FN_TextHeight: //Number Function case FN_TextHeight: //Number Function
rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ )); rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ ));
break; break;
case FN_ActiveFont: //Number Function
rc_push_num(rc_activeFont( ));
break;
case FN_TouchPressure: //Number Function case FN_TouchPressure: //Number Function
rc_push_num(rc_touchPressure( )); rc_push_num(rc_touchPressure( ));
break; break;
@@ -1625,6 +1634,9 @@ case FN_SpriteAnimationIsPlaying: //Number Function
case FN_DeleteSpriteAnimation: //Sub Procedure case FN_DeleteSpriteAnimation: //Sub Procedure
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION ); rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION );
break; break;
case FN_GetSpriteAnimationSource: //Number Function
rc_push_num(rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION ));
break;
case FN_getSpriteCenter: //Sub Procedure case FN_getSpriteCenter: //Sub Procedure
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y ); rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y );
break; break;
@@ -3185,6 +3197,24 @@ case FN_SetProjectorFOV: //Sub Procedure
case FN_GetProjectorFOV: //Number Function case FN_GetProjectorFOV: //Number Function
rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR )); rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR ));
break; break;
case FN_SetProjectorTexture: //Sub Procedure
rc_setProjectorTexture( SETPROJECTORTEXTURE_ACTOR, SETPROJECTORTEXTURE_IMG_ID );
break;
case FN_GetProjectorTexture: //Number Function
rc_push_num(rc_getProjectorTexture( GETPROJECTORTEXTURE_ACTOR ));
break;
case FN_AddProjectorEffectActor: //Number Function
rc_push_num(rc_addProjectorEffectActor( ADDPROJECTOREFFECTACTOR_ACTOR, ADDPROJECTOREFFECTACTOR_TGT_ACTOR ));
break;
case FN_GetProjectorEffectActorCount: //Number Function
rc_push_num(rc_getProjectorEffectActorCount( GETPROJECTOREFFECTACTORCOUNT_ACTOR ));
break;
case FN_GetProjectorEffectActor: //Number Function
rc_push_num(rc_getProjectorEffectActor( GETPROJECTOREFFECTACTOR_ACTOR, GETPROJECTOREFFECTACTOR_TGT_INDEX ));
break;
case FN_RemoveProjectorEffectActor: //Sub Procedure
rc_removeProjectorEffectActor( REMOVEPROJECTOREFFECTACTOR_ACTOR, REMOVEPROJECTOREFFECTACTOR_TGT_INDEX );
break;
case FN_AddCompositeChild: //Number Function case FN_AddCompositeChild: //Number Function
rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX )); rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX ));
break; break;

View File

@@ -148,7 +148,9 @@ void CProjectiveTextures::render()
ViewArea.getTransform(irr::video::ETS_VIEW).buildCameraLookAtMatrixLH(pos,Target,up); ViewArea.getTransform(irr::video::ETS_VIEW).buildCameraLookAtMatrixLH(pos,Target,up);
recalculateViewArea(); recalculateViewArea();
irr::scene::IMesh* mesh = NULL;
for(irr::u32 i=0; i<nodeArray.size(); ++i) for(irr::u32 i=0; i<nodeArray.size(); ++i)
{ {
@@ -159,8 +161,46 @@ void CProjectiveTextures::render()
pVideo->setTransform(irr::video::ETS_WORLD,nodeArray[i]->getAbsoluteTransformation()); pVideo->setTransform(irr::video::ETS_WORLD,nodeArray[i]->getAbsoluteTransformation());
pVideo->setMaterial(projMat); pVideo->setMaterial(projMat);
for(irr::u32 j=0; j<nodeArray[i]->getMaterialCount(); ++j) mesh = NULL;
pVideo->drawMeshBuffer(nodeArray[i]->getMesh()->getMeshBuffer(j));
switch(nodeArray[i]->getType())
{
case irr::scene::ESNT_CUBE:
case irr::scene::ESNT_SPHERE:
case irr::scene::ESNT_MESH:
{
irr::scene::IMeshSceneNode* m_node = (irr::scene::IMeshSceneNode*)nodeArray[i];
mesh = m_node->getMesh();
}
break;
case irr::scene::ESNT_OCTREE:
{
irr::scene::IOctreeSceneNode* m_node = (irr::scene::IOctreeSceneNode*)nodeArray[i];
mesh = m_node->getMesh();
}
break;
case irr::scene::ESNT_ANIMATED_MESH:
{
irr::scene::IAnimatedMeshSceneNode* m_node = (irr::scene::IAnimatedMeshSceneNode*)nodeArray[i];
mesh = m_node->getMesh();
}
break;
case irr::scene::ESNT_TERRAIN:
{
irr::scene::ITerrainSceneNode* m_node = (irr::scene::ITerrainSceneNode*)nodeArray[i];
mesh = m_node->getMesh();
}
break;
}
if(mesh)
{
for(irr::u32 j=0; j<nodeArray[i]->getMaterialCount(); ++j)
pVideo->drawMeshBuffer(mesh->getMeshBuffer(j));
}
} }
} }

View File

@@ -37,7 +37,7 @@ public:
virtual void OnSetConstants(irr::video::IMaterialRendererServices* services, irr::s32 userData); virtual void OnSetConstants(irr::video::IMaterialRendererServices* services, irr::s32 userData);
irr::video::ITexture* texture; irr::video::ITexture* texture;
irr::core::array<irr::scene::IMeshSceneNode*> nodeArray; irr::core::array<irr::scene::ISceneNode*> nodeArray;
private: private:

View File

@@ -4318,6 +4318,7 @@ void rcbasic_init()
void rcbasic_clean() void rcbasic_clean()
{ {
rc_clearScene();
rc_audio_quit(); rc_audio_quit();
rc_net_quit(); rc_net_quit();
rc_gfx_quit(); rc_gfx_quit();
@@ -4453,7 +4454,7 @@ int main(int argc, char * argv[])
//ogles2 test //ogles2 test
#ifdef RC_TESTING #ifdef RC_TESTING
rc_intern_dirChange("/home/n00b/Music/test_v48_1/test_v48"); rc_intern_dirChange("/home/n00b/Music/test_v48_1/test_v48_2");
//rc_intern_dirChange(""); //rc_intern_dirChange("");
rc_filename = "main.cbc"; rc_filename = "main.cbc";

View File

@@ -406,8 +406,8 @@ void rc_setActorSolid(int actor_id, bool flag)
if(rc_actor[wheel_id].physics.rigid_body) if(rc_actor[wheel_id].physics.rigid_body)
{ {
rc_actor[wheel_id].physics.isSolid = flag; //rc_actor[wheel_id].physics.isSolid = flag;
rc_setActorCollisionShape(wheel_id, rc_actor[wheel_id].physics.shape_type, rc_actor[wheel_id].physics.mass); //rc_setActorCollisionShape(wheel_id, rc_actor[wheel_id].physics.shape_type, rc_actor[wheel_id].physics.mass);
} }
} }
} }
@@ -635,6 +635,7 @@ int rc_createAnimatedActor(int mesh_id)
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -695,6 +696,7 @@ int rc_createCompositeActor()
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_COMPOSITE, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_COMPOSITE, 1);
@@ -738,6 +740,7 @@ int rc_createVehicleActor(int chassis_actor)
//Create RayCast Vehicle //Create RayCast Vehicle
actor.vehicle_properties.vehicle = rc_physics3D.world->addRaycastVehicle(rc_actor[chassis_actor].physics.rigid_body); actor.vehicle_properties.vehicle = rc_physics3D.world->addRaycastVehicle(rc_actor[chassis_actor].physics.rigid_body);
actor.vehicle_properties.vehicle->getVehicleRaycaster()->setUseFilter(false);
actor.vehicle_properties.chassis_actor_id = chassis_actor; actor.vehicle_properties.chassis_actor_id = chassis_actor;
@@ -775,10 +778,11 @@ int rc_createVehicleActor(int chassis_actor)
rc_actor[actor_id].physics.collisions.clear(); rc_actor[actor_id].physics.collisions.clear();
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_vehicle_actors.push_back(actor_id); rc_vehicle_actors.push_back(actor_id);
setSolidProperties(actor_id); //setSolidProperties(actor_id);
return actor_id; return actor_id;
} }
@@ -840,6 +844,7 @@ int rc_createOctreeActor(int mesh_id)
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -895,6 +900,7 @@ int rc_createTerrainActor( std::string height_map )
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0);
@@ -950,6 +956,7 @@ int rc_createParticleActor( int particle_type )
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0);
@@ -1004,6 +1011,7 @@ int rc_createCubeActor(double cube_size)
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -1057,6 +1065,7 @@ int rc_createSphereActor(double radius)
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_SPHERE, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_SPHERE, 1);
@@ -1118,6 +1127,7 @@ int rc_createWaterActor(int mesh_id, double waveHeight, double waveSpeed, double
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -1170,6 +1180,7 @@ int rc_createBillboardActor()
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -1222,6 +1233,7 @@ int rc_createLightActor()
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -1274,6 +1286,10 @@ int rc_createProjectorActor()
rc_actor[actor_id].physics.impact_mesh_id = -1; rc_actor[actor_id].physics.impact_mesh_id = -1;
rc_actor[actor_id].parent_id = -1; rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_actor[actor_id].projector_properties.project_texture_id = -1;
rc_actor[actor_id].projector_properties.effect_actors.clear();
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1);
@@ -1282,6 +1298,26 @@ int rc_createProjectorActor()
return actor_id; return actor_id;
} }
void removeProjectorParent(int projector_actor, int tgt_actor)
{
if(projector_actor < 0 || projector_actor >= rc_actor.size())
return;
if(tgt_actor < 0 || tgt_actor >= rc_actor.size())
return;
for(int i = 0; i < rc_actor[tgt_actor].projector_parent.size(); i++)
{
if(rc_actor[tgt_actor].projector_parent[i] == projector_actor)
{
rc_actor[tgt_actor].projector_parent.erase(i);
break;
}
}
}
//delete actor //delete actor
void rc_deleteActor(int actor_id) void rc_deleteActor(int actor_id)
{ {
@@ -1291,6 +1327,10 @@ void rc_deleteActor(int actor_id)
if(!rc_actor[actor_id].mesh_node) if(!rc_actor[actor_id].mesh_node)
return; return;
// This is to prevent deleting wheels attached to vehicles
if(rc_actor[actor_id].isWheel && rc_actor[actor_id].parent_id >= 0)
return;
if(rc_actor[actor_id].node_type == RC_NODE_TYPE_PROJECTOR) if(rc_actor[actor_id].node_type == RC_NODE_TYPE_PROJECTOR)
{ {
for(int i = 0; i < rc_projector_actors.size(); i++) for(int i = 0; i < rc_projector_actors.size(); i++)
@@ -1301,6 +1341,43 @@ void rc_deleteActor(int actor_id)
break; break;
} }
} }
for(int i = 0; i < rc_actor[actor_id].projector_properties.effect_actors.size(); i++)
{
int tgt_id = rc_actor[actor_id].projector_properties.effect_actors[i];
removeProjectorParent(actor_id, tgt_id);
}
}
//Remove actor from any projectors it may be added to
for(int i = 0; i < rc_actor[actor_id].projector_parent.size(); i++)
{
int parent_id = rc_actor[actor_id].projector_parent[i];
if(parent_id < 0 || parent_id >= rc_actor.size())
continue;
for(int e_index = 0; e_index < rc_actor[parent_id].projector_properties.effect_actors.size(); e_index++)
{
if(rc_actor[parent_id].projector_properties.effect_actors[e_index] == actor_id)
{
rc_actor[parent_id].projector_properties.effect_actors.erase(e_index);
break;
}
}
if(rc_actor[parent_id].mesh_node)
{
CProjectiveTextures* parent_node = (CProjectiveTextures*)rc_actor[parent_id].mesh_node;
for(int node_index = 0; node_index < parent_node->nodeArray.size(); node_index++)
{
if(parent_node->nodeArray[node_index] == rc_actor[actor_id].mesh_node)
{
parent_node->nodeArray.erase(node_index);
break;
}
}
}
} }
@@ -1320,7 +1397,7 @@ void rc_deleteActor(int actor_id)
rc_actor[actor_id].child_actors.clear(); rc_actor[actor_id].child_actors.clear();
if(rc_actor[actor_id].physics.rigid_body) if(rc_actor[actor_id].physics.rigid_body && rc_actor[actor_id].node_type != RC_NODE_TYPE_VEHICLE)
{ {
rc_physics3D.world->removeCollisionObject(rc_actor[actor_id].physics.rigid_body, false); rc_physics3D.world->removeCollisionObject(rc_actor[actor_id].physics.rigid_body, false);
delete rc_actor[actor_id].physics.rigid_body; delete rc_actor[actor_id].physics.rigid_body;
@@ -1328,10 +1405,23 @@ void rc_deleteActor(int actor_id)
if(rc_actor[actor_id].node_type == RC_NODE_TYPE_VEHICLE) if(rc_actor[actor_id].node_type == RC_NODE_TYPE_VEHICLE)
{ {
for(int i = 0; i < rc_actor[actor_id].vehicle_properties.wheels.size(); i++)
{
int wheel_actor = rc_actor[actor_id].vehicle_properties.wheels[i].actor_id;
if(wheel_actor < 0 || wheel_actor >= rc_actor.size())
continue;
rc_actor[wheel_actor].parent_id = -1;
rc_deleteActor(wheel_actor); //This should never happen but you can never be too careful with pointers
}
rc_deleteActor(rc_actor[actor_id].vehicle_properties.chassis_actor_id);
if(rc_actor[actor_id].vehicle_properties.vehicle) if(rc_actor[actor_id].vehicle_properties.vehicle)
{ {
rc_physics3D.world->removeRaycastVehicle(rc_actor[actor_id].vehicle_properties.vehicle); rc_physics3D.world->removeRaycastVehicle(rc_actor[actor_id].vehicle_properties.vehicle);
delete rc_actor[actor_id].vehicle_properties.vehicle;
} }
for(int i = 0; i < rc_vehicle_actors.size(); i++) for(int i = 0; i < rc_vehicle_actors.size(); i++)
@@ -1344,6 +1434,10 @@ void rc_deleteActor(int actor_id)
} }
} }
rc_actor[actor_id].projector_parent.clear();
rc_actor[actor_id].projector_properties.effect_actors.clear();
rc_actor[actor_id].projector_properties.project_texture_id = -1;
rc_actor[actor_id].physics.rigid_body = NULL; rc_actor[actor_id].physics.rigid_body = NULL;
rc_actor[actor_id].vehicle_properties.vehicle = NULL; rc_actor[actor_id].vehicle_properties.vehicle = NULL;
rc_actor[actor_id].vehicle_properties.wheels.clear(); rc_actor[actor_id].vehicle_properties.wheels.clear();
@@ -1351,7 +1445,10 @@ void rc_deleteActor(int actor_id)
rc_actor[actor_id].physics.collisions.clear(); rc_actor[actor_id].physics.collisions.clear();
rc_actor[actor_id].mesh_node->remove(); // Vehicles use the same mesh_node as there chassis which is deleted above
if(rc_actor[actor_id].node_type != RC_NODE_TYPE_VEHICLE)
rc_actor[actor_id].mesh_node->remove();
rc_actor[actor_id].mesh_node = NULL; rc_actor[actor_id].mesh_node = NULL;
rc_actor[actor_id].shadow = NULL; rc_actor[actor_id].shadow = NULL;
rc_actor[actor_id].node_type = 0; rc_actor[actor_id].node_type = 0;
@@ -2801,6 +2898,197 @@ double rc_getProjectorFOV(int actor)
} }
void rc_setProjectorTexture(int actor, int img_id)
{
if(actor < 0 || actor >= rc_actor.size())
return;
if(img_id < 0 || img_id >= rc_image.size())
return;
if(!rc_image[img_id].image)
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
projector->texture = rc_image[img_id].image;
rc_actor[actor].projector_properties.project_texture_id = img_id;
break;
}
}
int rc_getProjectorTexture(int actor)
{
if(actor < 0 || actor >= rc_actor.size())
return -1;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
return rc_actor[actor].projector_properties.project_texture_id;
}
return -1;
}
int rc_addProjectorEffectActor(int actor, int tgt_actor)
{
if(actor < 0 || actor >= rc_actor.size())
return -1;
if(tgt_actor < 0 || tgt_actor >= rc_actor.size())
return -1;
if(rc_actor[actor].mesh_node == NULL || rc_actor[tgt_actor].mesh_node == NULL)
return -1;
int n_index = -1;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
{
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
bool na_found = false;
for(int i = 0; i < projector->nodeArray.size(); i++)
{
if(projector->nodeArray[i] == rc_actor[tgt_actor].mesh_node)
{
na_found = true;
break;
}
}
if(!na_found)
{
n_index = projector->nodeArray.size();
projector->nodeArray.push_back(rc_actor[tgt_actor].mesh_node);
removeProjectorParent(actor, tgt_actor);
rc_actor[tgt_actor].projector_parent.push_back(actor);
bool id_found = false;
for(int i = 0; i < rc_actor[actor].projector_properties.effect_actors.size(); i++)
{
if(rc_actor[actor].projector_properties.effect_actors[i] == tgt_actor)
{
id_found = true;
break;
}
}
if(!id_found)
{
rc_actor[actor].projector_properties.effect_actors.push_back(tgt_actor);
}
}
}
break;
}
return n_index;
}
int rc_getProjectorEffectActorCount(int actor)
{
if(actor < 0 || actor >= rc_actor.size())
return 0;
if(rc_actor[actor].mesh_node == NULL)
return 0;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
return projector->nodeArray.size();
}
return 0;
}
int rc_getProjectorEffectActor(int actor, int tgt_index)
{
if(actor < 0 || actor >= rc_actor.size())
return -1;
if(rc_actor[actor].mesh_node == NULL)
return -1;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
if(tgt_index < 0 || tgt_index >= projector->nodeArray.size())
{
return -1;
}
else
{
for(int i = 0; i < rc_actor[actor].projector_properties.effect_actors.size(); i++)
{
int tgt_id = rc_actor[actor].projector_properties.effect_actors[i];
if(tgt_id < 0 || tgt_id >= rc_actor.size())
continue;
if(rc_actor[tgt_id].mesh_node == projector->nodeArray[tgt_index])
return tgt_id;
}
}
break;
}
return -1;
}
void rc_removeProjectorEffectActor(int actor, int tgt_index)
{
if(actor < 0 || actor >= rc_actor.size())
return;
if(rc_actor[actor].mesh_node == NULL)
return;
switch(rc_actor[actor].node_type)
{
case RC_NODE_TYPE_PROJECTOR:
CProjectiveTextures* projector = (CProjectiveTextures*) rc_actor[actor].mesh_node;
if(tgt_index >= 0 && tgt_index < projector->nodeArray.size())
{
for(int i = 0; i < rc_actor[actor].projector_properties.effect_actors.size(); i++)
{
int tgt_id = rc_actor[actor].projector_properties.effect_actors[i];
if(tgt_id < 0 || tgt_id >= rc_actor.size())
continue;
if(rc_actor[tgt_id].mesh_node == projector->nodeArray[tgt_index])
{
removeProjectorParent(actor, tgt_id);
rc_actor[actor].projector_properties.effect_actors.erase(i);
break;
}
}
projector->nodeArray.erase(tgt_index);
}
break;
}
}
//-----------------VEHICLE ACTOR------------------------------ //-----------------VEHICLE ACTOR------------------------------
@@ -2827,15 +3115,17 @@ int rc_addVehicleWheel( int actor, int wheel_actor, bool is_front_wheel )
int wheel_index = rc_actor[actor].vehicle_properties.wheels.size(); int wheel_index = rc_actor[actor].vehicle_properties.wheels.size();
rc_vehicle_wheel wheel_obj; rc_vehicle_wheel wheel_obj;
rc_physics3D.world->removeCollisionObject(rc_actor[wheel_actor].physics.rigid_body); rc_physics3D.world->removeCollisionObject(rc_actor[wheel_actor].physics.rigid_body, false);
wheel_obj.actor_id = wheel_actor; wheel_obj.actor_id = wheel_actor;
wheel_obj.offset_transform = -1; wheel_obj.offset_transform.makeIdentity();
rc_actor[actor].vehicle_properties.wheels.push_back(wheel_obj); rc_actor[actor].vehicle_properties.wheels.push_back(wheel_obj);
SWheelInfo& info = rc_actor[actor].vehicle_properties.vehicle->addWheel(wheel_info); SWheelInfo& info = rc_actor[actor].vehicle_properties.vehicle->addWheel(wheel_info);
rc_actor[wheel_actor].physics.rigid_body->setWorldTransform(info.worldTransform); rc_actor[wheel_actor].physics.rigid_body->setWorldTransform(info.worldTransform);
rc_actor[wheel_actor].isWheel = true;
rc_actor[wheel_actor].parent_id = actor;
irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform();
rc_actor[actor].physics.rigid_body->clearForces(); rc_actor[actor].physics.rigid_body->clearForces();
@@ -2904,11 +3194,16 @@ void rc_setWheelConnectionPoint( int actor, int wheel_index, double x, double y,
if(wheel_index < 0 || wheel_index >= rc_actor[actor].vehicle_properties.wheels.size()) if(wheel_index < 0 || wheel_index >= rc_actor[actor].vehicle_properties.wheels.size())
return; return;
//std::cout << "setWheelConnectionPoint: " << wheel_index << std::endl;
SWheelInfo &info = rc_actor[actor].vehicle_properties.vehicle->getWheelInfo(wheel_index); SWheelInfo &info = rc_actor[actor].vehicle_properties.vehicle->getWheelInfo(wheel_index);
info.chassisConnectionPointCS.set((float)x, (float)y, (float)z); info.chassisConnectionPointCS.set((float)x, (float)y, (float)z);
rc_actor[actor].vehicle_properties.vehicle->updateWheelInfo(wheel_index); rc_actor[actor].vehicle_properties.vehicle->updateWheelInfo(wheel_index);
//info = rc_actor[actor].vehicle_properties.vehicle->getWheelInfo(wheel_index);
//std::cout << "setWheelConnectionPoint OUT: " << info.chassisConnectionPointCS.X << ", " << info.chassisConnectionPointCS.Y << ", " << info.chassisConnectionPointCS.Z << std::endl;
} }
void rc_setWheelDirection( int actor, int wheel_index, double x, double y, double z ) void rc_setWheelDirection( int actor, int wheel_index, double x, double y, double z )

File diff suppressed because it is too large Load Diff

View File

@@ -730,6 +730,9 @@ case FN_Box3D: //Sub Procedure
case FN_Triangle3D: //Sub Procedure case FN_Triangle3D: //Sub Procedure
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 ); rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break; break;
case FN_SetRenderCirclePoints: //Sub Procedure
rc_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS );
break;
case FN_LoadImage: //Number Function case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ )); rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break; break;
@@ -817,6 +820,9 @@ case FN_DrawImage_Flip: //Sub Procedure
case FN_DrawImage_FlipEx: //Sub Procedure case FN_DrawImage_FlipEx: //Sub Procedure
rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V ); rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V );
break; break;
case FN_SaveBMP: //Number Function
rc_push_num(rc_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ ));
break;
case FN_SetAntiAliasMode: //Sub Procedure case FN_SetAntiAliasMode: //Sub Procedure
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE ); rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE );
break; break;
@@ -1063,6 +1069,9 @@ case FN_TextWidth: //Number Function
case FN_TextHeight: //Number Function case FN_TextHeight: //Number Function
rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ )); rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ ));
break; break;
case FN_ActiveFont: //Number Function
rc_push_num(rc_activeFont( ));
break;
case FN_TouchPressure: //Number Function case FN_TouchPressure: //Number Function
rc_push_num(rc_touchPressure( )); rc_push_num(rc_touchPressure( ));
break; break;
@@ -1625,6 +1634,9 @@ case FN_SpriteAnimationIsPlaying: //Number Function
case FN_DeleteSpriteAnimation: //Sub Procedure case FN_DeleteSpriteAnimation: //Sub Procedure
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION ); rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION );
break; break;
case FN_GetSpriteAnimationSource: //Number Function
rc_push_num(rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION ));
break;
case FN_getSpriteCenter: //Sub Procedure case FN_getSpriteCenter: //Sub Procedure
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y ); rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y );
break; break;
@@ -3185,6 +3197,24 @@ case FN_SetProjectorFOV: //Sub Procedure
case FN_GetProjectorFOV: //Number Function case FN_GetProjectorFOV: //Number Function
rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR )); rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR ));
break; break;
case FN_SetProjectorTexture: //Sub Procedure
rc_setProjectorTexture( SETPROJECTORTEXTURE_ACTOR, SETPROJECTORTEXTURE_IMG_ID );
break;
case FN_GetProjectorTexture: //Number Function
rc_push_num(rc_getProjectorTexture( GETPROJECTORTEXTURE_ACTOR ));
break;
case FN_AddProjectorEffectActor: //Number Function
rc_push_num(rc_addProjectorEffectActor( ADDPROJECTOREFFECTACTOR_ACTOR, ADDPROJECTOREFFECTACTOR_TGT_ACTOR ));
break;
case FN_GetProjectorEffectActorCount: //Number Function
rc_push_num(rc_getProjectorEffectActorCount( GETPROJECTOREFFECTACTORCOUNT_ACTOR ));
break;
case FN_GetProjectorEffectActor: //Number Function
rc_push_num(rc_getProjectorEffectActor( GETPROJECTOREFFECTACTOR_ACTOR, GETPROJECTOREFFECTACTOR_TGT_INDEX ));
break;
case FN_RemoveProjectorEffectActor: //Sub Procedure
rc_removeProjectorEffectActor( REMOVEPROJECTOREFFECTACTOR_ACTOR, REMOVEPROJECTOREFFECTACTOR_TGT_INDEX );
break;
case FN_AddCompositeChild: //Number Function case FN_AddCompositeChild: //Number Function
rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX )); rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX ));
break; break;

View File

@@ -1907,6 +1907,13 @@ double radians(double degree)
return (degree * (pi / 180)); return (degree * (pi / 180));
} }
void rc_setRenderCirclePoints(int num_points)
{
if(num_points >= 3)
rc_num_circle_points = num_points;
}
void makeEllipse(irr::core::array<irr::video::S3DVertex>& vertices, irr::core::array<irr::u16>& indices, const CircleSettings& settings) void makeEllipse(irr::core::array<irr::video::S3DVertex>& vertices, irr::core::array<irr::u16>& indices, const CircleSettings& settings)
{ {
const f64 stepSize = 360.0 / (f64)(settings.numVertices-1); // degree angles between vertex points on circle const f64 stepSize = 360.0 / (f64)(settings.numVertices-1); // degree angles between vertex points on circle
@@ -1941,7 +1948,7 @@ void rc_drawEllipse(int x, int y, int rx, int ry)
circle.radius = ry; circle.radius = ry;
circle.radius2 = rx; circle.radius2 = rx;
circle.color = rc_active_color; circle.color = rc_active_color;
circle.numVertices = 21; circle.numVertices = rc_num_circle_points;
makeEllipse(verticesCircle, indicesCircle, circle); makeEllipse(verticesCircle, indicesCircle, circle);
for(int i = 2; i < verticesCircle.size(); i++) for(int i = 2; i < verticesCircle.size(); i++)
@@ -1967,7 +1974,7 @@ void rc_drawEllipseFill(int x, int y, int rx, int ry)
circle.radius = ry; circle.radius = ry;
circle.radius2 = rx; circle.radius2 = rx;
circle.color = rc_active_color; circle.color = rc_active_color;
circle.numVertices = 21; circle.numVertices = rc_num_circle_points;
makeEllipse(verticesCircle, indicesCircle, circle); makeEllipse(verticesCircle, indicesCircle, circle);
VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(), VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(),
@@ -1984,21 +1991,6 @@ void rc_drawCircleFill(int x, int y, double r)
{ {
rc_drawEllipseFill(x, y, r, r); rc_drawEllipseFill(x, y, r, r);
return; return;
irr::core::vector2d<s32> r_pos(x,y);
// create the circle
irr::core::array<irr::video::S3DVertex> verticesCircle;
irr::core::array<irr::u16> indicesCircle;
CircleSettings circle;
circle.center = r_pos;
circle.radius = r;
circle.color = rc_active_color;
makeCircle(verticesCircle, indicesCircle, circle);
VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(),
indicesCircle.pointer(), indicesCircle.size()-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN,
video::EIT_16BIT);
} }
#ifdef RC_ANDROID #ifdef RC_ANDROID
@@ -2154,6 +2146,11 @@ void rc_setFont(int font_id)
rc_active_font = font_id; rc_active_font = font_id;
} }
int rc_activeFont()
{
return rc_active_font;
}
void rc_drawText(std::string txt, int x, int y) void rc_drawText(std::string txt, int x, int y)
{ {
if(rc_fontExists(rc_active_font)) if(rc_fontExists(rc_active_font))

View File

@@ -419,6 +419,8 @@ bool manual_render_control = false;
irr::video::SColor rc_active_color(0,0,0,0); irr::video::SColor rc_active_color(0,0,0,0);
irr::video::SColor rc_clear_color(0,0,0,0); irr::video::SColor rc_clear_color(0,0,0,0);
int rc_num_circle_points = 60;
bool rc_init_events = false; bool rc_init_events = false;
bool rc_init_timer = false; bool rc_init_timer = false;
bool rc_init_video = false; bool rc_init_video = false;
@@ -640,6 +642,12 @@ struct rc_vehicle_properties
irr::core::array<rc_vehicle_wheel> wheels; irr::core::array<rc_vehicle_wheel> wheels;
}; };
struct rc_projector_properties
{
int project_texture_id;
irr::core::array<int> effect_actors;
};
struct rc_scene_node struct rc_scene_node
{ {
int node_type = 0; int node_type = 0;
@@ -666,9 +674,14 @@ struct rc_scene_node
irr::core::array<rc_actor_animation_obj> animation; irr::core::array<rc_actor_animation_obj> animation;
int parent_id; int parent_id;
int parent_vehicle;
bool isWheel;
irr::core::array<rc_composite_child> child_actors; // Only used for composite actor types irr::core::array<rc_composite_child> child_actors; // Only used for composite actor types
rc_vehicle_properties vehicle_properties; rc_vehicle_properties vehicle_properties;
rc_projector_properties projector_properties;
irr::core::array<int> projector_parent;
}; };
irr::core::array<rc_scene_node> rc_actor; irr::core::array<rc_scene_node> rc_actor;
@@ -1125,6 +1138,24 @@ SDL_Surface* convertTextureToSurface(irr::video::ITexture* itexture)
return surface; return surface;
} }
bool rc_saveBMP(int img_id, std::string img_file)
{
if(img_id < 0 || img_id >= rc_image.size())
return false;
if(rc_image[img_id].image)
{
irr::video::ITexture* img_texture = rc_image[img_id].image;
SDL_Surface* surface = convertTextureToSurface(img_texture);
SDL_SaveBMP(surface, img_file.c_str());
return true;
}
return false;
}
std::string rc_getGPUInfo() std::string rc_getGPUInfo()
{ {

View File

@@ -2,7 +2,7 @@
#define RC_OS_DEFINES_H_INCLUDED #define RC_OS_DEFINES_H_INCLUDED
//USED FOR TESTING ONLY //USED FOR TESTING ONLY
#define RC_TESTING //#define RC_TESTING
//I am checking Android first since I think it also defines __linux__ //I am checking Android first since I think it also defines __linux__

View File

@@ -178,6 +178,20 @@ int rc_getSpriteAnimationLength(int spr_id, int animation)
return rc_sprite[spr_id].animation[animation].num_frames; return rc_sprite[spr_id].animation[animation].num_frames;
} }
int rc_getSpriteAnimationSource(int spr_id, int animation)
{
if(spr_id < 0 || spr_id >= rc_sprite.size())
return -1;
if(!rc_sprite[spr_id].active)
return -1;
if(animation < 0 || animation >= rc_sprite[spr_id].animation.size())
return -1;
return rc_sprite[spr_id].animation[animation].src_image_id;
}
void rc_setSpriteAnimationSpeed(int spr_id, int animation, double fps) void rc_setSpriteAnimationSpeed(int spr_id, int animation, double fps)
{ {
if(spr_id < 0 || spr_id >= rc_sprite.size()) if(spr_id < 0 || spr_id >= rc_sprite.size())

View File

@@ -541,8 +541,17 @@ bool rc_update()
{ {
int vehicle_actor = rc_vehicle_actors[i]; int vehicle_actor = rc_vehicle_actors[i];
//irr::core::matrix4 mt =rc_actor[vehicle_actor].physics.rigid_body->getWorldTransform();
//btVector3 v_from( mt.getTranslation().X, mt.getTranslation().Y, mt.getTranslation().Y );
//btVector3 v_to( v_from.getX(), v_from.getY() + 30, v_from.getZ());
//btVehicleRaycaster::btVehicleRaycasterResult rst;
//rc_actor[vehicle_actor].vehicle_properties.vehicle->getVehicleRaycaster()->castRay(v_from, v_to, rst);
//std::cout << "cast: " << rst.m_hitPointInWorld.getX() << ", " << rst.m_hitPointInWorld.getY() << ", " << rst.m_hitPointInWorld.getZ() << std::endl;
for(int wheel_index = 0; wheel_index < rc_actor[vehicle_actor].vehicle_properties.wheels.size(); wheel_index++) for(int wheel_index = 0; wheel_index < rc_actor[vehicle_actor].vehicle_properties.wheels.size(); wheel_index++)
{ {
rc_actor[vehicle_actor].vehicle_properties.vehicle->updateWheelTransform(wheel_index, true);
SWheelInfo &info = rc_actor[vehicle_actor].vehicle_properties.vehicle->getWheelInfo(wheel_index); SWheelInfo &info = rc_actor[vehicle_actor].vehicle_properties.vehicle->getWheelInfo(wheel_index);
int wheel_actor = rc_actor[vehicle_actor].vehicle_properties.wheels[wheel_index].actor_id; int wheel_actor = rc_actor[vehicle_actor].vehicle_properties.wheels[wheel_index].actor_id;
@@ -550,8 +559,38 @@ bool rc_update()
if(wheel_actor < 0 || wheel_actor >= rc_actor.size()) if(wheel_actor < 0 || wheel_actor >= rc_actor.size())
continue; continue;
if(wheel_index == 0)
{
irr::core::matrix4 mt = info.worldTransform;
btVector3 v_from( mt.getTranslation().X, mt.getTranslation().Y, mt.getTranslation().Y );
float radius = info.wheelRadius;
btVector3 v_to( v_from.getX(), v_from.getY() + 30, v_from.getZ());
btVehicleRaycaster::btVehicleRaycasterResult rst;
rc_actor[vehicle_actor].vehicle_properties.vehicle->getVehicleRaycaster()->castRay(v_from, v_to, rst);
//std::cout << "cast: r=" << radius << " hit = ( " << rst.m_hitPointInWorld.getX() << ", " << rst.m_hitPointInWorld.getY() << ", " << rst.m_hitPointInWorld.getZ() << " ) ";
//if(info.raycastInfo.isInContact)
//std::cout << "contact=" << (info.raycastInfo.isInContact ? "true" : "false") << std::endl;
}
rc_actor[wheel_actor].physics.rigid_body->setWorldTransform(info.worldTransform); rc_actor[wheel_actor].physics.rigid_body->setWorldTransform(info.worldTransform);
irr::core::matrix4 actor_transform = rc_actor[wheel_actor].physics.rigid_body->getWorldTransform();
irr::core::matrix4 offset_transform = rc_actor[vehicle_actor].vehicle_properties.wheels[wheel_index].offset_transform;
irr::core::vector3df rot_vector( 0, info.wheelRotation, 0 );
irr::core::matrix4 wheel_rot_m;
wheel_rot_m.makeIdentity();
wheel_rot_m.setRotationDegrees(rot_vector);
irr::core::matrix4 actor_transform = info.worldTransform * offset_transform;
//info.wheelRotation = info.wheelRotation + 1;
rc_actor[vehicle_actor].vehicle_properties.vehicle->updateWheelInfo(wheel_index);
//irr::core::vector3df actor_rot_vector = actor_transform.getRotationDegrees();
//std::cout << "VT: " << actor_rot_vector.X << ", " << actor_rot_vector.Y << ", " << actor_rot_vector.Z << std::endl;
//std::cout << wheel_index << " setWheelConnectionPoint OUT: " << info.chassisConnectionPointCS.X << ", " << info.chassisConnectionPointCS.Y << ", " << info.chassisConnectionPointCS.Z << std::endl;
//std::cout << wheel_index << " info: " << info.worldTransform.getTranslation().X << ", " << info.worldTransform.getTranslation().Y << ", " << info.worldTransform.getTranslation().Z << std::endl;
rc_actor[wheel_actor].mesh_node->setPosition( actor_transform.getTranslation() ); rc_actor[wheel_actor].mesh_node->setPosition( actor_transform.getTranslation() );
rc_actor[wheel_actor].mesh_node->setRotation( actor_transform.getRotationDegrees() ); rc_actor[wheel_actor].mesh_node->setRotation( actor_transform.getRotationDegrees() );

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0 # depslib dependency file v1.0
1771311954 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp 1771642154 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
"rc_os_defines.h" "rc_os_defines.h"
<emscripten.h> <emscripten.h>
<sys/param.h> <sys/param.h>
@@ -37,7 +37,7 @@
1771296059 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h 1771296059 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h> <TargetConditionals.h>
1771626799 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h 1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h 1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h" "rc_os_defines.h"
@@ -1249,7 +1249,7 @@
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h 1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h> <irrlicht.h>
1769579622 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h 1771732659 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h" "SDL.h"
<SDL2/SDL.h> <SDL2/SDL.h>
<irrlicht.h> <irrlicht.h>
@@ -1275,7 +1275,7 @@
"rc_post_fx.h" "rc_post_fx.h"
<irrtheora.h> <irrtheora.h>
1771574063 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h 1771745708 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
"SDL.h" "SDL.h"
"btBulletDynamicsCommon.h" "btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h" "BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2281,7 +2281,7 @@
"rc_gfx_core.h" "rc_gfx_core.h"
<irrtheora.h> <irrtheora.h>
1771626799 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h 1771750699 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp 1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h" "irrBullet.h"
@@ -2503,7 +2503,7 @@
<SDL.h> <SDL.h>
<SDL2/SDL.h> <SDL2/SDL.h>
1771302491 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h 1771737005 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
"SDL.h" "SDL.h"
<SDL2/SDL.h> <SDL2/SDL.h>
"rc_sprite2D.h" "rc_sprite2D.h"
@@ -2533,7 +2533,7 @@
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h
"rc_gfx_core.h" "rc_gfx_core.h"
1771579368 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h 1771748492 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h
"ProjectiveTextures.h" "ProjectiveTextures.h"
"rc_matrix.h" "rc_matrix.h"
@@ -2557,7 +2557,7 @@
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h
1771572803 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h 1771660997 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h
1650940764 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h 1650940764 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
"BulletCollision/CollisionShapes/btTriangleCallback.h" "BulletCollision/CollisionShapes/btTriangleCallback.h"
@@ -2588,10 +2588,10 @@
<iostream> <iostream>
"CShader.h" "CShader.h"
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h 1771743310 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
<irrlicht.h> <irrlicht.h>
1758412944 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp 1771745563 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.cpp
"ProjectiveTextures.h" "ProjectiveTextures.h"
<string> <string>