diff options
| author | Gene Pasquet <gene@pacerevenue.com> | 2025-05-13 20:04:27 +0200 | 
|---|---|---|
| committer | Gene Pasquet <gene@pacerevenue.com> | 2025-05-13 20:04:27 +0200 | 
| commit | 6640f0dd8ea05a473adfda3e3ac90ff852af1c7a (patch) | |
| tree | 988da6690dd6cc65652757b449901add6528ed71 /src | |
| parent | 0d295ec1f69faa7c9e6b8509e3190b85bed8d149 (diff) | |
Working macros
Diffstat (limited to 'src')
| -rw-r--r-- | src/macroknight/game.hy | 98 | 
1 files changed, 77 insertions, 21 deletions
| diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index d019a0f..5b230ac 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -45,7 +45,8 @@                 (.colliderect entity.rect ent.rect)                 (not entity.fixed))        (.move entity -             (invert (get entity.moves -1)))))) +             (invert (get entity.moves -1))) +      (.ground entity))))  ;; Define entities here  (defclass LevelTile [] @@ -63,15 +64,25 @@      (setv self.rect (.get_rect surf :left (* x TILE_SIZE) :top (* y TILE_SIZE))))) +(defclass MiniSprite [pygame.sprite.Sprite] +  (defn __init__ [self tile x y] +    (.__init__ (super)) +    (setv self.surf (pygame.Surface #(TILE_SIZE TILE_SIZE))) +    (.blit self.surf tile #(0 0)) +    (setv self.rect (.get_rect self.surf :left (* x TILE_SIZE) :top (* y TILE_SIZE))))) +  (defclass Player [pygame.sprite.Sprite]    (setv fixed False) -  (setv SPEED 5) -  (setv JUMP_IMPULSE 100) +  (setv SPEED 3) +  (setv JUMP_IMPULSE 10) +  (setv MAX_JUMPING 100)    (defn __init__ [self tile initial-x initial-y]      (.__init__ (super))      (setv self.id 1)      (setv self.surf (pygame.Surface #(TILE_SIZE TILE_SIZE))) +    (setv self.jumping False) +    (setv self.jump_move 0)      (.blit self.surf tile #(0 0))      (setv self.rect (.get_rect self.surf :left (* 5 TILE_SIZE)))) @@ -79,6 +90,15 @@      (.append self.moves move)      (.move_ip self.rect (get move 0) (get move 1))) +  (defn jump [self] +    (setv self.jumping True) +    (when (< self.jump_move self.MAX_JUMPING) +      (setv self.jump_move (+ self.jump_move self.JUMP_IMPULSE)) +      (.move self #(0 (* -1 self.JUMP_IMPULSE))))) + +  (defn ground [self] +    (setv self.jump_move 0)) +    (defn flush [self]      (setv self.moves []))) @@ -92,41 +112,77 @@  (setv sprites-group [])  (.append sprites-group player)  (setv level (load_pygame "assets/level-1.tmx")) +(setv macro-input-mode False) +(setv macro-commands [None None None])  (for [tiledef (enumerate (.tiles (get level.layers 1)))]    (.append sprites-group (LevelTile (get tiledef 0) #* (get tiledef 1)))) -  (setv ongoing_inputs []) +(defn draw-tile [target tile-id x y] +  (let [tile (MiniSprite (get tiles.tiles tile-id) x y)] +    (.blit target tile.surf tile.rect))) +  (while running    (.flush player)    (for [event (pygame.event.get)]      (case event.type            pygame.QUIT (setv running False) -          pygame.KEYDOWN (case event.key -                               pygame.K_ESCAPE (setv running False) -                               pygame.K_w (.move player #(0 (* -1 player.JUMP_IMPULSE))) -                               else (.append ongoing_inputs event.key)) +          pygame.KEYDOWN (if (= event.key pygame.K_ESCAPE) +                             (setv running False) +                             (if macro-input-mode +                                 (when (in event.key [pygame.K_a pygame.K_w pygame.K_a pygame.K_s pygame.K_d]) +                                   (print event.key) +                                   (setv (get macro-commands (.index macro-commands None)) event.key)) +                                 (case event.key +                                       pygame.K_SPACE (setv macro-input-mode True) +                                       else (.append ongoing_inputs event.key))))            pygame.KEYUP (when (in event.key ongoing_inputs)                           (.remove ongoing_inputs event.key)))) -  (for [inp ongoing_inputs] -    (case inp -          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") -  ;; Apply systems -  (for [sprite sprites-group] -    (apply-gravity sprite sprites-group) -    (apply-collisions sprite sprites-group)) +  (if macro-input-mode +      ;; If the commands list is full +      (if (all macro-commands) +          ;; Process commands +          (do +            (for [command macro-commands] +              (print command) +              (case command +                    pygame.K_a (.move player #((* -1 player.SPEED) 0)) +                    pygame.K_s (.move player #(0 1)) +                    pygame.K_w (.move player #(0 player.MAX_JUMPING)) +                    pygame.K_d (.move player #(player.SPEED 0)))) +            (setv macro-commands [None None None]) +            (setv macro-input-mode False)) + +          (do (draw-tile screen 757 3 1) +              (for [#(num command) (enumerate macro-commands)] +                (let [x-pos (+ 4 num)] +                  (case command +                        pygame.K_w (draw-tile screen 700 x-pos 1) +                        pygame.K_d (draw-tile screen 701 x-pos 1) +                        pygame.K_s (draw-tile screen 702 x-pos 1) +                        pygame.K_a (draw-tile screen 703 x-pos 1)))))) + +      (do (for [inp ongoing_inputs] +            (case inp +                  pygame.K_a (.move player #((* -1 player.SPEED) 0)) +                  pygame.K_s (.move player #(0 1)) +                  pygame.K_w (.jump player) +                  pygame.K_d (.move player #(player.SPEED 0)))) + +          (for [sprite sprites-group] +            (apply-collisions sprite sprites-group)) + +          ;; Apply systems +          (for [sprite sprites-group] +            (apply-gravity sprite sprites-group) +            (apply-collisions sprite sprites-group)))) +    (for [sprite sprites-group]      (.blit screen sprite.surf sprite.rect)) | 
