diff options
author | Gene Pasquet <gene@pacerevenue.com> | 2025-05-14 15:54:15 +0200 |
---|---|---|
committer | Gene Pasquet <gene@pacerevenue.com> | 2025-05-14 15:54:15 +0200 |
commit | d94d74769db51bade1f1b262285ea0b29226d97f (patch) | |
tree | 795133773f8e01c87174947750c42de511f68179 | |
parent | 36791b258ae7618cc1bde3ac279f1d2c5a1abb11 (diff) |
Better collisions
-rw-r--r-- | .gitinore | 4 | ||||
-rw-r--r-- | assets/monochrome-transparent.png | bin | 0 -> 19451 bytes | |||
-rw-r--r-- | src/macroknight/game.hy | 28 | ||||
-rw-r--r-- | untitled.tiled-session | 28 |
4 files changed, 49 insertions, 11 deletions
@@ -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 Binary files differnew file mode 100644 index 0000000..9f8187d --- /dev/null +++ b/assets/monochrome-transparent.png 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" ] } |