]> git.jsancho.org Git - guile-irrlicht.git/commitdiff
Get irrlicht objects
authorJavier Sancho <jsf@jsancho.org>
Tue, 5 May 2020 07:14:57 +0000 (09:14 +0200)
committerJavier Sancho <jsf@jsancho.org>
Tue, 5 May 2020 07:14:57 +0000 (09:14 +0200)
Makefile.am
irrlicht.scm
irrlicht/gui.scm [new file with mode: 0644]
irrlicht/irr.scm
irrlicht/scene.scm [new file with mode: 0644]
src/device.cpp
src/device.h
src/gui-environment.cpp
src/gui-environment.h
src/scene-manager.cpp
src/scene-manager.h

index 41f298df221338239da01ae4bfffd1a98132bcac..463dccb8a31e264470660e3cd02f03dcfb8b0d89 100644 (file)
@@ -105,5 +105,7 @@ SOURCES = \
   irrlicht.scm \
   irrlicht/base.scm \
   irrlicht/foreign.scm \
+  irrlicht/gui.scm \
   irrlicht/irr.scm \
+  irrlicht/scene.scm \
   irrlicht/video.scm
index 221171ccbb7d4b763641c1b20df508d38131aefc..f43707d959c185c751480b5d4f7216669b45b7cb 100644 (file)
@@ -21,5 +21,7 @@
 (define-module (irrlicht)
   #:use-module (irrlicht irr)
   #:re-export (create-device
+               get-gui-environment
+               get-scene-manager
                get-video-driver
                set-window-caption!))
diff --git a/irrlicht/gui.scm b/irrlicht/gui.scm
new file mode 100644 (file)
index 0000000..70a2f97
--- /dev/null
@@ -0,0 +1,30 @@
+;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+;;;
+;;; This file is part of guile-irrlicht.
+;;;
+;;; Guile-irrlicht is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU Lesser General Public License as
+;;; published by the Free Software Foundation; either version 3 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; Guile-irrlicht is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with guile-irrlicht.  If not, see
+;;; <http://www.gnu.org/licenses/>.
+
+
+(define-module (irrlicht gui)
+  #:use-module (oop goops)
+  #:use-module (irrlicht base)
+  #:use-module (irrlicht foreign))
+
+
+;; IVideoDriver
+(define-class <gui-environment> (<irrlicht-base>))
+
+(export <gui-environment>)
index 569a7432bb41d58dd5864e59eeb7cc793d1c2421..f69701c278842ea306e13948f05d8dd0a7a73490 100644 (file)
@@ -22,6 +22,8 @@
   #:use-module (oop goops)
   #:use-module (irrlicht base)
   #:use-module (irrlicht foreign)
+  #:use-module (irrlicht gui)
+  #:use-module (irrlicht scene)
   #:use-module (irrlicht video))
 
 
      vsync
      (irr-pointer receiver))))
 
