X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fguile-irrlicht.cpp;h=bc76b72078b0a40737e416b6ca44ebe712676e9c;hb=df1ada6981c0c98038ba5fe2f09993934405dff2;hp=a1e84116ed28d4b07e88e873ae740eaaf5e7384c;hpb=789237bc01f8b2172725b51dbc7ae72b9a30be7a;p=guile-irrlicht.git diff --git a/src/guile-irrlicht.cpp b/src/guile-irrlicht.cpp index a1e8411..bc76b72 100644 --- a/src/guile-irrlicht.cpp +++ b/src/guile-irrlicht.cpp @@ -30,9 +30,10 @@ #include "event-receiver.h" #include "file-archive.h" #include "file-system.h" +#include "gsubr.h" +#include "gui.h" #include "gui-element.h" #include "gui-environment.h" -#include "gui-static-text.h" #include "guile-irrlicht.h" #include "keymap.h" #include "material.h" @@ -43,6 +44,7 @@ #include "scene-node.h" #include "scene-node-animator.h" #include "texture.h" +#include "timer.h" #include "vertex3d.h" #include "video-driver.h" #include "wchar.h" @@ -62,9 +64,7 @@ extern "C" { init_event_receiver (); init_file_archive (); init_file_system (); - init_gui_element (); - init_gui_environment (); - init_gui_static_text (); + init_gui (); init_keymap (); init_material (); init_mesh (); @@ -74,18 +74,18 @@ extern "C" { init_scene_node (); init_scene_node_animator (); init_texture (); + init_timer (); init_vertex3d (); init_video_driver (); // Shared procedures (used by two or more objects) - scm_c_define_gsubr ("draw-all", 1, 0, 0, (scm_t_subr)irr_drawAll); - scm_c_define_gsubr ("get-name", 1, 0, 0, (scm_t_subr)irr_getName); - scm_c_define_gsubr ("set-material!", 2, 0, 0, (scm_t_subr)irr_setMaterial); - scm_c_define_gsubr ("set-material-flag!", 3, 0, 0, (scm_t_subr)irr_setMaterialFlag); - scm_c_define_gsubr ("set-position!", 2, 0, 0, (scm_t_subr)irr_setPosition); - scm_c_define_gsubr ("set-visible!", 2, 0, 0, (scm_t_subr)irr_setVisible); - scm_c_export ("draw-all", "get-name", "set-material!", "set-material-flag!", - "set-position!", "set-visible!", NULL); + DEFINE_GSUBR ("draw-all", 1, 0, 0, irr_drawAll); + DEFINE_GSUBR ("get-position", 1, 1, 0, irr_getPosition); + DEFINE_GSUBR ("get-name", 1, 0, 0, irr_getName); + DEFINE_GSUBR ("set-material!", 2, 0, 0, irr_setMaterial); + DEFINE_GSUBR ("set-material-flag!", 3, 0, 0, irr_setMaterialFlag); + DEFINE_GSUBR ("set-position!", 2, 0, 0, irr_setPosition); + DEFINE_GSUBR ("set-visible!", 2, 0, 0, irr_setVisible); } SCM @@ -121,6 +121,25 @@ extern "C" { } } + SCM + irr_getPosition (SCM wrapped_obj, + SCM i) + { + if (cursor_control_p (wrapped_obj)) + { + return irr_gui_getPosition (wrapped_obj); + } + else if (is_scene_node_object (wrapped_obj)) + { + return irr_scene_getPosition (wrapped_obj); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot get position from object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + SCM irr_setMaterial (SCM wrapped_obj, SCM material) @@ -141,7 +160,7 @@ extern "C" { SCM flag, SCM newvalue) { - if (mesh_scene_node_p (wrapped_obj) || scene_node_p (wrapped_obj)) + if (is_scene_node_object (wrapped_obj)) { return irr_scene_ISceneNode_setMaterialFlag (wrapped_obj, flag, newvalue); } @@ -160,7 +179,7 @@ extern "C" { { return irr_gui_setPosition (wrapped_obj, position); } - else if (scene_node_p (wrapped_obj) || mesh_scene_node_p (wrapped_obj)) + else if (is_scene_node_object (wrapped_obj)) { return irr_scene_setPosition (wrapped_obj, position); } @@ -175,17 +194,19 @@ extern "C" { irr_setVisible (SCM wrapped_obj, SCM visible) { +#define SET_VISIBLE(OBJ) OBJ->setVisible (scm_to_bool (visible)); + if (cursor_control_p (wrapped_obj)) { - unwrap_cursor_control (wrapped_obj)->setVisible (scm_to_bool (visible)); + SET_VISIBLE (unwrap_cursor_control (wrapped_obj)); } else if (gui_element_p (wrapped_obj)) { - unwrap_gui_element (wrapped_obj)->setVisible (scm_to_bool (visible)); + SET_VISIBLE (unwrap_gui_element (wrapped_obj)); } - else if (scene_node_p (wrapped_obj)) + else if (is_scene_node_object (wrapped_obj)) { - unwrap_scene_node (wrapped_obj)->setVisible (scm_to_bool (visible)); + SET_VISIBLE (unwrap_scene_node (wrapped_obj)); } else {