X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fguile-irrlicht.cpp;h=d0560c11caebf4f5982a07c83b22916e08ec4c3e;hb=8acb4684a364e62389afc512304e6270d9b67244;hp=f81cff7c73730aeba74dc477fd5c8496da62b8f9;hpb=a07c344063e6dca568add5f022c7aab495061d11;p=guile-irrlicht.git diff --git a/src/guile-irrlicht.cpp b/src/guile-irrlicht.cpp index f81cff7..d0560c1 100644 --- a/src/guile-irrlicht.cpp +++ b/src/guile-irrlicht.cpp @@ -30,13 +30,14 @@ #include "event-receiver.h" #include "file-archive.h" #include "file-system.h" +#include "gsubr.h" #include "gui-element.h" #include "gui-environment.h" +#include "gui-image.h" #include "gui-static-text.h" #include "guile-irrlicht.h" #include "keymap.h" #include "material.h" -#include "material-flags.h" #include "mesh.h" #include "mesh-scene-node.h" #include "reference-counted.h" @@ -65,10 +66,10 @@ extern "C" { init_file_system (); init_gui_element (); init_gui_environment (); + init_gui_image (); init_gui_static_text (); init_keymap (); init_material (); - init_material_flag (); init_mesh (); init_mesh_scene_node (); init_reference_counted (); @@ -80,13 +81,12 @@ extern "C" { 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-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-position!", - "set-visible!", NULL); + DEFINE_GSUBR ("draw-all", 1, 0, 0, irr_drawAll); + 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 @@ -137,6 +137,24 @@ extern "C" { } } + SCM + irr_setMaterialFlag (SCM wrapped_obj, + SCM flag, + SCM newvalue) + { + if (animated_mesh_scene_node_p (wrapped_obj) || + mesh_scene_node_p (wrapped_obj) || + scene_node_p (wrapped_obj)) + { + return irr_scene_ISceneNode_setMaterialFlag (wrapped_obj, flag, newvalue); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot set material flag to object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + SCM irr_setPosition (SCM wrapped_obj, SCM position) @@ -151,7 +169,7 @@ extern "C" { } else { - scm_error (scm_arg_type_key, NULL, "Cannot set position for object: ~S", + scm_error (scm_arg_type_key, NULL, "Cannot set position to object: ~S", scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); } } @@ -160,21 +178,23 @@ 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)) { - unwrap_scene_node (wrapped_obj)->setVisible (scm_to_bool (visible)); + SET_VISIBLE (unwrap_scene_node (wrapped_obj)); } else { - scm_error (scm_arg_type_key, NULL, "Cannot set visibility for object: ~S", + scm_error (scm_arg_type_key, NULL, "Cannot set visibility to object: ~S", scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); } return SCM_UNSPECIFIED;