Merge branch 'master' of ssh://dave@fo.am/var/git/groworld
This commit is contained in:
commit
a2d5a7cf02
3 changed files with 0 additions and 206 deletions
|
@ -1,164 +0,0 @@
|
||||||
;#lang scheme/base
|
|
||||||
;(require fluxus-016/drflux)
|
|
||||||
(require scheme/class
|
|
||||||
"logic.ss"
|
|
||||||
"view.ss"
|
|
||||||
"controller.ss"
|
|
||||||
"client.ss"
|
|
||||||
"jabberer.ss"
|
|
||||||
"list-utils.ss")
|
|
||||||
|
|
||||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
; p l a n t e y e s
|
|
||||||
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
; notes:
|
|
||||||
;
|
|
||||||
; * keeping with a view/logic separation, although this is quite different to
|
|
||||||
; the hexagon game. the main advantages:
|
|
||||||
; - just a divide and conquer strategy for staying sane
|
|
||||||
; - able to debug the logic without the view, or vice versa
|
|
||||||
; - the logic can be ticked at a lower frequency - or even different
|
|
||||||
; parts at different rates, whereas the view needs ticking every frame
|
|
||||||
;
|
|
||||||
; * need to try to keep all the intensive 'every thing vs every thing' checking
|
|
||||||
; in the logic side, where it can be done over many frames (i'm thinking the
|
|
||||||
; lags involved with things like nutrients getting absorbed may not matter
|
|
||||||
; too much in this game)
|
|
||||||
;
|
|
||||||
; * using a message passing system to formalise the passing of information on
|
|
||||||
; the logic side. this makes it possible to have objects sending messages
|
|
||||||
; at any point, and have them automatically collected up and dispatched to
|
|
||||||
; the view
|
|
||||||
;
|
|
||||||
; * these messages are also converted to xmpp messages and sent out over the
|
|
||||||
; network
|
|
||||||
;
|
|
||||||
; * line segments are computed in the logic side, and can be represented any
|
|
||||||
; way by the view - maybe the players plant will be geometry and everyone
|
|
||||||
; elses will be ribbons (stoopid LOD)
|
|
||||||
;
|
|
||||||
; * 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)
|
|
||||||
|
|
||||||
(define-struct player-info (jid pass tex pos col))
|
|
||||||
|
|
||||||
(define gui-game-mode%
|
|
||||||
(class object%
|
|
||||||
(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-shader-cache)
|
|
||||||
|
|
||||||
(define mode 'gui)
|
|
||||||
(define gui (make-object gui-game-mode%))
|
|
||||||
(define game (make-object main-game-mode%))
|
|
||||||
(send gui setup)
|
|
||||||
|
|
||||||
(define (animate)
|
|
||||||
(cond
|
|
||||||
((eq? mode 'gui)
|
|
||||||
(when (send gui update (flxtime) (delta))
|
|
||||||
(send game setup (send gui get-player-info))
|
|
||||||
(set! mode 'game)))
|
|
||||||
((eq? mode 'game)
|
|
||||||
(send game update (flxtime) (delta)))))
|
|
||||||
|
|
||||||
(every-frame (animate))
|
|
|
@ -1,42 +0,0 @@
|
||||||
(define particle-count 10000)
|
|
||||||
|
|
||||||
; init one particle
|
|
||||||
(define (init n)
|
|
||||||
(pdata-set "p" n (vector 0 0 0))
|
|
||||||
(pdata-set "vel" n (vmul (vsub (vector (flxrnd) (flxrnd) (flxrnd))
|
|
||||||
(vector 0.5 0.5 0.5)) 0.1))
|
|
||||||
(pdata-set "c" n (vector (flxrnd) (flxrnd) 1)))
|
|
||||||
|
|
||||||
; init some random particles
|
|
||||||
(define (initsome n)
|
|
||||||
(cond ((not (zero? n))
|
|
||||||
(init (random particle-count))
|
|
||||||
(initsome (- n 1)))))
|
|
||||||
|
|
||||||
(define (animate)
|
|
||||||
(with-primitive particles
|
|
||||||
(initsome 100)
|
|
||||||
; pdata-ops are a bit like simple pfuncs -
|
|
||||||
; they are both similar experiments, pfuncs
|
|
||||||
; will be the way it works in the future
|
|
||||||
(pdata-op "+" "vel" (vector 0 -0.002 0))
|
|
||||||
(pdata-op "+" "p" "vel")))
|
|
||||||
|
|
||||||
(clear)
|
|
||||||
(show-fps 1)
|
|
||||||
(hint-none)
|
|
||||||
(hint-points)
|
|
||||||
(point-width 4)
|
|
||||||
(hint-anti-alias)
|
|
||||||
|
|
||||||
|
|
||||||
(define particles (build-particles particle-count))
|
|
||||||
|
|
||||||
(with-primitive particles (pdata-add "vel" "v"))
|
|
||||||
|
|
||||||
(blur 0.1)
|
|
||||||
|
|
||||||
(every-frame (animate))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 84 KiB |
Loading…
Reference in a new issue