From d94d74769db51bade1f1b262285ea0b29226d97f Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 14 May 2025 15:54:15 +0200 Subject: Better collisions --- .gitinore | 4 ++-- assets/monochrome-transparent.png | Bin 0 -> 19451 bytes src/macroknight/game.hy | 28 +++++++++++++++++++++++----- untitled.tiled-session | 28 ++++++++++++++++++++++++---- 4 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 assets/monochrome-transparent.png diff --git a/.gitinore b/.gitinore index 4bf4f05..56d9615 100644 --- a/.gitinore +++ b/.gitinore @@ -2,5 +2,5 @@ *~ *.pyc /.venv -__pycache__ -__pycache__/* \ No newline at end of file +__pycache__/ +src/macroknight/__pycache__/ \ No newline at end of file diff --git a/assets/monochrome-transparent.png b/assets/monochrome-transparent.png new file mode 100644 index 0000000..9f8187d Binary files /dev/null and b/assets/monochrome-transparent.png differ 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] diff --git a/untitled.tiled-session b/untitled.tiled-session index 980bb24..d7e4e07 100644 --- a/untitled.tiled-session +++ b/untitled.tiled-session @@ -3,15 +3,31 @@ "height": 4300, "width": 2 }, - "activeFile": "assets/untitled.tmx", + "activeFile": "assets/monochrome_transparent.tsx", "expandedProjectPaths": [ "assets", "." ], "fileStates": { + "assets/level-1.tmx": { + "scale": 2, + "selectedLayer": 0, + "viewCenter": { + "x": 233.25, + "y": 272.25 + } + }, + "assets/monochrome-transparent.tsx": { + "scaleInDock": 1, + "scaleInEditor": 2 + }, + "assets/monochrome_transparent.tsx": { + "scaleInDock": 2, + "scaleInEditor": 2 + }, "assets/tileset_colored.tsx": { - "scaleInDock": 1.5, - "scaleInEditor": 1 + "scaleInDock": 2, + "scaleInEditor": 2 }, "assets/untitled.tmx": { "scale": 2.09, @@ -29,11 +45,15 @@ "map.width": 40, "openFiles": [ "assets/tileset_colored.tsx", - "assets/untitled.tmx" + "assets/level-1.tmx", + "assets/monochrome_transparent.tsx" ], "project": "untitled.tiled-project", "recentFiles": [ "assets/tileset_colored.tsx", + "assets/level-1.tmx", + "assets/monochrome_transparent.tsx", + "assets/monochrome-transparent.tsx", "assets/untitled.tmx" ] } -- cgit v1.2.3