wavey-wind/guile/ww.scm

157 lines
3.6 KiB
Scheme
Raw Permalink Normal View History

2024-05-01 03:20:12 +02:00
(use-modules (chickadee)
(chickadee config)
(chickadee graphics text)
(chickadee graphics phong)
(chickadee graphics engine)
(chickadee graphics model)
(chickadee graphics mesh)
(chickadee graphics light)
(chickadee graphics shader)
(chickadee graphics buffer)
(chickadee graphics polygon)
(chickadee math)
(chickadee math vector)
(chickadee math matrix)
(system repl coop-server)
(ww init)
(ww kamera)
(ww obj))
;; Hitra pomoc:
;;
;; chickadee play anim.scm --repl-server
;; ^ pozene fajl z repl serverjem v ozadju
;;
;;
(define repl (spawn-coop-repl-server))
(define stevec 0)
(define (input-handle)
(cond ((key-pressed? 'h)
(set! dX (+ dX 0.1)))
((key-pressed? 'l)
(set! dX (- dX 0.1)))))
(define (update dt)
;; REPL!
(poll-coop-repl-server repl)
;; Stevec gor
(set! stevec (+ stevec 1))
(display (string-append (number->string stevec) "\n"))
(input-handle)
(obj-anim dt))
(define rotX 0)
(define rotY 0)
(define rotZ 0)
(define dX 0)
(define dY 0)
(define dZ 0)
(define (obj-anim dt)
(set! rotX (+ rotX (/ dt 0.2) (* dt dX)))
(set! rotY (+ rotY (/ dt 0.1)))
(set! rotZ (+ rotZ (/ dt 0.5)))
(matrix4-copy! (matrix4* (matrix4-scale stevec)
(matrix4-rotate-x rotX)
(matrix4-rotate-y rotY)
(matrix4-rotate-z rotZ))
model-matrix)
(matrix4-copy! (matrix4* (matrix4-scale stevec)
(matrix4-rotate-x rotY)
(matrix4-rotate-y rotZ)
(matrix4-rotate-z rotX))
tla-matrix)
;(matrix4-scale! model-matrix stevec)
;(matrix4-mult! model-matrix model-matrix (matrix4-scale stevec))
;(matrix4-rotate-x! model-matrix rotX)
;(matrix4-rotate-y! model-matrix rotY)
;(matrix4-rotate-z! model-matrix rotZ))
)
(define (key-press key modifiers repeat?)
(cond
((eq? key 'q)
(abort-game))
((eq? key 'k)
(set! obj (cons (ustvari-objekt stevec) obj)))
((eq? key 'r)
(load))))
(define (reset-stevec!)
(set! stevec 1))
(define tla-matrix (make-identity-matrix4))
(define position (vec3 0.0 0.0 -4.0))
(define obj #f)
(define tla #f)
(define nebo #f)
(define wireframe-shader
(load-shader (scope-datadir "shaders/path-stroke-vert.glsl")
(scope-datadir "shaders/path-stroke-frag.glsl")))
(define (draw alpha)
(with-graphics-state
((g:polygon-mode line-polygon-mode))
(with-projection
projection
;; objekti
(map (lambda (o)
(draw-mesh o
#:model-matrix model-matrix
#:view-matrix view-matrix
#:camera-position position
#:lights (list (ustvari-luc))))
obj)
;; "tla"
(draw-mesh tla
#:model-matrix tla-matrix
#:view-matrix view-matrix
#:camera-position position
#:lights (list (ustvari-luc)))
;; wireframe test?
(map
(lambda (p)
(shader-apply
my-shader
(primitive-vertex-array p)))
(mesh-primitives tla)))))
;; :( ne dela?
(define (load)
;; Moramo pogledat model
(poglej! position)
(reset-stevec!)
(ustvari-luc)
(set! obj (list (ustvari-objekt stevec)))
(set! tla (ustvari-tla))
(set! nebo (ustvari-nebo)))
(run-game
#:draw draw
#:update update
#:key-press key-press
#:load load
;; Okno init
#:window-resizable? #t
#:window-title "wavey wind"
#:clear-color (rgb #xFFFFFF))
;(reset-stevec!)