diff --git a/rcbasic_build/rcbasic4_changes.ods b/rcbasic_build/rcbasic4_changes.ods index ecabd31..d30b927 100644 Binary files a/rcbasic_build/rcbasic4_changes.ods and b/rcbasic_build/rcbasic4_changes.ods differ diff --git a/rcbasic_runtime/rc_base_actor.h b/rcbasic_runtime/rc_base_actor.h index 9b533de..bf471f2 100755 --- a/rcbasic_runtime/rc_base_actor.h +++ b/rcbasic_runtime/rc_base_actor.h @@ -2,6 +2,7 @@ #define RC_BASE_ACTOR_H_INCLUDED #include "ProjectiveTextures.h" +#include "rc_matrix.h" void setSolidProperties(int actor) { @@ -1504,6 +1505,196 @@ Uint32 rc_getLightSpecularColor(int actor) } +int GetActorBoneCount( int actor ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getJointCount(); + } + break; + } + + return 0; +} + +irr::u32 GetActorBoneIndex( int actor, std::string bone_name ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_name.c_str()); + if(bone) + { + return bone->getBoneIndex(); + } + } + break; + } + + return -1; +} + +std::string GetActorBoneName( int actor, irr::u32 bone_index ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return ""; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + return (std::string)bone->getBoneName() + "\0"; + } + } + break; + } + + return ""; +} + +bool GetActorBonePosition( int actor, int bone_index, double* x, double* y, double* z ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + *x = (double)bone->getPosition().X; + *y = (double)bone->getPosition().Y; + *z = (double)bone->getPosition().Z; + return true; + } + } + break; + } + + return false; +} + +bool GetActorBoneRotation( int actor, int bone_index, double* x, double* y, double* z ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + *x = (double)bone->getRotation().X; + *y = (double)bone->getRotation().Y; + *z = (double)bone->getRotation().Z; + return true; + } + } + break; + } + + return false; +} + +bool GetActorBoneScale( int actor, int bone_index, double* x, double* y, double* z ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + *x = (double)bone->getScale().X; + *y = (double)bone->getScale().Y; + *z = (double)bone->getScale().Z; + return true; + } + } + break; + } + + return false; +} + +bool GetActorBoneRelativeTranform( int actor, int bone_index, int t_matrix ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(!rc_matrixExists(t_matrix)) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + rc_convertFromIrrMatrix(bone->getRelativeTransformation(), t_matrix); + return true; + } + } + break; + } + + return false; +} + + +bool GetActorBoneAbsoluteTranform( int actor, int bone_index, int t_matrix ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(!rc_matrixExists(t_matrix)) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + irr::scene::IBoneSceneNode* bone = node->getJointNode(bone_index); + if(bone) + { + rc_convertFromIrrMatrix(bone->getAbsoluteTransformation(), t_matrix); + return true; + } + } + break; + } + + return false; +} + //set actor animation speed diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index b7b8f6e..dd06f9d 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -467,6 +467,8 @@ bool rc_windowOpenEx(std::string title, int x, int y, int w, int h, uint32_t win rc_physics3D.world->setInternalTickCallback((btInternalTickCallback)myTickCallback2); + rc_physics3D.enabled = true; + setMouseScaling(); return true; @@ -483,6 +485,17 @@ bool rc_windowOpen(std::string title, int w, int h, bool fullscreen, bool vsync) return true; } +void rc_setPhysics3D(bool flag) +{ + rc_physics3D.enabled = flag; + rc_physics3D.TimeStamp = SDL_GetTicks(); +} + +bool rc_getPhysics3D() +{ + return rc_physics3D.enabled; +} + void rc_cls() { if(rc_canvas.size()>0) @@ -3362,6 +3375,12 @@ void rc_setColorKey(int img_id, Uint32 colorkey) colorkey = img_pixels[0]; rc_image[img_id].image->unlock(); } + else + { + Uint32* img_pixels = (Uint32*)rc_image[img_id].image->lock(); + rc_image[img_id].image->unlock(); + } + VideoDriver->makeColorKeyTexture(rc_image[img_id].image, irr::video::SColor(colorkey)); } diff --git a/rcbasic_runtime/rc_gfx_core.h b/rcbasic_runtime/rc_gfx_core.h index 714229b..70fc573 100755 --- a/rcbasic_runtime/rc_gfx_core.h +++ b/rcbasic_runtime/rc_gfx_core.h @@ -283,6 +283,8 @@ struct rc_physicsWorld3D_obj { irrBulletWorld* world; + bool enabled; + irr::f32 DeltaTime; irr::u32 maxSubSteps; irr::f32 fixedTimeStep; diff --git a/rcbasic_runtime/rc_mesh.h b/rcbasic_runtime/rc_mesh.h index 136892f..07778e1 100755 --- a/rcbasic_runtime/rc_mesh.h +++ b/rcbasic_runtime/rc_mesh.h @@ -593,6 +593,4 @@ bool rc_getMeshBuffer(int mesh_id, int buffer_index, double* vertex_data, double } - - #endif // RC_MESH_H_INCLUDED diff --git a/rcbasic_runtime/rc_post_fx.h b/rcbasic_runtime/rc_post_fx.h index 3f8e9ba..7976e79 100644 --- a/rcbasic_runtime/rc_post_fx.h +++ b/rcbasic_runtime/rc_post_fx.h @@ -1539,4 +1539,16 @@ void rc_renderPostEffect(int canvas_id) } + +int rc_getPostEffectType(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) + return -1; + + if(!rc_canvas[canvas_id].post_effect.is_active) + return -1; + + return rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed +} + #endif // RC_POST_FX_H_INCLUDED diff --git a/rcbasic_runtime/rc_windowclose.h b/rcbasic_runtime/rc_windowclose.h index 6c79cc7..d441e30 100755 --- a/rcbasic_runtime/rc_windowclose.h +++ b/rcbasic_runtime/rc_windowclose.h @@ -526,7 +526,7 @@ bool rc_update() if(!manual_render_control) VideoDriver->beginScene(true, true); - if(!hasPreUpdated) + if(rc_physics3D.enabled && (!hasPreUpdated)) { //rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp; //rc_physics3D.TimeStamp = device->getTimer()->getTime(); diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index 7015d42..0e70a97 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1763950157 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp +1764140917 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp "rc_os_defines.h" @@ -37,9 +37,9 @@ 1763959134 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h -1763875558 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h -1763522526 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h "rc_os_defines.h" @@ -112,7 +112,7 @@ 1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/theoraplay.h -1763524510 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_matrix.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_matrix.h @@ -1249,11 +1249,12 @@ 1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h -1763874908 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h +1769130613 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h "SDL.h" + @@ -1274,7 +1275,7 @@ "rc_post_fx.h" -1763958975 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h +1769129955 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h "SDL.h" "btBulletDynamicsCommon.h" "BulletSoftBody/btSoftRigidDynamicsWorld.h" @@ -2247,7 +2248,7 @@ -1762655675 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h "rc_os_defines.h" "SDL.h" @@ -2279,7 +2280,7 @@ "rc_gfx_core.h" -1763875558 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h 1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp "irrBullet.h" @@ -2519,7 +2520,7 @@ -1763784488 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_sprite_physics.h "rc_sprite2D.h" 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_joints.h @@ -2531,8 +2532,9 @@ 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_physics3D_base.h "rc_gfx_core.h" -1763707569 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h +1769134196 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_base_actor.h "ProjectiveTextures.h" + "rc_matrix.h" 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_actor_material.h "rc_fx_materials.h" @@ -2543,16 +2545,16 @@ 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_constraint.h -1762832155 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_mesh.h +1769132494 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_mesh.h 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_particles.h -1763707707 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_scene.h "rc_gfx_core.h" 1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h -1763959070 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h +1769130046 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h 1650940764 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h "BulletCollision/CollisionShapes/btTriangleCallback.h" @@ -2746,12 +2748,12 @@ "rc_steam.h" -1763959070 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_render_control.h +1764140917 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_render_control.h "rc_gfx_core.h" "rc_post_fx.h" -1763959070 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_post_fx.h +1769129441 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_post_fx.h "rc_gfx_core.h" diff --git a/rcbasic_runtime/rcbasic_runtime.layout b/rcbasic_runtime/rcbasic_runtime.layout index 7d05287..920a813 100755 --- a/rcbasic_runtime/rcbasic_runtime.layout +++ b/rcbasic_runtime/rcbasic_runtime.layout @@ -2,167 +2,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -181,95 +23,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + @@ -277,36 +43,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -333,11 +69,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +