diff options
Diffstat (limited to 'src/macroknight')
| -rw-r--r-- | src/macroknight/game.hy | 28 | 
1 files changed, 23 insertions, 5 deletions
| diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 32ba2a8..42fa5ca 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -18,6 +18,14 @@    #((neg (get move 0))       (neg (get move 1)))) +(defn merge-moves [moves] +  (let [end-move #(0 0)] +    (for [move moves] +      (setv end-move +            #((+ (get end-move 0) (get move 0)) +               (+ (get end-move 1) (get move 1))))) +    end-move)) +  (defclass TileSet []    (defn __init__ [self image tile-w tile-h [padding 0]] @@ -48,8 +56,13 @@      (when (and (!= ent.id entity.id)                 (.colliderect entity.rect ent.rect)                 (not entity.fixed)) -      (.move entity -             (invert (get entity.moves -1))) +      (let [collision-rect (.clip entity.rect ent.rect) +            move-x (get entity.total-move 0) +            move-y (get entity.total-move 1)] +        (when (!= move-x 0) +          (.move entity #((* (if (> move-x 0) -1 1) collision-rect.width) 0))) +        (when (!= move-y 0) +          (.move entity #(0 (* (if (> move-y 0) -1 1) collision-rect.height)))))        (.ground entity))))  ;; Define entities here @@ -94,6 +107,9 @@      (.append self.moves move)      (.move_ip self.rect (get move 0) (get move 1))) +  (defn [property] total-move [self] +    (merge-moves self.moves)) +    (defn jump [self]      (setv self.jumping True)      (when (< self.jump_move self.MAX_JUMPING) @@ -129,8 +145,6 @@      (.blit target tile.surf tile.rect)))  (while running -  (.flush player) -    (for [event (pygame.event.get)]      (case event.type            pygame.QUIT (setv running False) @@ -182,10 +196,14 @@              (for [sprite sprites-group]                (apply-collisions sprite sprites-group))) +          (.flush player) +            ;; Apply systems            (for [sprite sprites-group]              (apply-gravity sprite sprites-group) -            (apply-collisions sprite sprites-group)))) +            (apply-collisions sprite sprites-group)) + +          (.flush player)))    (for [sprite sprites-group] | 
