(create-device
#:device-type 'software
#:window-size '(640 480)))
-(when (not device)
- (exit #f))
(set-window-caption! device "Hello World! - Irrlicht Engine Demo")
;; load a Quake2 model
(define mesh (get-mesh scene-manager "media/sydney.md2"))
-(when (is-empty? mesh)
- (drop! device)
- (exit #f))
-
(define node (add-animated-mesh-scene-node! scene-manager mesh))
-(when node
- (set-material-flag! node 'lighting #f)
- (set-md2-animation! node 'stand)
- (set-material-texture! node 0 (get-texture driver "media/sydney.bmp")))
+(set-material-flag! node 'lighting #f)
+(set-md2-animation! node 'stand)
+(set-material-texture! node 0 (get-texture driver "media/sydney.bmp"))
;; place camera
(add-camera-scene-node! scene-manager #:position '(0 30 -40) #:lookat '(0 5 0))
get-scene-manager
get-texture
get-video-driver
- is-empty?
is-window-active?
make-box3d
make-material
#:use-module (system foreign)
#:export (<irrlicht-base>
irr-class
- irr-pointer
- is-empty?))
+ irr-pointer))
(define-class <irrlicht-base> ()
(irr-class #:init-value "")
;; in multiple inherited classes
(define-method (irr-class (obj <irrlicht-base>))
(slot-ref obj 'irr-class))
-
-(define-method (is-empty? (obj <irrlicht-base>))
- (equal? (irr-pointer obj) %null-pointer))
"In procedure create-device: Wrong type argument (expecting <event-receiver>):"
receiver))
- (make <irrlicht-device>
- #:irr-pointer
- ((get-irrlicht-proc "createDevice")
- device-type
- window-size
- bits
- fullscreen
- stencilbuffer
- vsync
- receiver)))
+ (let* ((createDevice (get-irrlicht-proc "createDevice"))
+ (device-pointer (createDevice device-type window-size bits fullscreen stencilbuffer
+ vsync receiver)))
+ (cond ((null-pointer? device-pointer)
+ (error "In procedure create-device: Device cannot be created"))
+ (else
+ (make <irrlicht-device> #:irr-pointer device-pointer)))))
(define-method (get-cursor-control (device <irrlicht-device>))
(let ((getCursorControl (get-irrlicht-proc "getCursorControl" device)))
(define-module (irrlicht foreign)
+ #:use-module (system foreign)
#:use-module (irrlicht base)
- #:export (get-irrlicht-proc))
+ #:export (get-irrlicht-proc
+ null-pointer?))
;; We use a hash table to store foreign irrlicht methods related with their
;; classes
new-proc))
(else
proc))))
+
+(define (null-pointer? pointer)
+ (eq? pointer %null-pointer))
(rotation '(0 0 0))
(scale '(1 1 1))
(also-add-if-mesh-pointer-zero #f))
- (make <animated-mesh-scene-node>
- #:irr-pointer
- ((get-irrlicht-proc "addAnimatedMeshSceneNode" scene-manager parent)
- scene-manager
- mesh
- parent
- id
- position
- rotation
- scale
- also-add-if-mesh-pointer-zero))))
+ (let* ((addAnimatedMeshSceneNode (get-irrlicht-proc "addAnimatedMeshSceneNode"
+ scene-manager
+ parent))
+ (node-pointer (addAnimatedMeshSceneNode scene-manager mesh parent id position
+ rotation scale also-add-if-mesh-pointer-zero)))
+ (cond ((null-pointer? node-pointer)
+ (error "In procedure add-animated-mesh-scene-node!: Scene node cannot be created"))
+ (else
+ (make <animated-mesh-scene-node> #:irr-pointer node-pointer))))))
(define-method (add-camera-scene-node! (scene-manager <scene-manager>) . rest)
(let-keywords rest #f
scene-manager))
(define-method (get-mesh (scene-manager <scene-manager>) filename)
- (make <animated-mesh>
- #:irr-pointer
- ((get-irrlicht-proc "getMesh" scene-manager)
- scene-manager
- filename)))
+ (let* ((getMesh (get-irrlicht-proc "getMesh" scene-manager))
+ (mesh-pointer (getMesh scene-manager filename)))
+ (cond ((null-pointer? mesh-pointer)
+ (error "In procedure get-mesh: Mesh cannot be created"))
+ (else
+ (make <animated-mesh> #:irr-pointer mesh-pointer)))))
(define-method (get-root-scene-node (scene-manager <scene-manager>))
(let ((getRootSceneNode (get-irrlicht-proc "getRootSceneNode" scene-manager)))