X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fmisc.cpp;h=1c01d2cebc3e17d68601a78fc470ce943f6290db;hb=d8ff74866c89933d74577d7887e47f013d515c69;hp=e0309796bb2813c99182fdad654d7c819d7488a2;hpb=f215da151462c3d0fe9bacc535083529ba43e716;p=guile-irrlicht.git diff --git a/src/misc.cpp b/src/misc.cpp index e030979..1c01d2c 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -21,7 +21,14 @@ #include #include + +#include "cursor-control.h" +#include "gui-element.h" +#include "gui-environment.h" +#include "mesh-scene-node.h" #include "misc.h" +#include "scene-manager.h" +#include "scene-node.h" #include "video-driver.h" #include "wchar.h" @@ -30,8 +37,30 @@ extern "C" { void init_misc (void) { + 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_export ("get-name", NULL); + 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-position!", "set-visible!", NULL); + } + + SCM + irr_drawAll (SCM wrapped_obj) + { + if (gui_environment_p (wrapped_obj)) + { + unwrap_gui_environment (wrapped_obj)->drawAll (); + } + else if (scene_manager_p (wrapped_obj)) + { + unwrap_scene_manager (wrapped_obj)->drawAll (); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot draw all elements from object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + return SCM_UNSPECIFIED; } SCM @@ -48,4 +77,47 @@ extern "C" { } } + SCM + irr_setPosition (SCM wrapped_obj, + SCM position) + { + if (cursor_control_p (wrapped_obj)) + { + return irr_gui_setPosition (wrapped_obj, position); + } + else if (scene_node_p (wrapped_obj) || mesh_scene_node_p (wrapped_obj)) + { + return irr_scene_setPosition (wrapped_obj, position); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot set position for object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + + SCM + irr_setVisible (SCM wrapped_obj, + SCM visible) + { + if (cursor_control_p (wrapped_obj)) + { + unwrap_cursor_control (wrapped_obj)->setVisible (scm_to_bool (visible)); + } + else if (gui_element_p (wrapped_obj)) + { + unwrap_gui_element (wrapped_obj)->setVisible (scm_to_bool (visible)); + } + else if (scene_node_p (wrapped_obj)) + { + unwrap_scene_node (wrapped_obj)->setVisible (scm_to_bool (visible)); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot set visibility for object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + return SCM_UNSPECIFIED; + } + }