X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht%2Fscene.scm;h=3beff2806652fd37602e1bf16370eb03cd93bae9;hb=cc03ee884302dfeb94b5da68dd2b618c41333d5c;hp=2f2aa50c2a070b7e1a5831e70cd5220dbe7daa38;hpb=340d6bc2e11c89f4ae048d37a080a1cf371f47e6;p=guile-irrlicht.git diff --git a/irrlicht/scene.scm b/irrlicht/scene.scm index 2f2aa50..3beff28 100644 --- a/irrlicht/scene.scm +++ b/irrlicht/scene.scm @@ -26,10 +26,12 @@ #:use-module ((irrlicht bindings video) #:prefix ffi-video:) #:use-module (irrlicht util) #:export (add-animated-mesh-scene-node + add-animator! add-camera-scene-node! add-camera-scene-node-fps! add-custom-scene-node! add-octree-scene-node + create-rotation-animator get-mesh get-root-scene-node scene-draw-all @@ -51,12 +53,15 @@ 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))) +(define (add-animator! node animator) + (ffi-scene:add-animator node animator)) + (define* (add-camera-scene-node! scene-manager #:key (parent %null-pointer) @@ -67,8 +72,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 +103,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-video:smaterial->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 @@ -122,6 +146,12 @@ minimal-polys-per-node (bool->integer also-add-if-mesh-pointer-zero))) +(define (create-rotation-animator scene-manager rotation-speed) + (let ((animator (ffi-scene:create-rotation-animator + scene-manager + (ffi-core:vector3df->pointer rotation-speed)))) + (if (null-pointer? animator) #f animator))) + (define (get-mesh scene-manager filename) (let ((mesh (ffi-scene:get-mesh scene-manager (string->pointer filename)))) (if (null-pointer? mesh) #f mesh))) @@ -195,4 +225,4 @@ (define (set-position! node newpos) (ffi-scene:set-position node - (make-c-struct ffi-core:vector3df newpos))) + (ffi-core:vector3df->pointer newpos)))