diff options
Diffstat (limited to 'src/macroknight/entities.hy')
-rw-r--r-- | src/macroknight/entities.hy | 66 |
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 []))) |