aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/macroknight/game.hy36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy
index ed9be1d..96bc390 100644
--- a/src/macroknight/game.hy
+++ b/src/macroknight/game.hy
@@ -11,6 +11,10 @@
(setv TILE_SIZE (* TILE_SCALING 16))
(setv GRAVITY 5)
+(defn invert [move]
+ #((* -1 (get move 0))
+ (* -1 (get move 1))))
+
(defclass TileSet []
(defn __init__ [self image tile-w tile-h [padding 0]]
@@ -33,18 +37,15 @@
;; Define systems here
(defn apply-gravity [entity entities]
(when (not entity.fixed)
- (.move entity 0 GRAVITY)))
+ (.move entity #(0 GRAVITY))))
(defn apply-collisions [entity entities]
(for [ent entities]
(when (and (!= ent.id entity.id)
(.colliderect entity.rect ent.rect)
(not entity.fixed))
- (let [collision (.clip entity.rect ent.rect)]
- (print f"{entity.id} == {ent.id}")
- (.move entity
- 0
- (* -1 collision.height))))))
+ (.move entity
+ (invert (get entity.moves -1))))))
;; Define entities here
(defclass LevelTile []
@@ -74,8 +75,12 @@
(.blit self.surf tile #(0 0))
(setv self.rect (.get_rect self.surf :left (* 5 TILE_SIZE))))
- (defn move [self dx dy]
- (.move_ip self.rect dx dy)))
+ (defn move [self move]
+ (.append self.moves move)
+ (.move_ip self.rect (get move 0) (get move 1)))
+
+ (defn flush [self]
+ (setv self.moves [])))
(setv screen (pygame.display.set_mode #((* TILE_SCALING 640) (* TILE_SCALING 480))))
(setv clock (pygame.time.Clock))
@@ -88,8 +93,6 @@
(.append sprites-group player)
(setv level (load_pygame "assets/level-1.tmx"))
-(pprint (next (.tiles (get level.layers 1))))
-
(for [tiledef (enumerate (.tiles (get level.layers 1)))]
(.append sprites-group (LevelTile (get tiledef 0) #* (get tiledef 1))))
@@ -97,6 +100,8 @@
(setv ongoing_inputs [])
(while running
+ (.flush player)
+
(for [event (pygame.event.get)]
(match event.type
pygame.QUIT (setv running False)
@@ -106,10 +111,13 @@
(for [inp ongoing_inputs]
(match inp
pygame.K_ESCAPE (setv running False)
- pygame.K_w (.move player 0 (* -1 player.JUMP_IMPULSE))
- pygame.K_a (.move player (* -1 player.SPEED) 0)
- pygame.K_s (.move player 0 1)
- pygame.K_d (.move player player.SPEED 0)))
+ pygame.K_w (.move player #(0 (* -1 player.JUMP_IMPULSE)))
+ 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")