]> git.jsancho.org Git - guile-irrlicht.git/blobdiff - irrlicht.scm
Scenes management and draw GUI elements
[guile-irrlicht.git] / irrlicht.scm
index 6da6ce90d610eb00e9be290e58848fc258570089..1946da1c6b5c21c3b4247ba2f45393843ae49eaa 100644 (file)
   #:use-module (system foreign)
   #:use-module ((irrlicht bindings) #:prefix ffi:)
   #:use-module ((irrlicht bindings core) #:prefix ffi-core:)
+  #:use-module ((irrlicht bindings gui) #:prefix ffi-gui:)
   #:use-module ((irrlicht bindings video) #:prefix ffi-video:)
-  #:export (create-device
-            get-video-driver))
+  #:export (;; device
+            create-device
+            get-video-driver
+            get-gui-environment
+            get-scene-manager
+            set-window-caption!
+            device-run?
+            device-drop!
+            ;; driver
+            begin-scene
+            end-scene
+            ;; gui
+            add-static-text!
+            gui-draw-all))
 
+;; Device functions
 (define* (create-device #:optional
                         (device-type 'software)
                         (window-size '(640 480))
                        ('opengl ffi-video:EDT_OPENGL)
                        ('count ffi-video:EDT_COUNT)))
         (wsize (make-c-struct ffi-core:dimension2d window-size)))
-    (ffi:create-device driver wsize bits
-                       (if fullscreen 1 0)
-                       (if stencilbuffer 1 0)
-                       (if vsync 1 0))))
+    (let ((device (ffi:create-device driver wsize bits
+                                     (if fullscreen 1 0)
+                                     (if stencilbuffer 1 0)
+                                     (if vsync 1 0))))
+      (if (null-pointer? device) #f device))))
 
 (define (get-video-driver device)
   (ffi:get-video-driver device))
+
+(define (get-gui-environment device)
+  (ffi:get-gui-environment device))
+
+(define (get-scene-manager device)
+  (ffi:get-scene-manager device))
+
+(define (set-window-caption! device text)
+  (ffi:set-window-caption device (string->pointer text)))
+
+(define (device-run? device)
+  (if (> (ffi:run device) 0) #t #f))
+
+(define (device-drop! device)
+  (if (> (ffi:drop device) 0) #t #f))
+
+
+;; Driver functions
+(define* (begin-scene driver
+                      #:optional
+                      (back-buffer #t)
+                      (z-buffer #t)
+                      (color '(255 0 0 0))
+                      (video-data %null-pointer)
+                      (source-rect '()))
+  (ffi-video:begin-scene driver
+                         (if back-buffer 1 0)
+                         (if z-buffer 1 0)
+                         (make-c-struct ffi-video:scolor color)
+                         video-data
+                         (if (null? source-rect)
+                             %null-pointer
+                             (make-c-struct ffi-core:rect source-rect))))
+
+(define (end-scene driver)
+  (ffi-video:end-scene driver))
+
+
+;; GUI functions
+(define* (add-static-text! gui-env text rectangle
+                           #:optional
+                           (border #f)
+                           (word-wrap #t)
+                           (parent %null-pointer)
+                           (id -1)
+                           (fill-background #f))
+  (ffi-gui:add-static-text gui-env
+                           (string->pointer text)
+                           (make-c-struct ffi-core:rect rectangle)
+                           (if border 1 0)
+                           (if word-wrap 1 0)
+                           parent
+                           id
+                           (if fill-background 1 0)))
+
+(define (gui-draw-all gui-env)
+  (ffi-gui:draw-all gui-env))