aboutsummaryrefslogtreecommitdiff
path: root/src/macroknight/entities.hy
diff options
context:
space:
mode:
Diffstat (limited to 'src/macroknight/entities.hy')
-rw-r--r--src/macroknight/entities.hy66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy
new file mode 100644
index 0000000..1ac59ce
--- /dev/null
+++ b/src/macroknight/entities.hy
@@ -0,0 +1,66 @@
+(import pygame.sprite [Sprite]
+ pygame [Surface]
+ pygame
+ utils [neg merge-moves])
+
+(defclass Entity [Sprite]
+ ;;; Game entity
+ (setv _fixed False)
+
+ (defn __init__ [self id tile tile-size initial-pos]
+ (.__init__ (super))
+ (setv self.id id)
+ (setv self._surf (Surface #(tile-size tile-size)))
+ (.blit self._surf tile #(0 0))
+ (setv self._rect (.get_rect self._surf
+ :left (* (get initial-pos 0) tile-size)
+ :top (* (get initial-pos 1) tile-size))))
+
+ (defn [property] fixed [self]
+ self._fixed)
+
+ (defn [property] rect [self]
+ self._rect)
+
+ (defn [property] surf [self]
+ self._surf))
+
+(defclass LevelTile [Entity]
+ (setv _fixed True)
+
+ (defn __init__ [self id tile-size scaling x y tile]
+ (let [tile-width (* (.get_width tile) scaling)
+ tile-height (* (.get_height tile) scaling)
+ tile_ (if (!= scaling 1)
+ (pygame.transform.scale tile #(tile-width tile-height))
+ tile)]
+ (.__init__ (super) id tile_ tile-size #(x y)))))
+
+(defclass Player [Entity]
+ (setv SPEED 3)
+ (setv JUMP_IMPULSE 10)
+ (setv MAX_JUMPING 100)
+
+ (defn __init__ [self id tile tile-size initial-x initial-y]
+ (.__init__ (super) id tile tile-size #(initial-x initial-y))
+ (setv self.jumping False)
+ (setv self.jump-move 0))
+
+ (defn move [self move]
+ (.append self.moves move)
+ (.move_ip self._rect (get move 0) (get move 1)))
+
+ (defn [property] total-move [self]
+ (merge-moves self.moves))
+
+ (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 (neg self.JUMP_IMPULSE)))))
+
+ (defn ground [self]
+ (setv self.jump-move 0))
+
+ (defn flush [self]
+ (setv self.moves [])))