diff options
Diffstat (limited to 'src/macroknight/game.hy')
-rw-r--r-- | src/macroknight/game.hy | 73 |
1 files changed, 44 insertions, 29 deletions
diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index a8f6c62..1676e5a 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -1,13 +1,12 @@ (require hy) (require hyrule *) (import pygame - pprint [pprint] pytmx.util_pygame [load_pygame] entities [Player LevelTile Goal] tiles [TileSet draw-tile] utils [neg] text [render-text] - systems [apply-gravity apply-collisions] + systems [apply-gravity apply-collisions GoalHit] math [floor]) (pygame.init) @@ -15,11 +14,10 @@ (setv TILE_SCALING 1) (setv TILE_SIZE (* TILE_SCALING 16)) (setv MACRO_STEP_WAIT 300) -(setv MACRO_COOLDOWN 5000) +(setv MACRO_COOLDOWN 2000) (setv screen (pygame.display.set_mode #((* TILE_SCALING 640) (* TILE_SCALING 480)))) (setv clock (pygame.time.Clock)) -(setv running True) (setv tileset (TileSet "assets/monochrome-transparent.png" TILE_SCALING TILE_SIZE TILE_SIZE 1)) (setv levels [(load_pygame "assets/level-0.tmx") (load_pygame "assets/level-1.tmx")]) @@ -29,10 +27,10 @@ (setv game-running True) - (while game-running ;; Load the level + (setv running True) (setv level (get levels level-id)) (setv entities []) (setv player-pos #(5 5)) @@ -60,16 +58,15 @@ (setv macro-input-mode False) (setv macro-wait-time 0) (setv macro-commands [None None None]) - (for [#(id tiledef) (enumerate (.tiles (get level.layers 0)))] - (let [x (get tiledef 0) - y (get tiledef 1) - tile (get tiledef 2)] - (.append entities (LevelTile id tile TILE_SIZE x y TILE_SCALING)))) + (let [id-offset (len entities)] + (for [#(id tiledef) (enumerate (.tiles (get level.layers 0)))] + (let [x (get tiledef 0) + y (get tiledef 1) + tile (get tiledef 2)] + (.append entities (LevelTile (+ id id-offset) tile TILE_SIZE x y TILE_SCALING))))) (setv ongoing_inputs []) - (pprint (get entities 0)) - (while running (for [event (pygame.event.get)] (case event.type @@ -112,9 +109,10 @@ pygame.K_w (.move player #(0 (neg (/ player.MAX_JUMPING 2)))) pygame.K_d (.move player #((* 2 TILE_SIZE) 0))) (if (= command-id (- (len macro-commands) 1)) - (do (setv macro-commands [None None None]) - (setv macro-input-mode False) - (setv macro-wait-time (+ (pygame.time.get_ticks) MACRO_COOLDOWN))) + (do + (setv macro-commands [None None None]) + (setv macro-input-mode False) + (setv macro-wait-time (+ (pygame.time.get_ticks) MACRO_COOLDOWN))) (setv (get macro-commands command-id) None))) (pygame.time.wait MACRO_STEP_WAIT)) @@ -131,10 +129,9 @@ ;; Not in macro mode (do (when (> macro-wait-time 0) - (let [progress (round (* 3 (/ (- (pygame.time.get_ticks) macro-wait-time) MACRO_COOLDOWN)))] - (for [indicator (range 3)] - (draw-tile - screen tileset 725 )))) + (let [progress (round (* 3 (/ (- macro-wait-time (pygame.time.get_ticks)) MACRO_COOLDOWN)))] + (for [indicator (range progress)] + (draw-tile screen tileset 725 (+ 4 indicator) 5)))) (for [inp ongoing_inputs] (case inp pygame.K_a (.move player #((neg player.SPEED) 0)) @@ -142,16 +139,22 @@ pygame.K_w (.jump player) pygame.K_d (.move player #(player.SPEED 0)))) - (when (any ongoing_inputs) - (for [entity entities] - (apply-collisions entity entities))) + (try + (when (any ongoing_inputs) + (for [entity entities] + (apply-collisions entity entities))) - (.flush player) + (.flush player) - ;; Apply systems - (for [entity entities] - (apply-gravity entity entities) - (apply-collisions entity entities)) + ;; Apply systems + (for [entity entities] + (apply-gravity entity entities) + (apply-collisions entity entities)) + + (except [GoalHit] + (setv level-id (+ level-id 1)) + (setv running False) + (setv game-running (< level-id (len levels))))) (.flush player))) @@ -161,10 +164,22 @@ (pygame.display.flip) - (when (or (= 0 macro-wait-time) - (< (- (pygame.time.get_ticks) macro-wait-time) 0)) + (when (and (!= 0 macro-wait-time) + (> (pygame.time.get_ticks) macro-wait-time)) (setv macro-wait-time 0)) (.tick clock 60))) +(do + (.fill screen "#000000") + + (render-text screen + tileset + "YOU WIN" + 10 + 10) + + (pygame.display.flip) + (pygame.time.wait 1000)) + (pygame.quit) |