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.hy76
1 files changed, 47 insertions, 29 deletions
diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy
index a8f6c62..005f356 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,25 @@
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)
+ (.animate 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 +167,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)