Merge branch 'master' of ssh://fo.am/git/groworld
This commit is contained in:
commit
0ee37bc996
10 changed files with 1074 additions and 716 deletions
|
@ -66,7 +66,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(define/public (update)
|
(define/public (update t d)
|
||||||
(when (and (key-pressed " ") (not current-twig-growing))
|
(when (and (key-pressed " ") (not current-twig-growing))
|
||||||
(set! last-pos pos)
|
(set! last-pos pos)
|
||||||
(cond (current-twig
|
(cond (current-twig
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
(set! current-twig-growing #t))))
|
(set! current-twig-growing #t))))
|
||||||
|
|
||||||
(when (and (key-pressed "f") current-twig-growing)
|
(when (and (key-pressed "f") current-twig-growing)
|
||||||
(let ((vel (vmul fwd -0.1)))
|
(let ((vel (vmul fwd (* d -3))))
|
||||||
(when
|
(when
|
||||||
(not (collide? (list pos (vadd pos vel)) (send game-view get-stones)))
|
(not (collide? (list pos (vadd pos vel)) (send game-view get-stones)))
|
||||||
(set! pos (vadd pos vel))
|
(set! pos (vadd pos vel))
|
||||||
|
|
117
plant-eyes/game-modes.ss
Normal file
117
plant-eyes/game-modes.ss
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
#lang scheme
|
||||||
|
(require scheme/class fluxus-016/fluxus "logic.ss" "view.ss" "controller.ss" "client.ss" "jabberer.ss" "list-utils.ss")
|
||||||
|
(provide (all-defined-out))
|
||||||
|
|
||||||
|
(define-struct player-info (jid pass tex pos col))
|
||||||
|
|
||||||
|
(define gui-game-mode%
|
||||||
|
(class object%
|
||||||
|
(init-field
|
||||||
|
(seed-obs '()))
|
||||||
|
|
||||||
|
(field
|
||||||
|
(players (list
|
||||||
|
(make-player-info "plant0000001@fo.am" "plant0000001"
|
||||||
|
"textures/plant0000001.png" (list-ref (list-ref seed-obs 0) 1)
|
||||||
|
(vector 0.5 1 0.5))
|
||||||
|
(make-player-info "plant0000002@fo.am" "plant0000002"
|
||||||
|
"textures/plant0000002.png" (list-ref (list-ref seed-obs 1) 1)
|
||||||
|
(vector 0.5 1 0))
|
||||||
|
(make-player-info "plant0000003@fo.am" "plant0000003"
|
||||||
|
"textures/plant0000003.png" (list-ref (list-ref seed-obs 2) 1)
|
||||||
|
(vector 0 1 0.5))
|
||||||
|
(make-player-info "plant0000004@fo.am" "plant0000004"
|
||||||
|
"textures/plant0000004.png" (list-ref (list-ref seed-obs 3) 1)
|
||||||
|
(vector 0.75 1 0.5))
|
||||||
|
(make-player-info "plant0000005@fo.am" "plant0000005"
|
||||||
|
"textures/plant0000005.png" (list-ref (list-ref seed-obs 4) 1)
|
||||||
|
(vector 0.5 1 0.75))
|
||||||
|
))
|
||||||
|
(seeds '())
|
||||||
|
(clicked -1))
|
||||||
|
|
||||||
|
(define/public (get-player-info)
|
||||||
|
(list-ref players clicked))
|
||||||
|
|
||||||
|
(define/public (setup)
|
||||||
|
(let ((c 0))
|
||||||
|
(set! seeds (map
|
||||||
|
(lambda (pi)
|
||||||
|
(with-state
|
||||||
|
(translate (vmul (vector (sin (* 2 3.141 (/ c (length players))))
|
||||||
|
(cos (* 2 3.141 (/ c (length players)))) 0) 4))
|
||||||
|
;(texture (load-texture (player-info-tex pi)))
|
||||||
|
(colour (player-info-col pi))
|
||||||
|
(set! c (+ c 1))
|
||||||
|
;(shader "shaders/toon.vert.glsl" "shaders/toon.frag.glsl")
|
||||||
|
(load-primitive "meshes/seed.obj")))
|
||||||
|
players))))
|
||||||
|
|
||||||
|
(define/public (update t d)
|
||||||
|
(for-each
|
||||||
|
(lambda (seed)
|
||||||
|
(with-primitive seed
|
||||||
|
(rotate (vector 0 1 0))))
|
||||||
|
seeds)
|
||||||
|
(cond
|
||||||
|
((mouse-button 1)
|
||||||
|
(let ((o (mouse-over)))
|
||||||
|
(cond
|
||||||
|
(o
|
||||||
|
(set! clicked (which-element o seeds 0))
|
||||||
|
(when clicked
|
||||||
|
(for-each
|
||||||
|
(lambda (seed)
|
||||||
|
(destroy seed))
|
||||||
|
seeds))
|
||||||
|
(if clicked #t #f))
|
||||||
|
(else
|
||||||
|
#f))))
|
||||||
|
(else
|
||||||
|
#f)))
|
||||||
|
|
||||||
|
(super-new)))
|
||||||
|
|
||||||
|
|
||||||
|
(define main-game-mode%
|
||||||
|
(class object%
|
||||||
|
(init-field
|
||||||
|
(world-list '()))
|
||||||
|
|
||||||
|
(field
|
||||||
|
(gl (make-object game-logic%))
|
||||||
|
(gv (make-object game-view%))
|
||||||
|
(c (make-object controller% gv))
|
||||||
|
(cl #f)
|
||||||
|
(tick-time 0)
|
||||||
|
(player #f)
|
||||||
|
(logic-tick 0.5)) ; time between logic updates
|
||||||
|
|
||||||
|
(define/public (setup pi)
|
||||||
|
(set! cl (make-object client% (player-info-jid pi) (player-info-pass pi)))
|
||||||
|
(set! player (make-object plant-logic%
|
||||||
|
(player-info-jid pi)
|
||||||
|
(player-info-pos pi)
|
||||||
|
(player-info-col pi)
|
||||||
|
(player-info-tex pi)))
|
||||||
|
(send c set-player-plant player)
|
||||||
|
(send gl add-player player)
|
||||||
|
(send c setup)
|
||||||
|
(send gv setup world-list)
|
||||||
|
(send gl setup world-list)
|
||||||
|
(send cl setup))
|
||||||
|
|
||||||
|
(define/public (update t d)
|
||||||
|
(when (< tick-time t)
|
||||||
|
|
||||||
|
|
||||||
|
(let ((messages (send gl update)))
|
||||||
|
; pass the messages to the network client
|
||||||
|
(send gv update t d (send cl update messages gl))) ; and the game view
|
||||||
|
|
||||||
|
(set! tick-time (+ t logic-tick)))
|
||||||
|
|
||||||
|
(send gv update t d '())
|
||||||
|
(send c update t d))
|
||||||
|
|
||||||
|
(super-new)))
|
|
@ -14,7 +14,7 @@
|
||||||
(define num-pickups 10)
|
(define num-pickups 10)
|
||||||
(define pickup-dist-radius 200)
|
(define pickup-dist-radius 200)
|
||||||
(define pickup-size 1)
|
(define pickup-size 1)
|
||||||
(define ornament-grow-probability 4)
|
(define ornament-grow-probability 8)
|
||||||
(define curl-amount 40)
|
(define curl-amount 40)
|
||||||
(define start-size 50)
|
(define start-size 50)
|
||||||
|
|
||||||
|
@ -219,7 +219,8 @@
|
||||||
(lambda (point found)
|
(lambda (point found)
|
||||||
(set! i (+ i 1))
|
(set! i (+ i 1))
|
||||||
; if we havent found anything yet and it's intersecting
|
; if we havent found anything yet and it's intersecting
|
||||||
(cond ((and (not found) (< (vdist point (send pickup get-pos))
|
(cond ((and (not found) (< (vdist (vadd (send plant get-pos) point)
|
||||||
|
(send pickup get-pos))
|
||||||
(+ width (send pickup get-size))))
|
(+ width (send pickup get-size))))
|
||||||
(send plant add-property (send pickup get-type))
|
(send plant add-property (send pickup get-type))
|
||||||
(send pickup pick-up) ; this will remove the pickup for us
|
(send pickup pick-up) ; this will remove the pickup for us
|
||||||
|
@ -447,7 +448,7 @@
|
||||||
(when twig
|
(when twig
|
||||||
(let
|
(let
|
||||||
((property (choose properties))
|
((property (choose properties))
|
||||||
(point-index (random (send twig get-length))))
|
(point-index (+ 1 (random (- (send twig get-length) 2)))))
|
||||||
|
|
||||||
(when (not (eq? property 'curly))
|
(when (not (eq? property 'curly))
|
||||||
(send twig add-ornament point-index
|
(send twig add-ornament point-index
|
||||||
|
@ -481,10 +482,15 @@
|
||||||
|
|
||||||
(inherit send-message)
|
(inherit send-message)
|
||||||
|
|
||||||
(define/public (setup)
|
(define/public (setup world-list)
|
||||||
(for ((i (in-range 0 num-pickups)))
|
(let ((pickups (list-ref world-list 1)))
|
||||||
(add-pickup (make-object pickup-logic% i (choose (list 'leaf 'curly 'wiggle))
|
(let ((i 0))
|
||||||
(vmul (srndvec) pickup-dist-radius)))))
|
(for-each
|
||||||
|
(lambda (pickup)
|
||||||
|
(add-pickup (make-object pickup-logic% i (choose (list 'leaf))
|
||||||
|
(list-ref pickup 1)))
|
||||||
|
(set! i (+ i 1)))
|
||||||
|
pickups))))
|
||||||
|
|
||||||
(define/public (add-player plant)
|
(define/public (add-player plant)
|
||||||
(printf "new player plant added ~a~n" (send plant get-id))
|
(printf "new player plant added ~a~n" (send plant get-id))
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
||||||
;#lang scheme/base
|
;#lang scheme/base
|
||||||
;(require fluxus-016/drflux)
|
;(require fluxus-016/drflux)
|
||||||
(require scheme/class "logic.ss" "view.ss" "controller.ss" "client.ss" "jabberer.ss" "list-utils.ss")
|
(require scheme/class "game-modes.ss" "logic.ss" "view.ss" "controller.ss" "client.ss" "jabberer.ss" "list-utils.ss")
|
||||||
|
|
||||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
; p l a n t e y e s
|
; p l a n t e y e s
|
||||||
|
@ -35,117 +35,25 @@
|
||||||
; * in the same way, the line segments can be created in any way by the logic
|
; * in the same way, the line segments can be created in any way by the logic
|
||||||
; side - eg. lsystem, or different methods per plant (or per twig even)
|
; side - eg. lsystem, or different methods per plant (or per twig even)
|
||||||
|
|
||||||
(define-struct player-info (jid pass tex pos col))
|
(define world-list (let* ((f (open-input-file "world.txt"))
|
||||||
|
(o (list (read f)(read f)(read f))))
|
||||||
(define gui-game-mode%
|
(close-input-port f)
|
||||||
(class object%
|
o))
|
||||||
(field
|
|
||||||
(players (list
|
|
||||||
(make-player-info "plant0000001@fo.am" "plant0000001"
|
|
||||||
"textures/plant0000001.png" (vector 11.682296752929688 -27.272457122802734 -2.8969409465789795) (vector 0.5 1 0.5))
|
|
||||||
(make-player-info "plant0000002@fo.am" "plant0000002"
|
|
||||||
"textures/plant0000002.png" (vector 22.92951774597168 -24.62310218811035 -4.961982727050781) (vector 0.5 1 0))
|
|
||||||
(make-player-info "plant0000003@fo.am" "plant0000003"
|
|
||||||
"textures/plant0000003.png" (vector 11.626119613647461 -24.734521865844727 -25.146560668945312) (vector 0 1 0.5))
|
|
||||||
(make-player-info "plant0000004@fo.am" "plant0000004"
|
|
||||||
"textures/plant0000004.png" (vector -18.757593154907227 -10.819361686706543 37.17854690551758)(vector 0.75 1 0.5))
|
|
||||||
(make-player-info "plant0000005@fo.am" "plant0000005"
|
|
||||||
"textures/plant0000005.png" (vector -10.964780807495117 -20.065677642822266 23.76084327697754) (vector 0.5 1 0.75))
|
|
||||||
))
|
|
||||||
(seeds '())
|
|
||||||
(clicked -1))
|
|
||||||
|
|
||||||
(define/public (get-player-info)
|
|
||||||
(list-ref players clicked))
|
|
||||||
|
|
||||||
(define/public (setup)
|
|
||||||
(let ((c 0))
|
|
||||||
(set! seeds (map
|
|
||||||
(lambda (pi)
|
|
||||||
(with-state
|
|
||||||
(translate (vmul (vector (sin (* 2 3.141 (/ c (length players))))
|
|
||||||
(cos (* 2 3.141 (/ c (length players)))) 0) 4))
|
|
||||||
;(texture (load-texture (player-info-tex pi)))
|
|
||||||
(colour (player-info-col pi))
|
|
||||||
(set! c (+ c 1))
|
|
||||||
;(shader "shaders/toon.vert.glsl" "shaders/toon.frag.glsl")
|
|
||||||
(load-primitive "meshes/seed.obj")))
|
|
||||||
players))))
|
|
||||||
|
|
||||||
(define/public (update t d)
|
|
||||||
(for-each
|
|
||||||
(lambda (seed)
|
|
||||||
(with-primitive seed
|
|
||||||
(rotate (vector 0 1 0))))
|
|
||||||
seeds)
|
|
||||||
(cond
|
|
||||||
((mouse-button 1)
|
|
||||||
(let ((o (mouse-over)))
|
|
||||||
(cond
|
|
||||||
(o
|
|
||||||
(set! clicked (which-element o seeds 0))
|
|
||||||
(when clicked
|
|
||||||
(for-each
|
|
||||||
(lambda (seed)
|
|
||||||
(destroy seed))
|
|
||||||
seeds))
|
|
||||||
(if clicked #t #f))
|
|
||||||
(else
|
|
||||||
#f))))
|
|
||||||
(else
|
|
||||||
#f)))
|
|
||||||
|
|
||||||
(super-new)))
|
|
||||||
|
|
||||||
|
|
||||||
(define main-game-mode%
|
|
||||||
(class object%
|
|
||||||
(field
|
|
||||||
(gl (make-object game-logic%))
|
|
||||||
(gv (make-object game-view%))
|
|
||||||
(c (make-object controller% gv))
|
|
||||||
(cl #f)
|
|
||||||
(tick-time 0)
|
|
||||||
(player #f)
|
|
||||||
(logic-tick 0.5)) ; time between logic updates
|
|
||||||
|
|
||||||
(define/public (setup pi)
|
|
||||||
(set! cl (make-object client% (player-info-jid pi) (player-info-pass pi)))
|
|
||||||
(set! player (make-object plant-logic%
|
|
||||||
(player-info-jid pi)
|
|
||||||
(player-info-pos pi)
|
|
||||||
(player-info-col pi)
|
|
||||||
(player-info-tex pi)))
|
|
||||||
(send c set-player-plant player)
|
|
||||||
(send gl add-player player)
|
|
||||||
(send c setup)
|
|
||||||
(send gv setup)
|
|
||||||
(send gl setup)
|
|
||||||
(send cl setup))
|
|
||||||
|
|
||||||
(define/public (update t d)
|
|
||||||
(when (< tick-time t)
|
|
||||||
|
|
||||||
|
|
||||||
(let ((messages (send gl update)))
|
|
||||||
; pass the messages to the network client
|
|
||||||
(send gv update t d (send cl update messages gl))) ; and the game view
|
|
||||||
|
|
||||||
(set! tick-time (+ t logic-tick)))
|
|
||||||
|
|
||||||
(send gv update t d '())
|
|
||||||
(send c update))
|
|
||||||
|
|
||||||
(super-new)))
|
|
||||||
|
|
||||||
(clear)
|
(clear)
|
||||||
(clear-shader-cache)
|
(clear-shader-cache)
|
||||||
|
|
||||||
(define mode 'gui)
|
(define mode 'gui)
|
||||||
(define gui (make-object gui-game-mode%))
|
(define gui (make-object gui-game-mode% (list-ref world-list 0)))
|
||||||
(define game (make-object main-game-mode%))
|
(define game (make-object main-game-mode% world-list))
|
||||||
(send gui setup)
|
(send gui setup)
|
||||||
|
|
||||||
|
;(define t 0)
|
||||||
|
;(define d 0.02)
|
||||||
|
;(define (flxtime) t)
|
||||||
|
;(define (update-time) (set! t (+ t d)))
|
||||||
|
;(define (delta) d)
|
||||||
|
|
||||||
(define (animate)
|
(define (animate)
|
||||||
(cond
|
(cond
|
||||||
((eq? mode 'gui)
|
((eq? mode 'gui)
|
||||||
|
@ -153,6 +61,9 @@
|
||||||
(send game setup (send gui get-player-info))
|
(send game setup (send gui get-player-info))
|
||||||
(set! mode 'game)))
|
(set! mode 'game)))
|
||||||
((eq? mode 'game)
|
((eq? mode 'game)
|
||||||
(send game update (flxtime) (delta)))))
|
(send game update (flxtime) (delta))))
|
||||||
|
#;(update-time))
|
||||||
|
|
||||||
(every-frame (animate))
|
(every-frame (animate))
|
||||||
|
|
||||||
|
;(start-framedump "pe7" "jpg")
|
||||||
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 46 KiB |
|
@ -15,31 +15,30 @@
|
||||||
(define wire-mode #f)
|
(define wire-mode #f)
|
||||||
(define fog-col (earth-colour))
|
(define fog-col (earth-colour))
|
||||||
(define fog-strength 0.001)
|
(define fog-strength 0.001)
|
||||||
(define max-ornaments 2) ; per twig
|
(define max-ornaments 30) ; per twig
|
||||||
(define default-grow-speed 0.5)
|
(define default-grow-speed 0.5)
|
||||||
|
|
||||||
(when audio-on (oa-start)) ;; start openAL audio
|
(when audio-on (oa-start)) ;; start openAL audio
|
||||||
|
|
||||||
(define stones-list (let* ((f (open-input-file "stones.txt"))
|
|
||||||
(o (read f)))
|
|
||||||
(close-input-port f)
|
|
||||||
o))
|
|
||||||
|
|
||||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
(define ornament-view%
|
(define ornament-view%
|
||||||
(class object%
|
(class object%
|
||||||
(init-field
|
(init-field
|
||||||
(pos (vector 0 0 0))
|
(pos (vector 0 0 0))
|
||||||
|
(sc 1)
|
||||||
|
(dir (vector 0 0 1))
|
||||||
(property 'none)
|
(property 'none)
|
||||||
(time 0))
|
(time 0))
|
||||||
|
|
||||||
(field
|
(field
|
||||||
(rot (vmul (rndvec) 360))
|
(const-scale 2)
|
||||||
|
(rot (vector 0 0 0))
|
||||||
(root (with-state
|
(root (with-state
|
||||||
(translate pos)
|
(translate pos)
|
||||||
(rotate rot)
|
(concat (maim dir (vector 0 1 0)))
|
||||||
(scale 0.01)
|
(scale (* const-scale sc))
|
||||||
|
;(shader "shaders/textoon.vert.glsl" "shaders/textoon.frag.glsl")
|
||||||
(cond
|
(cond
|
||||||
((eq? property 'wiggle)
|
((eq? property 'wiggle)
|
||||||
; (opacity 1)
|
; (opacity 1)
|
||||||
|
@ -48,8 +47,10 @@
|
||||||
(load-primitive "meshes/wiggle.obj"))
|
(load-primitive "meshes/wiggle.obj"))
|
||||||
((eq? property 'leaf)
|
((eq? property 'leaf)
|
||||||
(colour (vector 0.8 1 0.6))
|
(colour (vector 0.8 1 0.6))
|
||||||
(texture (load-texture "textures/leaf2.png"))
|
(texture (load-texture "textures/leaf.png"))
|
||||||
(load-primitive "meshes/leaf.obj"))
|
(set! rot (vector 0 0 0))
|
||||||
|
(hint-origin)
|
||||||
|
(load-primitive "meshes/leaf.obj"))
|
||||||
(else (error ""))))))
|
(else (error ""))))))
|
||||||
|
|
||||||
(define/public (update t d)
|
(define/public (update t d)
|
||||||
|
@ -57,8 +58,9 @@
|
||||||
(with-primitive root
|
(with-primitive root
|
||||||
(identity)
|
(identity)
|
||||||
(translate pos)
|
(translate pos)
|
||||||
(rotate rot)
|
(concat (maim dir (vector 0 1 0)))
|
||||||
(scale (* 0.2 time)))
|
(rotate rot)
|
||||||
|
(scale (* const-scale sc 0.2 time)))
|
||||||
(set! time (+ time (* 0.1 d)))))
|
(set! time (+ time (* 0.1 d)))))
|
||||||
|
|
||||||
(super-new)))
|
(super-new)))
|
||||||
|
@ -79,12 +81,16 @@
|
||||||
(rotate rot)
|
(rotate rot)
|
||||||
(colour (pickup-colour))
|
(colour (pickup-colour))
|
||||||
(scale 0.3)
|
(scale 0.3)
|
||||||
|
;(shader "shaders/textoon.vert.glsl" "shaders/textoon.frag.glsl")
|
||||||
(texture
|
(texture
|
||||||
(cond
|
(cond
|
||||||
((eq? type 'wiggle) (load-texture "textures/wiggle.png"))
|
((eq? type 'wiggle) (load-texture "textures/wiggle.png"))
|
||||||
((eq? type 'leaf) (load-texture "textures/leaf.png"))
|
((eq? type 'leaf) (load-texture "textures/leaf.png"))
|
||||||
((eq? type 'curly) (load-texture "textures/curl.png"))))
|
((eq? type 'curly) (load-texture "textures/curl.png"))))
|
||||||
(load-primitive "meshes/pickup.obj")))
|
(cond
|
||||||
|
((eq? type 'wiggle) (load-primitive "meshes/pickup.obj"))
|
||||||
|
((eq? type 'leaf) (load-primitive "meshes/leaf.obj"))
|
||||||
|
((eq? type 'curly) (load-primitive "meshes/pickup.obj")))))
|
||||||
(from pos)
|
(from pos)
|
||||||
(destination (vector 0 0 0))
|
(destination (vector 0 0 0))
|
||||||
(speed 0.05)
|
(speed 0.05)
|
||||||
|
@ -204,6 +210,9 @@
|
||||||
(set! ornaments (cons (list point-index
|
(set! ornaments (cons (list point-index
|
||||||
(make-object ornament-view%
|
(make-object ornament-view%
|
||||||
(get-point point-index)
|
(get-point point-index)
|
||||||
|
(get-width point-index)
|
||||||
|
(vnormalise (vsub (get-point point-index)
|
||||||
|
(get-point (- point-index 1))))
|
||||||
property))
|
property))
|
||||||
ornaments)))))
|
ornaments)))))
|
||||||
|
|
||||||
|
@ -393,7 +402,7 @@
|
||||||
"point")
|
"point")
|
||||||
(pdata-map!
|
(pdata-map!
|
||||||
(lambda (point)
|
(lambda (point)
|
||||||
(* 0.12 (+ 0.1 (rndf))))
|
(* 3 (+ 0.1 (rndf))))
|
||||||
"speed")
|
"speed")
|
||||||
(pdata-map!
|
(pdata-map!
|
||||||
(lambda (offset)
|
(lambda (offset)
|
||||||
|
@ -488,9 +497,9 @@
|
||||||
(send (cadr new-twig) get-point new-point)))
|
(send (cadr new-twig) get-point new-point)))
|
||||||
((< (vdist (vadd (send twig get-point point) offset) p) 0.1)
|
((< (vdist (vadd (send twig get-point point) offset) p) 0.1)
|
||||||
(pdata-set! "point" i (- point 1))
|
(pdata-set! "point" i (- point 1))
|
||||||
(vadd p (vmul (vnormalise (vsub (vadd (send twig get-point (- point 1)) offset) p)) speed)))
|
(vadd p (vmul (vnormalise (vsub (vadd (send twig get-point (- point 1)) offset) p)) (* speed d))))
|
||||||
(else
|
(else
|
||||||
(vadd p (vmul (vnormalise (vsub (vadd (send twig get-point point) offset) p)) speed))))))
|
(vadd p (vmul (vnormalise (vsub (vadd (send twig get-point point) offset) p)) (* speed d)))))))
|
||||||
"p" "twig" "point" "offset" "speed"))))
|
"p" "twig" "point" "offset" "speed"))))
|
||||||
|
|
||||||
(define/public (update t d)
|
(define/public (update t d)
|
||||||
|
@ -603,7 +612,7 @@
|
||||||
|
|
||||||
(stones '()))
|
(stones '()))
|
||||||
|
|
||||||
(define/public (setup)
|
(define/public (setup world-list)
|
||||||
(let ((l (make-light 'point 'free)))
|
(let ((l (make-light 'point 'free)))
|
||||||
(light-diffuse 0 (vector 0.5 0.5 0.5))
|
(light-diffuse 0 (vector 0.5 0.5 0.5))
|
||||||
(light-diffuse l (vector 1 1 1))
|
(light-diffuse l (vector 1 1 1))
|
||||||
|
@ -627,7 +636,7 @@
|
||||||
(load-primitive (list-ref stone 0)))))
|
(load-primitive (list-ref stone 0)))))
|
||||||
(with-primitive p (apply-transform) (recalc-bb)) ; apply the transform to speed up the ray tracing, don't have to tranform the ray into object space
|
(with-primitive p (apply-transform) (recalc-bb)) ; apply the transform to speed up the ray tracing, don't have to tranform the ray into object space
|
||||||
p))
|
p))
|
||||||
stones-list)))
|
(list-ref world-list 2))))
|
||||||
|
|
||||||
(define/public (get-stones)
|
(define/public (get-stones)
|
||||||
stones)
|
stones)
|
||||||
|
|
117
plant-eyes/world-build.scm
Normal file
117
plant-eyes/world-build.scm
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
(define-struct ob (type mesh (pos #:mutable) size rot (root #:mutable)))
|
||||||
|
|
||||||
|
(define stone-models (list
|
||||||
|
; "meshes/fork.obj"
|
||||||
|
"meshes/stone1.obj"
|
||||||
|
"meshes/stone2.obj"
|
||||||
|
"meshes/stone3.obj"))
|
||||||
|
|
||||||
|
(define pickup-models (list
|
||||||
|
"meshes/leaf.obj"))
|
||||||
|
|
||||||
|
(define (extract-list t l)
|
||||||
|
(foldl
|
||||||
|
(lambda (ob l)
|
||||||
|
(if (eq? (ob-type ob) t)
|
||||||
|
(cons (list
|
||||||
|
(ob-mesh ob)
|
||||||
|
(ob-pos ob)
|
||||||
|
(ob-size ob)
|
||||||
|
(ob-rot ob)) l) l))
|
||||||
|
'()
|
||||||
|
l))
|
||||||
|
|
||||||
|
(define (write-out fn s)
|
||||||
|
(let ((f (open-output-file fn)))
|
||||||
|
(write (extract-list 'seed s) f)
|
||||||
|
(write (extract-list 'pickup s) f)
|
||||||
|
(write (extract-list 'stone s) f)
|
||||||
|
(close-output-port f)))
|
||||||
|
|
||||||
|
(define (choose l)
|
||||||
|
(list-ref l (random (length l))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (init num-seeds num-pickups num-stones area size)
|
||||||
|
(append
|
||||||
|
(build-list num-seeds
|
||||||
|
(lambda (_)
|
||||||
|
(make-ob 'seed "meshes/seed.obj"
|
||||||
|
(vmul (srndvec) (* size area 0.5))
|
||||||
|
(* 0.12 50)
|
||||||
|
(vmul (rndvec) 0) 0)))
|
||||||
|
|
||||||
|
(build-list num-pickups
|
||||||
|
(lambda (_)
|
||||||
|
(make-ob 'pickup (choose pickup-models)
|
||||||
|
(vmul (srndvec) area)
|
||||||
|
0.1
|
||||||
|
(vmul (rndvec) 360) 0)))
|
||||||
|
|
||||||
|
|
||||||
|
(build-list num-stones
|
||||||
|
(lambda (_)
|
||||||
|
(make-ob 'stone (choose stone-models)
|
||||||
|
(vmul (srndvec) area)
|
||||||
|
(* size (- 1 (expt (rndf) 2)))
|
||||||
|
(vmul (rndvec) 360) 0)))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (build l)
|
||||||
|
(for-each
|
||||||
|
(lambda (ob)
|
||||||
|
(set-ob-root! ob (with-state
|
||||||
|
(cond
|
||||||
|
((eq? (ob-type ob) 'seed) (colour (vector 0 1 0)))
|
||||||
|
((eq? (ob-type ob) 'pickup) (colour (vector 1 1 0)))
|
||||||
|
((eq? (ob-type ob) 'stone) (colour (vector 1 0.5 0))))
|
||||||
|
(load-primitive (ob-mesh ob)))))
|
||||||
|
l))
|
||||||
|
|
||||||
|
(define (relax l amount)
|
||||||
|
(for-each
|
||||||
|
(lambda (ob)
|
||||||
|
(set-ob-pos! ob (foldl
|
||||||
|
(lambda (other r)
|
||||||
|
(cond ((< (vdist (ob-pos ob) (ob-pos other)) (* 5 (+ (ob-size ob) (ob-size other))))
|
||||||
|
(vadd r (vmul (vnormalise (vsub (ob-pos ob) (ob-pos other))) amount)))
|
||||||
|
(else r)))
|
||||||
|
(cond ((> (vy (ob-pos ob)) 0)
|
||||||
|
(vadd (ob-pos ob) (vector 0 (* amount -30) 0)))
|
||||||
|
(else (ob-pos ob)))
|
||||||
|
l)))
|
||||||
|
l))
|
||||||
|
|
||||||
|
(define (update l)
|
||||||
|
(for-each
|
||||||
|
(lambda (ob)
|
||||||
|
(with-primitive (ob-root ob)
|
||||||
|
(identity)
|
||||||
|
(translate (ob-pos ob))
|
||||||
|
(rotate (ob-rot ob))
|
||||||
|
(scale (ob-size ob))))
|
||||||
|
l))
|
||||||
|
|
||||||
|
|
||||||
|
(clear)
|
||||||
|
(clear-colour 0)
|
||||||
|
(define s (init 5 30 200 1 10))
|
||||||
|
(build s)
|
||||||
|
|
||||||
|
(define l (make-light 'spot 'free))
|
||||||
|
(light-diffuse 0 (vector 0 0 0))
|
||||||
|
(light-specular 0 (vector 0 0 0))
|
||||||
|
(light-diffuse l (vector 1 1 1))
|
||||||
|
(light-position l (vector 0 1000 0))
|
||||||
|
(light-specular l (vector 0.1 0.1 0.1))
|
||||||
|
|
||||||
|
(define done #f)
|
||||||
|
|
||||||
|
(define (animate)
|
||||||
|
(when (key-pressed "s") (write-out "world.txt" s))
|
||||||
|
(relax s 0.1)
|
||||||
|
(update s))
|
||||||
|
|
||||||
|
(every-frame (animate))
|
||||||
|
|
||||||
|
|
1
plant-eyes/world.txt
Normal file
1
plant-eyes/world.txt
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue