aboutsummaryrefslogtreecommitdiff
path: root/src/macroknight/game.hy
diff options
context:
space:
mode:
Diffstat (limited to 'src/macroknight/game.hy')
-rw-r--r--src/macroknight/game.hy28
1 files changed, 23 insertions, 5 deletions
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]