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