]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - irrlicht/scene.scm
Bindings refactor
[guile-irrlicht.git] / irrlicht / scene.scm
index 2f2aa50c2a070b7e1a5831e70cd5220dbe7daa38..7e9b8d23dddcc1cc7d22c2503600e5cb009d7e59 100644 (file)
@@ -51,9 +51,9 @@
                mesh
                parent
                id
-               (make-c-struct ffi-core:vector3df position)
-               (make-c-struct ffi-core:vector3df rotation)
-               (make-c-struct ffi-core:vector3df scale)
+               (ffi-core:vector3df->pointer position)
+               (ffi-core:vector3df->pointer rotation)
+               (ffi-core:vector3df->pointer scale)
                (bool->integer also-add-if-mesh-pointer-zero))))
     (if (null-pointer? node) #f node)))
 
@@ -67,8 +67,8 @@
   (let ((camera (ffi-scene:add-camera-scene-node
                  scene-manager
                  parent
-                 (make-c-struct ffi-core:vector3df position)
-                 (make-c-struct ffi-core:vector3df lookat)
+                 (ffi-core:vector3df->pointer position)
+                 (ffi-core:vector3df->pointer lookat)
                  id
                  (bool->integer make-active))))
     (if (null-pointer? camera) #f camera)))
    (bool->integer invert-mouse)
    (bool->integer make-active)))
 
-(define (add-custom-scene-node! parent
-                                scene-manager
-                                id
-                                custom-render)
-  (ffi-scene:add-custom-scene-node
-   parent
-   scene-manager
-   id
-   (procedure->pointer void custom-render '())))
+(define* (add-custom-scene-node! scene-manager
+                                 render
+                                 get-bounding-box
+                                 get-material-count
+                                 get-material
+                                 #:key
+                                 (parent %null-pointer)
+                                 (id -1)
+                                 (position '(0 0 0))
+                                 (rotation '(0 0 0))
+                                 (scale '(1 1 1)))
+  (let ((c-get-bounding-box
+         (lambda ()
+           (ffi-core:aabbox3df->pointer (get-bounding-box))))
+        (c-get-material
+         (lambda (i)
+           (ffi-core:material->pointer (get-material i)))))
+    (ffi-scene:add-custom-scene-node
+     scene-manager
+     parent
+     id
+     (ffi-core:vector3df->pointer position)
+     (ffi-core:vector3df->pointer rotation)
+     (ffi-core:vector3df->pointer scale)
+     (procedure->pointer void render '())
+     (procedure->pointer '* c-get-bounding-box '())
+     (procedure->pointer uint32 get-material-count '())
+     (procedure->pointer '* c-get-material (list uint32)))))
 
 (define* (add-octree-scene-node scene-manager mesh
                                 #:key
 (define (set-position! node newpos)
   (ffi-scene:set-position
    node
-   (make-c-struct ffi-core:vector3df newpos)))
+   (ffi-core:vector3df->pointer newpos)))