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.pngBinary files differ new 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"      ]  } | 
