X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=irrlicht%2Fscene.scm;h=65f1e9b6e4e4e37df5eb5aed6a20a8581feb3342;hb=3bb58c2b45af12c0f9c9eac648e67ac6fa90e104;hp=25352005aed785664215afa9ed9687cb41bf2a32;hpb=d7e2210af78f247a1422fe095c047982631ce95a;p=guile-irrlicht.git diff --git a/irrlicht/scene.scm b/irrlicht/scene.scm index 2535200..65f1e9b 100644 --- a/irrlicht/scene.scm +++ b/irrlicht/scene.scm @@ -23,9 +23,9 @@ #:use-module (ice-9 optargs) #:use-module (irrlicht base) #:use-module (irrlicht foreign) - #:use-module (irrlicht io) - #:use-module (irrlicht irr) - #:use-module (irrlicht video)) + #:use-module ((irrlicht io) #:select ()) + #:use-module ((irrlicht irr) #:select ( )) + #:use-module ((irrlicht video) #:select ())) ;; IMesh @@ -104,6 +104,17 @@ #:jump-speed jump-speed #:invert-mouse invert-mouse #:make-active make-active)))) +(define-method (add-cube-scene-node! (scene-manager ) . rest) + (let-keywords rest #f + ((size 10) + (parent (make )) + (id -1) + (position '(0 0 0)) + (rotation '(0 0 0)) + (scale '(1 1 1))) + (let ((addCubeSceneNode (get-irrlicht-proc "addCubeSceneNode" scene-manager parent))) + (addCubeSceneNode scene-manager size parent id position rotation scale)))) + (define-method (add-custom-scene-node! (scene-manager ) proc-render proc-get-bounding-box proc-get-material-count proc-get-material . rest) @@ -153,6 +164,27 @@ (let ((addSphereSceneNode (get-irrlicht-proc "addSphereSceneNode" scene-manager parent))) (addSphereSceneNode scene-manager radius poly-count parent id position rotation scale)))) +(define-method (create-fly-circle-animator (scene-manager ) . rest) + (let-keywords rest #f + ((center '(0 0 0)) + (radius 100) + (speed 0.001) + (direction '(0 1 0)) + (start-position 0) + (radius-ellipsoid 0)) + (let ((createFlyCircleAnimator (get-irrlicht-proc "createFlyCircleAnimator" scene-manager))) + (createFlyCircleAnimator scene-manager center radius speed direction start-position + radius-ellipsoid)))) + +(define-method (create-fly-straight-animator (scene-manager ) + start-point end-point time-for-way . rest) + (let-keywords rest #f + ((loop #f) + (pingpong #f)) + (let ((createFlyStraightAnimator (get-irrlicht-proc "createFlyStraightAnimator" scene-manager))) + (createFlyStraightAnimator scene-manager start-point end-point time-for-way + loop pingpong)))) + (define-method (create-rotation-animator (scene-manager ) rotation-speed) (let ((createRotationAnimator (get-irrlicht-proc "createRotationAnimator" scene-manager))) (createRotationAnimator scene-manager rotation-speed))) @@ -173,9 +205,10 @@ (let ((getRootSceneNode (get-irrlicht-proc "getRootSceneNode" scene-manager))) (getRootSceneNode scene-manager))) -(export add-animated-mesh-scene-node! add-camera-scene-node! +(export add-animated-mesh-scene-node! add-cube-scene-node! add-camera-scene-node! add-camera-scene-node-fps! add-custom-scene-node! add-octree-scene-node! - add-sphere-scene-node! create-rotation-animator draw-all get-root-scene-node get-mesh) + add-sphere-scene-node! create-fly-circle-animator create-fly-straight-animator + create-rotation-animator draw-all get-root-scene-node get-mesh) ;; ISceneNode @@ -190,6 +223,10 @@ (let ((getAbsoluteTransformation (get-irrlicht-proc "getAbsoluteTransformation" node))) (getAbsoluteTransformation node))) +(define-method (get-position (node )) + (let ((getPosition (get-irrlicht-proc "getPosition" node))) + (getPosition node))) + (define-method (set-material-flag! (node ) flag new-value) ((get-irrlicht-proc "setMaterialFlag" node) node @@ -206,20 +243,36 @@ (let ((setPosition (get-irrlicht-proc "setPosition" node))) (setPosition node new-pos))) -(export add-animator! get-absolute-transformation set-material-flag! - set-material-texture! set-position!) +(define-method (set-rotation! (node ) rotation) + (let ((setRotation (get-irrlicht-proc "setRotation" node))) + (setRotation node rotation))) + +(define-method (set-scale! (node ) scale) + (let ((setScale (get-irrlicht-proc "setScale" node))) + (setScale node scale))) + +(export add-animator! get-absolute-transformation get-position set-material-flag! + set-material-texture! set-position! set-rotation! set-scale!) ;; IAnimatedMeshSceneNode (define-class () (irr-class #:init-value "IAnimatedMeshSceneNode")) +(define-method (set-animation-speed! (node ) frames-per-second) + (let ((setAnimationSpeed (get-irrlicht-proc "setAnimationSpeed" node))) + (setAnimationSpeed node frames-per-second))) + +(define-method (set-frame-loop! (node ) begin end) + (let ((setFrameLoop (get-irrlicht-proc "setFrameLoop" node))) + (setFrameLoop node begin end))) + (define-method (set-md2-animation! (node ) anim) ((get-irrlicht-proc "setMD2Animation" node) node anim)) -(export set-md2-animation!) +(export set-animation-speed! set-frame-loop! set-md2-animation!) ;; ICameraSceneNode