diff options
Diffstat (limited to 'src/macroknight')
| -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") | 
