hero movement works now.
This commit is contained in:
parent
e130cac03b
commit
ad4a4d118b
3 changed files with 26 additions and 22 deletions
|
@ -6,7 +6,7 @@ WWWWGWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
|
||||||
W H W
|
W H W
|
||||||
W O H O W
|
W O H O W
|
||||||
W H W
|
W H W
|
||||||
W O BBBBBBBBBBBBBBBBBBBBBBBBBBBB O W -
|
W O BBBBBBBBBBBBBBBBBBBBBBBBBBHB O W -
|
||||||
W H W
|
W H W
|
||||||
W H W
|
W H W
|
||||||
W H W
|
W H W
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
(bloat hero-bloat hero-with-bloat) ;; 0.0 to 2.0, how much the hero is inflated
|
(bloat hero-bloat hero-with-bloat) ;; 0.0 to 2.0, how much the hero is inflated
|
||||||
)
|
)
|
||||||
|
|
||||||
(define default-state 'falling)
|
(define default-state 'fall)
|
||||||
(define default-bloat 1.0)
|
(define default-bloat 1.0)
|
||||||
|
|
||||||
(define (hero-load level)
|
(define (hero-load level)
|
||||||
|
@ -56,8 +56,8 @@
|
||||||
(tile-below (level-tile-at level (vec2 (hero-x hero) (1- (hero-y hero))))))
|
(tile-below (level-tile-at level (vec2 (hero-x hero) (1- (hero-y hero))))))
|
||||||
(cond
|
(cond
|
||||||
((equal? (level-tile-at level position) 'ladder) 'climb)
|
((equal? (level-tile-at level position) 'ladder) 'climb)
|
||||||
((> (floor-remainder (hero-y hero) level-cell-size) 0) 'falling)
|
((> (floor-remainder (hero-y hero) level-cell-size) 0) 'fall)
|
||||||
((equal? tile-below 'empty) 'falling)
|
((equal? tile-below 'empty) 'fall)
|
||||||
(else (cond
|
(else (cond
|
||||||
((member 'left inputs) 'go-left)
|
((member 'left inputs) 'go-left)
|
||||||
((member 'right inputs) 'go-right)
|
((member 'right inputs) 'go-right)
|
||||||
|
@ -73,16 +73,16 @@
|
||||||
|
|
||||||
|
|
||||||
(define (next-position position state inputs distance)
|
(define (next-position position state inputs distance)
|
||||||
|
(pretty-print (list position state inputs distance))
|
||||||
(case state
|
(case state
|
||||||
((falling) (vec2- position (vec2 0 distance)))
|
((fall) (vec2- position (vec2 0 distance)))
|
||||||
((climb) (vec2+ position (input->movement (car inputs) distance)))
|
|
||||||
((go-left) (vec2- position (vec2 distance 0)))
|
((go-left) (vec2- position (vec2 distance 0)))
|
||||||
((go-right) (vec2+ position (vec2 distance 0)))
|
((go-right) (vec2+ position (vec2 distance 0)))
|
||||||
((stationary) position)
|
((stationary) position)
|
||||||
((ladder) (fold (lambda (input movement)
|
((climb) (fold (lambda (input movement)
|
||||||
(vec2+ movement (input->movement input distance)))
|
(vec2+ movement (input->movement input distance)))
|
||||||
position
|
position
|
||||||
inputs))
|
inputs))
|
||||||
(else position)
|
(else position)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -91,9 +91,10 @@
|
||||||
(define (hero-update hero level inputs dt)
|
(define (hero-update hero level inputs dt)
|
||||||
(let* ((state (next-state hero level inputs))
|
(let* ((state (next-state hero level inputs))
|
||||||
(distance (* dt speed))
|
(distance (* dt speed))
|
||||||
(position (next-position (hero-position hero) state inputs distance))
|
(position (next-position (hero-position hero) (hero-state hero) inputs distance))
|
||||||
(tile (level-tile-at level position))
|
(tile (level-tile-at level position))
|
||||||
)
|
)
|
||||||
|
(pretty-print (list state position tile))
|
||||||
(hero-with-state
|
(hero-with-state
|
||||||
(if (member tile '(empty ladder other))
|
(if (member tile '(empty ladder other))
|
||||||
(hero-with-position hero position)
|
(hero-with-position hero position)
|
||||||
|
@ -124,7 +125,7 @@
|
||||||
(test-equal 16 (hero-x (hero-with-position hero (vec2 16.34 20.78))))
|
(test-equal 16 (hero-x (hero-with-position hero (vec2 16.34 20.78))))
|
||||||
(test-equal 20 (hero-y (hero-with-position hero (vec2 16.34 20.78))))
|
(test-equal 20 (hero-y (hero-with-position hero (vec2 16.34 20.78))))
|
||||||
|
|
||||||
(test-equal 'falling (next-state hero level '()))
|
(test-equal 'fall (next-state hero level '()))
|
||||||
(let ((hero (hero-with-position hero (vec2 16 16))))
|
(let ((hero (hero-with-position hero (vec2 16 16))))
|
||||||
(test-equal 'stationary (next-state hero level '()))
|
(test-equal 'stationary (next-state hero level '()))
|
||||||
(test-equal 'go-left (next-state hero level '(left)))
|
(test-equal 'go-left (next-state hero level '(left)))
|
||||||
|
@ -134,9 +135,9 @@
|
||||||
(let ((hero (hero-with-position hero (vec2 48 31))))
|
(let ((hero (hero-with-position hero (vec2 48 31))))
|
||||||
(test-equal 'climb (next-state hero level '())))
|
(test-equal 'climb (next-state hero level '())))
|
||||||
(let ((hero (hero-with-position hero (vec2 32 31))))
|
(let ((hero (hero-with-position hero (vec2 32 31))))
|
||||||
(test-equal 'falling (next-state hero level '())))
|
(test-equal 'fall (next-state hero level '())))
|
||||||
|
|
||||||
(test-equal (vec2 32.0 31.0) (next-position (vec2 32.0 32.0) 'falling '() 1.0))
|
(test-equal (vec2 32.0 31.0) (next-position (vec2 32.0 32.0) 'fall '() 1.0))
|
||||||
|
|
||||||
(test-equal (vec2 31.0 32.0) (next-position (vec2 32.0 32.0) 'go-left '() 1.0))
|
(test-equal (vec2 31.0 32.0) (next-position (vec2 32.0 32.0) 'go-left '() 1.0))
|
||||||
(test-equal (vec2 33.0 32.0) (next-position (vec2 32.0 32.0) 'go-right '() 1.0))
|
(test-equal (vec2 33.0 32.0) (next-position (vec2 32.0 32.0) 'go-right '() 1.0))
|
||||||
|
@ -155,7 +156,7 @@
|
||||||
(hero-update
|
(hero-update
|
||||||
(hero-with-state
|
(hero-with-state
|
||||||
(hero-with-position hero (vec2 32 16.3))
|
(hero-with-position hero (vec2 32 16.3))
|
||||||
'falling)
|
'fall)
|
||||||
level
|
level
|
||||||
'()
|
'()
|
||||||
0.017
|
0.017
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
;; start index of the walk animation
|
;; start index of the walk animation
|
||||||
(define hero-walking-offset 56)
|
(define hero-walking-offset 56)
|
||||||
(define hero-falling-offset 32)
|
(define hero-falling-offset 32)
|
||||||
(define hero-climbing-offset 40)
|
(define hero-climbing-offset 48)
|
||||||
|
|
||||||
(define (hero-sprite-walking hero)
|
(define (hero-sprite-walking hero)
|
||||||
(let* ((x (hero-x hero))
|
(let* ((x (hero-x hero))
|
||||||
|
@ -47,17 +47,20 @@
|
||||||
(case (hero-state hero)
|
(case (hero-state hero)
|
||||||
((stationary) (draw-sprite
|
((stationary) (draw-sprite
|
||||||
(hero-sprite-stationary hero)
|
(hero-sprite-stationary hero)
|
||||||
(vec2+ (hero-position hero) (vec2 -9.0 1.0))))
|
(vec2+ (hero-position hero) (vec2 -16.0 1.0))))
|
||||||
((falling) (draw-sprite
|
((fall) (draw-sprite
|
||||||
(hero-sprite-falling hero)
|
(hero-sprite-falling hero)
|
||||||
(vec2+ (hero-position hero) (vec2 -9.0 1.0))))
|
(vec2+ (hero-position hero) (vec2 -16.0 1.0))))
|
||||||
|
((climb) (draw-sprite
|
||||||
|
(hero-sprite-climbing hero)
|
||||||
|
(vec2+ (hero-position hero) (vec2 -16.0 1.0))))
|
||||||
((go-left) (draw-sprite
|
((go-left) (draw-sprite
|
||||||
(hero-sprite-walking hero)
|
(hero-sprite-walking hero)
|
||||||
(vec2+ (hero-position hero) (vec2 23.0 1.0))
|
(vec2+ (hero-position hero) (vec2 16.0 1.0))
|
||||||
#:scale (vec2 -1.0 1.0)
|
#:scale (vec2 -1.0 1.0)
|
||||||
))
|
))
|
||||||
((go-right) (draw-sprite
|
((go-right) (draw-sprite
|
||||||
(hero-sprite-walking hero)
|
(hero-sprite-walking hero)
|
||||||
(vec2+ (hero-position hero) (vec2 -9.0 1.0))))
|
(vec2+ (hero-position hero) (vec2 -16.0 1.0))))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue