X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2FISceneManager.cpp;h=5e8d2d5a13153d9c70a445fdc9815a75f5261941;hb=a8ec20de5146479a15d388393b37bbf3e346f619;hp=164af46047cb31ac7fefae56ebc6c44c4c8a0842;hpb=2dd8c4827c6c6afaba10fd04f50ec1587a750be5;p=guile-irrlicht.git diff --git a/src/ISceneManager.cpp b/src/ISceneManager.cpp index 164af46..5e8d2d5 100644 --- a/src/ISceneManager.cpp +++ b/src/ISceneManager.cpp @@ -21,7 +21,12 @@ #include #include +#include "IAnimatedMesh.h" +#include "IAnimatedMeshSceneNode.h" #include "ISceneManager.h" +#include "ISceneNode.h" +#include "vector3d.h" +#include "wrapped.h" extern "C" { @@ -29,35 +34,44 @@ extern "C" { init_scene_manager (void) { init_scene_manager_type (); + scm_c_define_gsubr ("add-animated-mesh-scene-node", 8, 0, 0, + (scm_t_subr)irr_scene_addAnimatedMeshSceneNode); + scm_c_define_gsubr ("get-mesh", 2, 0, 0, (scm_t_subr)irr_scene_getMesh); } - static SCM scene_manager_type; - - void - init_scene_manager_type (void) - { - SCM name, slots; - scm_t_struct_finalize finalizer; - - name = scm_from_utf8_symbol ("scene-manager"); - slots = scm_list_1 (scm_from_utf8_symbol ("data")); - finalizer = NULL; - - scene_manager_type = - scm_make_foreign_object_type (name, slots, finalizer); - } + DEFINE_WRAPPED_TYPE (irr::scene::ISceneManager*, "scene-manager", + init_scene_manager_type, scene_manager_p, + wrap_scene_manager, unwrap_scene_manager); SCM - wrap_scene_manager (irr::scene::ISceneManager* scene_manager) + irr_scene_addAnimatedMeshSceneNode (SCM wrapped_scene_manager, + SCM mesh, + SCM parent, + SCM id, + SCM position, + SCM rotation, + SCM scale, + SCM alsoAddIfMeshPointerZero) { - return scm_make_foreign_object_1 (scene_manager_type, scene_manager); + 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), + scm_to_int32 (id), + scm_to_vector3df (position), + scm_to_vector3df (rotation), + scm_to_vector3df (scale), + scm_to_bool (alsoAddIfMeshPointerZero)); + return wrap_animated_mesh_scene_node (node); } - irr::scene::ISceneManager* - unwrap_scene_manager (SCM scene_manager_obj) + SCM + irr_scene_getMesh (SCM wrapped_scene_manager, + SCM filename) { - scm_assert_foreign_object_type (scene_manager_type, scene_manager_obj); - return (irr::scene::ISceneManager*)scm_foreign_object_ref (scene_manager_obj, 0); + irr::scene::ISceneManager* smgr = unwrap_scene_manager (wrapped_scene_manager); + irr::scene::IAnimatedMesh* mesh = smgr->getMesh(scm_to_utf8_stringn (filename, NULL)); + return wrap_animated_mesh (mesh); } }