diff options
author | Gene Pasquet <gene@pacerevenue.com> | 2025-05-12 16:41:16 +0200 |
---|---|---|
committer | Gene Pasquet <gene@pacerevenue.com> | 2025-05-12 16:41:16 +0200 |
commit | b6d2a86034802aeea1d2995622b4afa2ea177ea7 (patch) | |
tree | a288595508dcc2d4824407452f95152e30aed218 /src/macroknight/game.hy | |
parent | fea26fa451ed2bd8c21c99d589228328540811ca (diff) |
Better working collisions
Diffstat (limited to 'src/macroknight/game.hy')
-rw-r--r-- | src/macroknight/game.hy | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index ed9be1d..96bc390 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -11,6 +11,10 @@ (setv TILE_SIZE (* TILE_SCALING 16)) (setv GRAVITY 5) +(defn invert [move] + #((* -1 (get move 0)) + (* -1 (get move 1)))) + (defclass TileSet [] (defn __init__ [self image tile-w tile-h [padding 0]] @@ -33,18 +37,15 @@ ;; Define systems here (defn apply-gravity [entity entities] (when (not entity.fixed) - (.move entity 0 GRAVITY))) + (.move entity #(0 GRAVITY)))) (defn apply-collisions [entity entities] (for [ent entities] (when (and (!= ent.id entity.id) (.colliderect entity.rect ent.rect) (not entity.fixed)) - (let [collision (.clip entity.rect ent.rect)] - (print f"{entity.id} == {ent.id}") - (.move entity - 0 - (* -1 collision.height)))))) + (.move entity + (invert (get entity.moves -1)))))) ;; Define entities here (defclass LevelTile [] @@ -74,8 +75,12 @@ (.blit self.surf tile #(0 0)) (setv self.rect (.get_rect self.surf :left (* 5 TILE_SIZE)))) - (defn move [self dx dy] - (.move_ip self.rect dx dy))) + (defn move [self move] + (.append self.moves move) + (.move_ip self.rect (get move 0) (get move 1))) + + (defn flush [self] + (setv self.moves []))) (setv screen (pygame.display.set_mode #((* TILE_SCALING 640) (* TILE_SCALING 480)))) (setv clock (pygame.time.Clock)) @@ -88,8 +93,6 @@ (.append sprites-group player) (setv level (load_pygame "assets/level-1.tmx")) -(pprint (next (.tiles (get level.layers 1)))) - (for [tiledef (enumerate (.tiles (get level.layers 1)))] (.append sprites-group (LevelTile (get tiledef 0) #* (get tiledef 1)))) @@ -97,6 +100,8 @@ (setv ongoing_inputs []) (while running + (.flush player) + (for [event (pygame.event.get)] (match event.type pygame.QUIT (setv running False) @@ -106,10 +111,13 @@ (for [inp ongoing_inputs] (match inp pygame.K_ESCAPE (setv running False) - pygame.K_w (.move player 0 (* -1 player.JUMP_IMPULSE)) - pygame.K_a (.move player (* -1 player.SPEED) 0) - pygame.K_s (.move player 0 1) - pygame.K_d (.move player player.SPEED 0))) + pygame.K_w (.move player #(0 (* -1 player.JUMP_IMPULSE))) + pygame.K_a (.move player #((* -1 player.SPEED) 0)) + pygame.K_s (.move player #(0 1)) + pygame.K_d (.move player #(player.SPEED 0)))) + + (for [sprite sprites-group] + (apply-collisions sprite sprites-group)) (.fill screen "#472d3c") |