+(define-method (get-gui-environment (device <irrlicht-device>))
+  (make <gui-environment>
+    #:irr-pointer (irr_IrrlichtDevice_getGUIEnvironment (irr-pointer device))))
+
+(define-method (get-scene-manager (device <irrlicht-device>))
+  (make <scene-manager>
+    #:irr-pointer (irr_IrrlichtDevice_getSceneManager (irr-pointer device))))
+
 (define-method (get-video-driver (device <irrlicht-device>))
-  (make <video-driver> #:irr-pointer (irr_IrrlichtDevice_getVideoDriver (irr-pointer device))))
+  (make <video-driver>
+    #:irr-pointer (irr_IrrlichtDevice_getVideoDriver (irr-pointer device))))
 
 (define-method (set-window-caption! (device <irrlicht-device>) text)
   (irr_IrrlichtDevice_setWindowCaption (irr-pointer device) text))
 
-(export create-device get-video-driver set-window-caption!)
+(export create-device get-gui-environment get-scene-manager get-video-driver set-window-caption!)
diff --git a/irrlicht/scene.scm b/irrlicht/scene.scm
new file mode 100644 (file)
index 0000000..44a5233
--- /dev/null
@@ -0,0 +1,30 @@
+;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
+;;; Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
+;;;
+;;; This file is part of guile-irrlicht.
+;;;
+;;; Guile-irrlicht is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU Lesser General Public License as
+;;; published by the Free Software Foundation; either version 3 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; Guile-irrlicht is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with guile-irrlicht.  If not, see
+;;; <http://www.gnu.org/licenses/>.
+
+
+(define-module (irrlicht scene)
+  #:use-module (oop goops)
+  #:use-module (irrlicht base)
+  #:use-module (irrlicht foreign))
+
+
+;; IVideoDriver
+(define-class <scene-manager> (<irrlicht-base>))
+
+(export <scene-manager>)
index b9ce376dbe93419e42bad291038f785e47914d8e..1b06a48c59cb551d204f4991e52fea6627fcd93a 100644 (file)
@@ -40,6 +40,10 @@ extern "C" {
   {
     init_device_type ();
     DEFINE_GSUBR ("irr_createDevice", 7, 0, 0, irr_createDevice);
+    DEFINE_GSUBR ("irr_IrrlichtDevice_getGUIEnvironment", 1, 0, 0,
+                  irr_IrrlichtDevice_getGUIEnvironment);
+    DEFINE_GSUBR ("irr_IrrlichtDevice_getSceneManager", 1, 0, 0,
+                  irr_IrrlichtDevice_getSceneManager);
     DEFINE_GSUBR ("irr_IrrlichtDevice_getVideoDriver", 1, 0, 0,
                   irr_IrrlichtDevice_getVideoDriver);
     DEFINE_GSUBR ("irr_IrrlichtDevice_setWindowCaption", 2, 0, 0,
@@ -76,6 +80,21 @@ extern "C" {
     return scm_from_pointer ((void*)device, NULL);
   }
 
+  SCM
+  irr_IrrlichtDevice_getGUIEnvironment (SCM device){
+    gui::IGUIEnvironment* gui_env =
+      ((IrrlichtDevice*)scm_to_pointer (device))->getGUIEnvironment ();
+    return scm_from_pointer ((void*)gui_env, NULL);
+  }
+
+  SCM
+  irr_IrrlichtDevice_getSceneManager (SCM device)
+  {
+    scene::ISceneManager* manager =
+      ((IrrlichtDevice*)scm_to_pointer (device))->getSceneManager ();
+    return scm_from_pointer ((void*)manager, NULL);
+  }
+
   SCM
   irr_IrrlichtDevice_getVideoDriver (SCM device)
   {
index 3a082bee417407803af81d3a30f6c343927b52d3..d95e458fecf120b1ae9b2aa16eddab30fdbda2ea 100644 (file)
@@ -43,6 +43,12 @@ extern "C" {
                     SCM vsync,
                     SCM receiver);
 
+  SCM
+  irr_IrrlichtDevice_getGUIEnvironment (SCM device);
+
+  SCM
+  irr_IrrlichtDevice_getSceneManager (SCM device);
+
   SCM
   irr_IrrlichtDevice_getVideoDriver (SCM device);
 
index 87fe38d4939005940102e743d99d5d06d9bc9cb3..df43fc63d5359ef1b4ca5aef614cf8fbc2886a9f 100644 (file)
@@ -54,7 +54,6 @@ extern "C" {
     DEFINE_GSUBR ("add-static-text!", 3, 0, 1, irr_gui_addStaticText);
     DEFINE_GSUBR ("add-window!", 2, 0, 1, irr_gui_addWindow);
     DEFINE_GSUBR ("get-built-in-font", 1, 0, 0, irr_gui_getBuiltInFont);
-    DEFINE_GSUBR ("get-gui-environment", 1, 0, 0, irr_getGUIEnvironment);
     DEFINE_GSUBR ("get-skin", 1, 0, 0, irr_gui_getSkin);
   }
 
@@ -62,22 +61,6 @@ extern "C" {
                        init_gui_environment_type, gui_environment_p,
                        wrap_gui_environment, unwrap_gui_environment);
 
-  SCM
-  irr_getGUIEnvironment (SCM wrapped_obj)
-  {
-    irr::gui::IGUIEnvironment* gui_environment;
-    if (device_p (wrapped_obj))
-      {
-        gui_environment = unwrap_device (wrapped_obj)->getGUIEnvironment ();
-      }
-    else
-      {
-        scm_error (scm_arg_type_key, NULL, "Cannot get GUI environment from object: ~S",
-                   scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj));
-      }
-    return wrap_gui_environment (gui_environment);
-  }
-
   SCM
   irr_gui_addImage (SCM wrapped_gui_environment,
                     SCM image,
index 5c6da7ecefdf66865915894219c8d6dcdb3327f3..b26f542e6b344d53526a379987008caa87fe7c62 100644 (file)
@@ -34,9 +34,6 @@ extern "C" {
   DECLARE_WRAPPED_TYPE (irr::gui::IGUIEnvironment*, init_gui_environment_type,
                         gui_environment_p, wrap_gui_environment, unwrap_gui_environment);
 
-  SCM
-  irr_getGUIEnvironment (SCM wrapped_obj);
-
   SCM
   irr_gui_addImage (SCM wrapped_gui_environment,
                     SCM image,
index d17d65c297fd2876749356410542b1c6174a0b16..dfa58e5b03b18e23fd5fefa21a98fbf7fcfacf16 100644 (file)
@@ -56,7 +56,6 @@ extern "C" {
     DEFINE_GSUBR ("create-rotation-animator", 2, 0, 0, irr_scene_createRotationAnimator);
     DEFINE_GSUBR ("get-mesh", 2, 0, 0, irr_scene_getMesh);
     DEFINE_GSUBR ("get-root-scene-node", 1, 0, 0, irr_scene_getRootSceneNode);
-    DEFINE_GSUBR ("get-scene-manager", 1, 0, 0, irr_getSceneManager);
   }
 
   DEFINE_WRAPPED_TYPE (irr::scene::ISceneManager*, "scene-manager",
@@ -480,20 +479,4 @@ extern "C" {
     return wrap_scene_node (smgr->getRootSceneNode ());
   }
 
-  SCM
-  irr_getSceneManager (SCM wrapped_obj)
-  {
-    irr::scene::ISceneManager* scene_manager;
-    if (device_p (wrapped_obj))
-      {
-        scene_manager = unwrap_device (wrapped_obj)->getSceneManager ();
-      }
-    else
-      {
-        scm_error (scm_arg_type_key, NULL, "Cannot get scene manager from object: ~S",
-                   scm_list_1 (wrapped_obj), scm_list_1 (wrapped_obj));
-      }
-    return wrap_scene_manager (scene_manager);
-  }
-
 }
index ebd81cfb8e3c5ffccf012f59c414f791eff74303..a400e2705743a58ab2a1e967a86b6997519ed239 100644 (file)
@@ -90,9 +90,6 @@ extern "C" {
   SCM
   irr_scene_getRootSceneNode (SCM wrapped_scene_manager);
 
-  SCM
-  irr_getSceneManager (SCM wrapped_obj);
-
 }
 
 #endif