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_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_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS )
rc_loadImage( LOADIMAGE_IMG$ )
rc_loadImageEx( LOADIMAGEEX_IMG$, LOADIMAGEEX_COLKEY )
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_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_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ )
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE )
rc_getAntiAliasMode( )
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_getTextWidth( TEXTWIDTH_TXT$ )
rc_getTextHeight( TEXTHEIGHT_TXT$ )
rc_activeFont( )
rc_touchPressure( )
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 )
@@ -531,6 +534,7 @@ rc_getSpriteCurrentAnimationFrame( GETSPRITECURRENTANIMATIONFRAME_SPRITE )
rc_numSpriteAnimationLoops( NUMSPRITEANIMATIONLOOPS_SPRITE )
rc_spriteAnimationIsPlaying( SPRITEANIMATIONISPLAYING_SPRITE )
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION )
rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION )
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y )
rc_setSpriteLinearVelocity( SETSPRITELINEARVELOCITY_SPR_ID, SETSPRITELINEARVELOCITY_X, SETSPRITELINEARVELOCITY_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_setProjectorFOV( SETPROJECTORFOV_ACTOR, SETPROJECTORFOV_FOV )
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_getCompositeChildCount( GETCOMPOSITECHILDCOUNT_ACTOR )
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_Flip(slot, x, y, 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 )
function GetAntiAliasMode( )
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 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 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 SetProjectorFOV(actor, fov)
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 SpriteAnimationIsPlaying(sprite)
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)
function TextWidth(txt$)
function TextHeight(txt$)
function ActiveFont()

View File

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

View File

@@ -662,6 +662,8 @@ void init_embedded_functions()
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", 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);
add_embedded_arg("img$", ID_TYPE_STR);
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("h", 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);
add_embedded_arg("aa_mode", ID_TYPE_NUM);
embed_function("GetAntiAliasMode", ID_TYPE_FN_NUM);
@@ -978,6 +983,7 @@ void init_embedded_functions()
add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("TextHeight", ID_TYPE_FN_NUM);
add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("ActiveFont", ID_TYPE_FN_NUM);
embed_function("TouchPressure", ID_TYPE_FN_NUM);
embed_function("GetTouch", ID_TYPE_SUB);
add_embedded_arg("status", ID_TYPE_BYREF_NUM);
@@ -1525,6 +1531,9 @@ void init_embedded_functions()
embed_function("DeleteSpriteAnimation", ID_TYPE_SUB);
add_embedded_arg("sprite", 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);
add_embedded_arg("spr_id", ID_TYPE_NUM);
add_embedded_arg("x", ID_TYPE_BYREF_NUM);
@@ -3322,6 +3331,22 @@ void init_embedded_functions()
add_embedded_arg("fov", ID_TYPE_NUM);
embed_function("GetProjectorFOV", ID_TYPE_FN_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);
add_embedded_arg("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
<inttypes.h>
1771619942 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
1771626799 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
"identifier.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("y3", 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);
add_embedded_arg("img$", ID_TYPE_STR);
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("h", 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);
add_embedded_arg("aa_mode", ID_TYPE_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);
embed_function("TextHeight", ID_TYPE_FN_NUM);
add_embedded_arg("txt$", ID_TYPE_STR);
embed_function("ActiveFont", ID_TYPE_FN_NUM);
embed_function("TouchPressure", ID_TYPE_FN_NUM);
embed_function("GetTouch", ID_TYPE_SUB);
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);
add_embedded_arg("sprite", 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);
add_embedded_arg("spr_id", ID_TYPE_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);
embed_function("GetProjectorFOV", ID_TYPE_FN_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);
add_embedded_arg("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
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break;
case FN_SetRenderCirclePoints: //Sub Procedure
rc_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS );
break;
case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break;
@@ -817,6 +820,9 @@ case FN_DrawImage_Flip: //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 );
break;
case FN_SaveBMP: //Number Function
rc_push_num(rc_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ ));
break;
case FN_SetAntiAliasMode: //Sub Procedure
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE );
break;
@@ -1063,6 +1069,9 @@ case FN_TextWidth: //Number Function
case FN_TextHeight: //Number Function
rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ ));
break;
case FN_ActiveFont: //Number Function
rc_push_num(rc_activeFont( ));
break;
case FN_TouchPressure: //Number Function
rc_push_num(rc_touchPressure( ));
break;
@@ -1625,6 +1634,9 @@ case FN_SpriteAnimationIsPlaying: //Number Function
case FN_DeleteSpriteAnimation: //Sub Procedure
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION );
break;
case FN_GetSpriteAnimationSource: //Number Function
rc_push_num(rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION ));
break;
case FN_getSpriteCenter: //Sub Procedure
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y );
break;
@@ -3185,6 +3197,24 @@ case FN_SetProjectorFOV: //Sub Procedure
case FN_GetProjectorFOV: //Number Function
rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR ));
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
rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX ));
break;

