X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fscene-manager.cpp;h=d17d65c297fd2876749356410542b1c6174a0b16;hb=a079c41de6a7504e579b425820beef21579e530e;hp=f7a2b12f094104c9b106c96622e5fe7bdeca5454;hpb=27d87e5792c0f25c04b86e6cf3497425aee4e3d8;p=guile-irrlicht.git diff --git a/src/scene-manager.cpp b/src/scene-manager.cpp index f7a2b12..d17d65c 100644 --- a/src/scene-manager.cpp +++ b/src/scene-manager.cpp @@ -27,6 +27,7 @@ #include "box3d.h" #include "camera-scene-node.h" #include "device.h" +#include "gsubr.h" #include "keymap.h" #include "material.h" #include "mesh.h" @@ -43,29 +44,19 @@ extern "C" { init_scene_manager (void) { init_scene_manager_type (); - scm_c_define_gsubr ("add-animated-mesh-scene-node!", 2, 0, 1, - (scm_t_subr)irr_scene_addAnimatedMeshSceneNode); - scm_c_define_gsubr ("add-camera-scene-node!", 1, 0, 1, - (scm_t_subr)irr_scene_addCameraSceneNode); - scm_c_define_gsubr ("add-camera-scene-node-fps!", 1, 0, 1, - (scm_t_subr)irr_scene_addCameraSceneNodeFPS); - scm_c_define_gsubr ("add-cube-scene-node!", 1, 0, 1, - (scm_t_subr)irr_scene_addCubeSceneNode); - scm_c_define_gsubr ("add-custom-scene-node!", 5, 0, 1, - (scm_t_subr)irr_scene_addCustomSceneNode); - scm_c_define_gsubr ("add-octree-scene-node!", 2, 0, 1, - (scm_t_subr)irr_scene_addOctreeSceneNode); - scm_c_define_gsubr ("add-sphere-scene-node!", 1, 0, 1, - (scm_t_subr)irr_scene_addSphereSceneNode); - scm_c_define_gsubr ("create-rotation-animator", 2, 0, 0, - (scm_t_subr)irr_scene_createRotationAnimator); - scm_c_define_gsubr ("get-mesh", 2, 0, 0, (scm_t_subr)irr_scene_getMesh); - scm_c_define_gsubr ("get-root-scene-node", 1, 0, 0, (scm_t_subr)irr_scene_getRootSceneNode); - scm_c_define_gsubr ("get-scene-manager", 1, 0, 0, (scm_t_subr)irr_getSceneManager); - scm_c_export ("add-animated-mesh-scene-node!", "add-camera-scene-node!", - "add-camera-scene-node-fps!", "add-custom-scene-node!", "add-cube-scene-node!", - "add-octree-scene-node!", "add-sphere-scene-node!", "create-rotation-animator", - "get-mesh", "get-root-scene-node", "get-scene-manager", NULL); + DEFINE_GSUBR ("add-animated-mesh-scene-node!", 2, 0, 1, irr_scene_addAnimatedMeshSceneNode); + DEFINE_GSUBR ("add-camera-scene-node!", 1, 0, 1, irr_scene_addCameraSceneNode); + DEFINE_GSUBR ("add-camera-scene-node-fps!", 1, 0, 1, irr_scene_addCameraSceneNodeFPS); + DEFINE_GSUBR ("add-cube-scene-node!", 1, 0, 1, irr_scene_addCubeSceneNode); + DEFINE_GSUBR ("add-custom-scene-node!", 5, 0, 1, irr_scene_addCustomSceneNode); + DEFINE_GSUBR ("add-octree-scene-node!", 2, 0, 1, irr_scene_addOctreeSceneNode); + DEFINE_GSUBR ("add-sphere-scene-node!", 1, 0, 1, irr_scene_addSphereSceneNode); + DEFINE_GSUBR ("create-fly-circle-animator", 1, 0, 1, irr_scene_createFlyCircleAnimator); + DEFINE_GSUBR ("create-fly-straight-animator", 4, 0, 1, irr_scene_createFlyStraightAnimator); + DEFINE_GSUBR ("create-rotation-animator", 2, 0, 0, irr_scene_createRotationAnimator); + DEFINE_GSUBR ("get-mesh", 2, 0, 0, irr_scene_getMesh); + DEFINE_GSUBR ("get-root-scene-node", 1, 0, 0, irr_scene_getRootSceneNode); + DEFINE_GSUBR ("get-scene-manager", 1, 0, 0, irr_getSceneManager); } DEFINE_WRAPPED_TYPE (irr::scene::ISceneManager*, "scene-manager", @@ -77,7 +68,7 @@ extern "C" { SCM mesh, SCM rest) { - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM id = scm_from_int32 (-1); SCM position = scm_list_3 (scm_from_double (0), scm_from_double (0), @@ -88,7 +79,7 @@ extern "C" { SCM scale = scm_list_3 (scm_from_double (1), scm_from_double (1), scm_from_double (1)); - SCM also_add_if_mesh_pointer_zero = scm_from_bool (0); + SCM also_add_if_mesh_pointer_zero = SCM_BOOL_F; scm_c_bind_keyword_arguments ("add-animated-mesh-scene-node!", rest, (scm_t_keyword_arguments_flags)0, scm_from_utf8_keyword ("parent"), &parent, @@ -102,7 +93,7 @@ extern "C" { irr::scene::ISceneManager* smgr = unwrap_scene_manager (wrapped_scene_manager); irr::scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode (unwrap_animated_mesh (mesh), - scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_int32 (id), scm_to_vector3df (position), scm_to_vector3df (rotation), @@ -115,7 +106,7 @@ extern "C" { irr_scene_addCameraSceneNode (SCM wrapped_scene_manager, SCM rest) { - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM position = scm_list_3 (scm_from_double (0), scm_from_double (0), scm_from_double (0)); @@ -123,7 +114,7 @@ extern "C" { scm_from_double (0), scm_from_double (100)); SCM id = scm_from_int32 (-1); - SCM make_active = scm_from_bool (1); + SCM make_active = SCM_BOOL_T; scm_c_bind_keyword_arguments ("add-camera-scene-node!", rest, (scm_t_keyword_arguments_flags)0, scm_from_utf8_keyword ("parent"), &parent, @@ -135,7 +126,7 @@ extern "C" { irr::scene::ISceneManager* scene_manager = unwrap_scene_manager (wrapped_scene_manager); irr::scene::ICameraSceneNode* camera = - scene_manager->addCameraSceneNode (scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + scene_manager->addCameraSceneNode (parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_vector3df (position), scm_to_vector3df (lookat), scm_to_int32 (id), @@ -147,16 +138,16 @@ extern "C" { irr_scene_addCameraSceneNodeFPS (SCM wrapped_scene_manager, SCM rest) { - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM rotate_speed = scm_from_double (100); SCM move_speed = scm_from_double (0.5); SCM id = scm_from_int32 (-1); - SCM key_map_array = scm_from_bool (0); + SCM key_map_array = SCM_UNDEFINED; SCM key_map_size = scm_from_int32 (0); - SCM no_vertical_movement = scm_from_bool (0); + SCM no_vertical_movement = SCM_BOOL_F; SCM jump_speed = scm_from_double (0); - SCM invert_mouse = scm_from_bool (0); - SCM make_active = scm_from_bool (1); + SCM invert_mouse = SCM_BOOL_F; + SCM make_active = SCM_BOOL_T; scm_c_bind_keyword_arguments ("add-camera-scene-node-fps!", rest, (scm_t_keyword_arguments_flags)0, scm_from_utf8_keyword ("parent"), &parent, @@ -173,11 +164,11 @@ extern "C" { irr::scene::ISceneManager* scene_manager = unwrap_scene_manager (wrapped_scene_manager); irr::scene::ICameraSceneNode* camera = - scene_manager->addCameraSceneNodeFPS (scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + scene_manager->addCameraSceneNodeFPS (parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_double (rotate_speed), scm_to_double (move_speed), scm_to_int32 (id), - scm_is_false (key_map_array) ? 0 : unwrap_keymap (key_map_array), + key_map_array == SCM_UNDEFINED ? 0 : unwrap_keymap (key_map_array), scm_to_int32 (key_map_size), scm_to_bool (no_vertical_movement), scm_to_double (jump_speed), @@ -191,7 +182,7 @@ extern "C" { SCM rest) { SCM size = scm_from_double (10); - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM id = scm_from_int32 (-1); SCM position = scm_list_3 (scm_from_double (0), scm_from_double (0), @@ -215,7 +206,7 @@ extern "C" { irr::scene::ISceneManager* smgr = unwrap_scene_manager (wrapped_scene_manager); irr::scene::IMeshSceneNode* node = smgr->addCubeSceneNode (scm_to_double (size), - scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_int32 (id), scm_to_vector3df (position), scm_to_vector3df (rotation), @@ -330,10 +321,10 @@ extern "C" { SCM wrapped_mesh, SCM rest) { - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM id = scm_from_int32 (-1); SCM minimal_polys_per_node = scm_from_int32 (256); - SCM also_add_if_mesh_pointer_zero = scm_from_bool (0); + SCM also_add_if_mesh_pointer_zero = SCM_BOOL_F; scm_c_bind_keyword_arguments ("add-octree-scene-node!", rest, (scm_t_keyword_arguments_flags)0, scm_from_utf8_keyword ("parent"), &parent, @@ -347,7 +338,7 @@ extern "C" { if (animated_mesh_p (wrapped_mesh)) { node = smgr->addOctreeSceneNode (unwrap_animated_mesh (wrapped_mesh), - scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_int32 (id), scm_to_int32 (minimal_polys_per_node), scm_to_bool (also_add_if_mesh_pointer_zero)); @@ -355,7 +346,7 @@ extern "C" { else { node = smgr->addOctreeSceneNode (unwrap_mesh (wrapped_mesh), - scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_int32 (id), scm_to_int32 (minimal_polys_per_node), scm_to_bool (also_add_if_mesh_pointer_zero)); @@ -369,7 +360,7 @@ extern "C" { { SCM radius = scm_from_double (5.0); SCM poly_count = scm_from_int32 (16); - SCM parent = scm_from_bool (0); + SCM parent = SCM_UNDEFINED; SCM id = scm_from_int32 (-1); SCM position = scm_list_3 (scm_from_double (0), scm_from_double (0), @@ -395,7 +386,7 @@ extern "C" { irr::scene::IMeshSceneNode* node = smgr->addSphereSceneNode (scm_to_double (radius), scm_to_int32 (poly_count), - scm_is_false (parent) ? 0 : unwrap_scene_node (parent), + parent == SCM_UNDEFINED ? 0 : unwrap_scene_node (parent), scm_to_int32 (id), scm_to_vector3df (position), scm_to_vector3df (rotation), @@ -403,6 +394,66 @@ extern "C" { return wrap_mesh_scene_node (node); } + SCM + irr_scene_createFlyCircleAnimator (SCM wrapped_scene_manager, + SCM rest) + { + SCM center = scm_list_3 (scm_from_double (0), + scm_from_double (0), + scm_from_double (0)); + SCM radius = scm_from_double (100); + SCM speed = scm_from_double (0.001); + SCM direction = scm_list_3 (scm_from_double (0), + scm_from_double (1), + scm_from_double (0)); + SCM start_position = scm_from_double (0); + SCM radius_ellipsoid = scm_from_double (0); + + scm_c_bind_keyword_arguments ("create-fly-circle-animator", rest, (scm_t_keyword_arguments_flags)0, + scm_from_utf8_keyword ("center"), ¢er, + scm_from_utf8_keyword ("radius"), &radius, + scm_from_utf8_keyword ("speed"), &speed, + scm_from_utf8_keyword ("direction"), &direction, + scm_from_utf8_keyword ("start-position"), &start_position, + scm_from_utf8_keyword ("radius-ellipsoid"), &radius_ellipsoid, + SCM_UNDEFINED); + + irr::scene::ISceneManager* smgr = unwrap_scene_manager (wrapped_scene_manager); + irr::scene::ISceneNodeAnimator* anim = + smgr->createFlyCircleAnimator (scm_to_vector3df (center), + scm_to_double (radius), + scm_to_double (speed), + scm_to_vector3df (direction), + scm_to_double (start_position), + scm_to_double (radius_ellipsoid)); + return wrap_scene_node_animator (anim); + } + + SCM + irr_scene_createFlyStraightAnimator (SCM wrapped_scene_manager, + SCM start_point, + SCM end_point, + SCM time_for_way, + SCM rest) + { + SCM loop = SCM_BOOL_F; + SCM pingpong = SCM_BOOL_F; + + scm_c_bind_keyword_arguments ("create-fly-straight-animator", rest, (scm_t_keyword_arguments_flags)0, + scm_from_utf8_keyword ("loop"), &loop, + scm_from_utf8_keyword ("pingpong"), &pingpong, + SCM_UNDEFINED); + + irr::scene::ISceneManager* smgr = unwrap_scene_manager (wrapped_scene_manager); + irr::scene::ISceneNodeAnimator* anim = + smgr->createFlyStraightAnimator (scm_to_vector3df (start_point), + scm_to_vector3df (end_point), + scm_to_uint32 (time_for_way), + scm_to_bool (loop), + scm_to_bool (pingpong)); + return wrap_scene_node_animator (anim); + } + SCM irr_scene_createRotationAnimator (SCM wrapped_scene_manager, SCM rotation_speed)