aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/macroknight/game.hy98
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))