View File

@@ -148,7 +148,9 @@ void CProjectiveTextures::render()
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)
{
@@ -159,8 +161,46 @@ void CProjectiveTextures::render()
pVideo->setTransform(irr::video::ETS_WORLD,nodeArray[i]->getAbsoluteTransformation());
pVideo->setMaterial(projMat);
for(irr::u32 j=0; j<nodeArray[i]->getMaterialCount(); ++j)
pVideo->drawMeshBuffer(nodeArray[i]->getMesh()->getMeshBuffer(j));
mesh = NULL;
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);
irr::video::ITexture* texture;
irr::core::array<irr::scene::IMeshSceneNode*> nodeArray;
irr::core::array<irr::scene::ISceneNode*> nodeArray;
private:

View File

@@ -4318,6 +4318,7 @@ void rcbasic_init()
void rcbasic_clean()
{
rc_clearScene();
rc_audio_quit();
rc_net_quit();
rc_gfx_quit();
@@ -4453,7 +4454,7 @@ int main(int argc, char * argv[])
//ogles2 test
#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_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)
{
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_actor[wheel_id].physics.isSolid = flag;
//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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_COMPOSITE, 1);
@@ -738,6 +740,7 @@ int rc_createVehicleActor(int chassis_actor)
//Create RayCast Vehicle
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;
@@ -775,10 +778,11 @@ int rc_createVehicleActor(int chassis_actor)
rc_actor[actor_id].physics.collisions.clear();
rc_actor[actor_id].parent_id = -1;
rc_actor[actor_id].isWheel = false;
rc_vehicle_actors.push_back(actor_id);
setSolidProperties(actor_id);
//setSolidProperties(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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].parent_id = -1;
rc_actor[actor_id].isWheel = false;
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].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);
@@ -1282,6 +1298,26 @@ int rc_createProjectorActor()
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
void rc_deleteActor(int actor_id)
{
@@ -1291,6 +1327,10 @@ void rc_deleteActor(int actor_id)
if(!rc_actor[actor_id].mesh_node)
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)
{
for(int i = 0; i < rc_projector_actors.size(); i++)
@@ -1301,6 +1341,43 @@ void rc_deleteActor(int actor_id)
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();
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);
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)
{
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)
{
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++)
@@ -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].vehicle_properties.vehicle = NULL;
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].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].shadow = NULL;
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------------------------------
@@ -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();
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.offset_transform = -1;
wheel_obj.offset_transform.makeIdentity();
rc_actor[actor].vehicle_properties.wheels.push_back(wheel_obj);
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].isWheel = true;
rc_actor[wheel_actor].parent_id = actor;
irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform();
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())
return;
//std::cout << "setWheelConnectionPoint: " << wheel_index << std::endl;
SWheelInfo &info = rc_actor[actor].vehicle_properties.vehicle->getWheelInfo(wheel_index);
info.chassisConnectionPointCS.set((float)x, (float)y, (float)z);
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 )

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
rc_drawTriangle3D( TRIANGLE3D_X1, TRIANGLE3D_Y1, TRIANGLE3D_Z1, TRIANGLE3D_X2, TRIANGLE3D_Y2, TRIANGLE3D_Z2, TRIANGLE3D_X3, TRIANGLE3D_Y3, TRIANGLE3D_Z3 );
break;
case FN_SetRenderCirclePoints: //Sub Procedure
rc_setRenderCirclePoints( SETRENDERCIRCLEPOINTS_NUM_POINTS );
break;
case FN_LoadImage: //Number Function
rc_push_num(rc_loadImage( LOADIMAGE_IMG$ ));
break;
@@ -817,6 +820,9 @@ case FN_DrawImage_Flip: //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 );
break;
case FN_SaveBMP: //Number Function
rc_push_num(rc_saveBMP( SAVEBMP_IMG, SAVEBMP_FILE$ ));
break;
case FN_SetAntiAliasMode: //Sub Procedure
rc_setAntiAliasMode( SETANTIALIASMODE_AA_MODE );
break;
@@ -1063,6 +1069,9 @@ case FN_TextWidth: //Number Function
case FN_TextHeight: //Number Function
rc_push_num(rc_getTextHeight( TEXTHEIGHT_TXT$ ));
break;
case FN_ActiveFont: //Number Function
rc_push_num(rc_activeFont( ));
break;
case FN_TouchPressure: //Number Function
rc_push_num(rc_touchPressure( ));
break;
@@ -1625,6 +1634,9 @@ case FN_SpriteAnimationIsPlaying: //Number Function
case FN_DeleteSpriteAnimation: //Sub Procedure
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION );
break;
case FN_GetSpriteAnimationSource: //Number Function
rc_push_num(rc_getSpriteAnimationSource( GETSPRITEANIMATIONSOURCE_SPRITE, GETSPRITEANIMATIONSOURCE_ANIMATION ));
break;
case FN_getSpriteCenter: //Sub Procedure
rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y );
break;
@@ -3185,6 +3197,24 @@ case FN_SetProjectorFOV: //Sub Procedure
case FN_GetProjectorFOV: //Number Function
rc_push_num(rc_getProjectorFOV( GETPROJECTORFOV_ACTOR ));
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
rc_push_num(rc_addCompositeChild( ADDCOMPOSITECHILD_ACTOR, ADDCOMPOSITECHILD_CHILD_ACTOR, ADDCOMPOSITECHILD_T_MATRIX ));
break;

