X-Git-Url: https://git.jsancho.org/?p=guile-irrlicht.git;a=blobdiff_plain;f=irrlicht%2Fscene.scm;h=7e9b8d23dddcc1cc7d22c2503600e5cb009d7e59;hp=2f2aa50c2a070b7e1a5831e70cd5220dbe7daa38;hb=2a0373b3eda4407e2e41a4e8fc3a7333bb789a89;hpb=24f7faa67e7e65ca3f591864d2f6f0f7d71389a0 diff --git a/irrlicht/scene.scm b/irrlicht/scene.scm index 2f2aa50..7e9b8d2 100644 --- a/irrlicht/scene.scm +++ b/irrlicht/scene.scm @@ -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))) @@ -98,15 +98,34 @@ (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 @@ -195,4 +214,4 @@ (define (set-position! node newpos) (ffi-scene:set-position node - (make-c-struct ffi-core:vector3df newpos))) + (ffi-core:vector3df->pointer newpos)))