X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fdevice.cpp;h=939685e025650efbdad3909c4823fea93144315a;hb=df1ada6981c0c98038ba5fe2f09993934405dff2;hp=bb43ddb702cf1ae99f04367b0595cb91d6e0a729;hpb=2806f03eafc48ec9ef02a3dc2d74133eaf11ccc1;p=guile-irrlicht.git diff --git a/src/device.cpp b/src/device.cpp index bb43ddb..939685e 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -25,9 +25,9 @@ #include "device.h" #include "dimension2d.h" #include "driver-types.h" -#include "gui-environment.h" -#include "scene-manager.h" -#include "video-driver.h" +#include "event-receiver.h" +#include "gsubr.h" +#include "timer.h" #include "wchar.h" #include "wrapped.h" @@ -37,11 +37,14 @@ extern "C" { init_device (void) { init_device_type (); - scm_c_define_gsubr ("create-device", 7, 0, 0, (scm_t_subr)irr_createDevice); - scm_c_define_gsubr ("get-gui-environment", 1, 0, 0, (scm_t_subr)irr_getGUIEnvironment); - scm_c_define_gsubr ("get-scene-manager", 1, 0, 0, (scm_t_subr)irr_getSceneManager); - scm_c_define_gsubr ("get-video-driver", 1, 0, 0, (scm_t_subr)irr_getVideoDriver); - scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption); + DEFINE_GSUBR ("create-device", 0, 0, 1, irr_createDevice); + DEFINE_GSUBR ("get-timer", 1, 0, 0, irr_getTimer); + DEFINE_GSUBR ("is-window-active?", 1, 0, 0, irr_isWindowActive); + DEFINE_GSUBR ("run", 1, 0, 0, irr_run); + DEFINE_GSUBR ("set-event-receiver!", 2, 0, 0, irr_setEventReceiver); + DEFINE_GSUBR ("set-resizable!", 2, 0, 0, irr_setResizable); + DEFINE_GSUBR ("set-window-caption!", 2, 0, 0, irr_setWindowCaption); + DEFINE_GSUBR ("yield", 1, 0, 0, irr_yield); } DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device", @@ -49,46 +52,75 @@ extern "C" { wrap_device, unwrap_device); SCM - irr_createDevice (SCM deviceType, - SCM windowSize, - SCM bits, - SCM fullscreen, - SCM stencilbuffer, - SCM vsync, - SCM receiver) + irr_createDevice (SCM rest) { + SCM device_type = scm_from_utf8_symbol ("software"); + SCM window_size = scm_list_2 (scm_from_uint32 (640), + scm_from_uint32 (480)); + SCM bits = scm_from_uint32 (16); + SCM fullscreen = SCM_BOOL_F; + SCM stencilbuffer = SCM_BOOL_F; + SCM vsync = SCM_BOOL_F; + SCM receiver = SCM_BOOL_F; + + scm_c_bind_keyword_arguments ("create-device", rest, (scm_t_keyword_arguments_flags)0, + scm_from_utf8_keyword ("device-type"), &device_type, + scm_from_utf8_keyword ("window-size"), &window_size, + scm_from_utf8_keyword ("bits"), &bits, + scm_from_utf8_keyword ("fullscreen"), &fullscreen, + scm_from_utf8_keyword ("stencilbuffer"), &stencilbuffer, + scm_from_utf8_keyword ("vsync"), &vsync, + scm_from_utf8_keyword ("receiver"), &receiver, + SCM_UNDEFINED); + irr::IrrlichtDevice* device = - irr::createDevice (scm_to_driver_type (deviceType), - scm_to_dimension2d_u32 (windowSize), + irr::createDevice (scm_to_driver_type (device_type), + scm_to_dimension2d_u32 (window_size), scm_to_uint32 (bits), scm_to_bool (fullscreen), scm_to_bool (stencilbuffer), - scm_to_bool (vsync)); + scm_to_bool (vsync), + scm_is_false (receiver) ? 0 : unwrap_event_receiver (receiver)); return wrap_device (device); } SCM - irr_getGUIEnvironment (SCM wrapped_device) + irr_getTimer (SCM wrapped_device) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + return wrap_timer (device->getTimer ()); + } + + SCM + irr_isWindowActive (SCM wrapped_device) { irr::IrrlichtDevice* device = unwrap_device (wrapped_device); - irr::gui::IGUIEnvironment* gui_environment = device->getGUIEnvironment (); - return wrap_gui_environment (gui_environment); + return scm_from_bool (device->isWindowActive ()); } SCM - irr_getSceneManager (SCM wrapped_device) + irr_run (SCM wrapped_device) { irr::IrrlichtDevice* device = unwrap_device (wrapped_device); - irr::scene::ISceneManager* scene_manager = device->getSceneManager (); - return wrap_scene_manager (scene_manager); + return scm_from_bool (device->run ()); } SCM - irr_getVideoDriver (SCM wrapped_device) + irr_setEventReceiver (SCM wrapped_device, + SCM receiver) { irr::IrrlichtDevice* device = unwrap_device (wrapped_device); - irr::video::IVideoDriver* driver = device->getVideoDriver (); - return wrap_video_driver (driver); + device->setEventReceiver (unwrap_event_receiver (receiver)); + return SCM_UNSPECIFIED; + } + + SCM + irr_setResizable (SCM wrapped_device, + SCM resize) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + device->setResizable (scm_to_bool (resize)); + return SCM_UNSPECIFIED; } SCM @@ -100,4 +132,12 @@ extern "C" { return SCM_UNSPECIFIED; } + SCM + irr_yield (SCM wrapped_device) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + device->yield (); + return SCM_UNSPECIFIED; + } + }