View File

@@ -1907,6 +1907,13 @@ double radians(double degree)
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)
{
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.radius2 = rx;
circle.color = rc_active_color;
circle.numVertices = 21;
circle.numVertices = rc_num_circle_points;
makeEllipse(verticesCircle, indicesCircle, circle);
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.radius2 = rx;
circle.color = rc_active_color;
circle.numVertices = 21;
circle.numVertices = rc_num_circle_points;
makeEllipse(verticesCircle, indicesCircle, circle);
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);
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
@@ -2154,6 +2146,11 @@ void rc_setFont(int font_id)
rc_active_font = font_id;
}
int rc_activeFont()
{
return rc_active_font;
}
void rc_drawText(std::string txt, int x, int y)
{
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_clear_color(0,0,0,0);
int rc_num_circle_points = 60;
bool rc_init_events = false;
bool rc_init_timer = false;
bool rc_init_video = false;
@@ -640,6 +642,12 @@ struct rc_vehicle_properties
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
{
int node_type = 0;
@@ -666,9 +674,14 @@ struct rc_scene_node
irr::core::array<rc_actor_animation_obj> animation;
int parent_id;
int parent_vehicle;
bool isWheel;
irr::core::array<rc_composite_child> child_actors; // Only used for composite actor types
rc_vehicle_properties vehicle_properties;
rc_projector_properties projector_properties;
irr::core::array<int> projector_parent;
};
irr::core::array<rc_scene_node> rc_actor;
@@ -1125,6 +1138,24 @@ SDL_Surface* convertTextureToSurface(irr::video::ITexture* itexture)
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()
{

View File

@@ -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__

View File

@@ -178,6 +178,20 @@ int rc_getSpriteAnimationLength(int spr_id, int animation)
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)
{
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];
//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++)
{
rc_actor[vehicle_actor].vehicle_properties.vehicle->updateWheelTransform(wheel_index, true);
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;
@@ -550,8 +559,38 @@ bool rc_update()
if(wheel_actor < 0 || wheel_actor >= rc_actor.size())
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);
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->setRotation( actor_transform.getRotationDegrees() );

View File

@@ -1,5 +1,5 @@
# 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"
<emscripten.h>
<sys/param.h>
@@ -37,7 +37,7 @@
1771296059 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.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
"rc_os_defines.h"
@@ -1249,7 +1249,7 @@
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.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"
<SDL2/SDL.h>
<irrlicht.h>
@@ -1275,7 +1275,7 @@
"rc_post_fx.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"
"btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2281,7 +2281,7 @@
"rc_gfx_core.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
"irrBullet.h"
@@ -2503,7 +2503,7 @@
<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"
<SDL2/SDL.h>
"rc_sprite2D.h"
@@ -2533,7 +2533,7 @@
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.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"
"rc_matrix.h"
@@ -2557,7 +2557,7 @@
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
"BulletCollision/CollisionShapes/btTriangleCallback.h"
@@ -2588,10 +2588,10 @@
<iostream>
"CShader.h"
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.h
1771743310 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/ProjectiveTextures.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"
<string>