From d94d74769db51bade1f1b262285ea0b29226d97f Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 14 May 2025 15:54:15 +0200 Subject: Better collisions --- src/macroknight/game.hy | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'src') 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] -- cgit v1.2.3