X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fguile-irrlicht.cpp;h=7ea6f7ac7ea3ec7bbdac787cdf6f4640af1f303e;hb=a7852a8af5c3dc6a58da64a908c4f00fcbe584d1;hp=1cc0503b611356d6545ddbe4ae6bb8316aed8c12;hpb=0e0782653487ad1691d7879ff433bc5ffd7c3791;p=guile-irrlicht.git diff --git a/src/guile-irrlicht.cpp b/src/guile-irrlicht.cpp index 1cc0503..7ea6f7a 100644 --- a/src/guile-irrlicht.cpp +++ b/src/guile-irrlicht.cpp @@ -21,56 +21,222 @@ #include -#include "aabbox3d.h" #include "animated-mesh.h" #include "animated-mesh-scene-node.h" +#include "box3d.h" #include "camera-scene-node.h" #include "cursor-control.h" #include "device.h" -#include "file-archive.h" -#include "file-system.h" +#include "event-receiver.h" +#include "file-list.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 "io.h" #include "keymap.h" -#include "material-flags.h" +#include "material.h" #include "mesh.h" #include "mesh-scene-node.h" -#include "misc.h" #include "reference-counted.h" #include "scene-manager.h" #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" extern "C" { void init_guile_irrlicht (void) { - init_vertex3d (); - init_aabbox3d (); + // Init modules init_animated_mesh (); init_animated_mesh_scene_node (); + init_box3d (); init_camera_scene_node (); init_cursor_control (); init_device (); - init_file_archive (); - init_file_system (); - init_gui_element (); - init_gui_environment (); - init_gui_static_text (); + init_event_receiver (); + init_gui (); + init_io (); init_keymap (); - init_material_flag (); + init_material (); init_mesh (); init_mesh_scene_node (); - init_misc (); init_reference_counted (); init_scene_manager (); init_scene_node (); + init_scene_node_animator (); init_texture (); + init_timer (); + init_vertex3d (); init_video_driver (); + + // Shared procedures (used by two or more objects) + DEFINE_GSUBR ("draw-all", 1, 0, 0, irr_drawAll); + DEFINE_GSUBR ("get-id", 1, 1, 0, irr_getID); + DEFINE_GSUBR ("get-name", 1, 0, 0, irr_getName); + DEFINE_GSUBR ("get-position", 1, 1, 0, irr_getPosition); + 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 + 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 + irr_getID (SCM wrapped_obj, + SCM index) + { + if (file_list_p (wrapped_obj)) + { + return scm_from_uint32 (unwrap_file_list (wrapped_obj)->getID (scm_to_uint32 (index))); + } + else if (gui_element_p (wrapped_obj)) + { + return scm_from_int32 (unwrap_gui_element (wrapped_obj)->getID ()); + } + else if (scene_node_p (wrapped_obj)) + { + return scm_from_int32 (unwrap_scene_node (wrapped_obj)->getID ()); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot get id from object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + + SCM + irr_getName (SCM wrapped_obj) + { + if (video_driver_p (wrapped_obj)) + { + return scm_from_wide_char_string (unwrap_video_driver (wrapped_obj)->getName ()); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot get name from object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + + 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) + { + if (video_driver_p (wrapped_obj)) + { + return irr_video_setMaterial (wrapped_obj, material); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot set material to object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + + SCM + irr_setMaterialFlag (SCM wrapped_obj, + SCM flag, + SCM newvalue) + { + if (is_scene_node_object (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) + { + if (cursor_control_p (wrapped_obj)) + { + return irr_gui_setPosition (wrapped_obj, position); + } + else if (is_scene_node_object (wrapped_obj)) + { + return irr_scene_setPosition (wrapped_obj, position); + } + else + { + scm_error (scm_arg_type_key, NULL, "Cannot set position to object: ~S", + scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj)); + } + } + + SCM + irr_setVisible (SCM wrapped_obj, + SCM visible) + { +#define SET_VISIBLE(OBJ) OBJ->setVisible (scm_to_bool (visible)); + + if (cursor_control_p (wrapped_obj)) + { + SET_VISIBLE (unwrap_cursor_control (wrapped_obj)); + } + else if (gui_element_p (wrapped_obj)) + { + SET_VISIBLE (unwrap_gui_element (wrapped_obj)); + } + else if (is_scene_node_object (wrapped_obj)) + { + SET_VISIBLE (unwrap_scene_node (wrapped_obj)); + } + else + { + 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; } }