aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <gene@pacerevenue.com>2025-05-14 15:54:15 +0200
committerGene Pasquet <gene@pacerevenue.com>2025-05-14 15:54:15 +0200
commitd94d74769db51bade1f1b262285ea0b29226d97f (patch)
tree795133773f8e01c87174947750c42de511f68179
parent36791b258ae7618cc1bde3ac279f1d2c5a1abb11 (diff)
Better collisions
-rw-r--r--.gitinore4
-rw-r--r--assets/monochrome-transparent.pngbin0 -> 19451 bytes
-rw-r--r--src/macroknight/game.hy28
-rw-r--r--untitled.tiled-session28
4 files changed, 49 insertions, 11 deletions
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
--- /dev/null
+++ b/assets/monochrome-transparent.png
Binary files 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"
]
}