diff options
Diffstat (limited to 'src/macroknight/entities.hy')
-rw-r--r-- | src/macroknight/entities.hy | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy index af684c2..1979e56 100644 --- a/src/macroknight/entities.hy +++ b/src/macroknight/entities.hy @@ -22,16 +22,23 @@ (defclass PlayerKilled [Exception]) +(defclass Physics [] + (defn __init__ [self body shape] + (setv self.body body) + (setv self.shape shape))) + (defclass Entity [Sprite] ;;; Game entity (setv _fixed False) + (setv _managed False) (setv _type "none") - (defn __init__ [self id tile tile-size x y] + (defn __init__ [self id tile physics tile-size x y] (.__init__ (super)) (setv self.id id) (setv self.tile-size tile-size) (setv self._surf (Surface #(tile-size tile-size))) + (setv self._physics physics) (.blit self._surf tile #(0 0)) (setv self._rect (.get_rect self._surf :left (* x tile-size) @@ -40,6 +47,9 @@ (defn [property] fixed [self] self._fixed) + (defn [property] managed [self] + self._managed) + (defn [property] rect [self] self._rect) @@ -57,24 +67,23 @@ (setv _fixed True) (setv _type "level") - (defn __init__ [self id tile tile-size x y scaling] + (defn __init__ [self id tile physics tile-size x y scaling] (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)))) + (.__init__ (super) id tile_ physics tile-size x y)))) (defclass Goal [Entity] (setv _type "goal") (setv _fixed True)) - (defclass Character [Entity] (setv _type "enemy") - (defn __init__ [self id tiles tile-size x y] - (.__init__ (super) id (get tiles 0) tile-size x y) + (defn __init__ [self id tiles physics tile-size x y] + (.__init__ (super) id (get tiles 0) physics tile-size x y) (setv self.tiles tiles) (setv self.facing Direction.RIGHT) (setv self.attacking False) @@ -125,23 +134,39 @@ (defclass Player [Character] (setv _type "player") - (setv SPEED 3) + (setv _managed True) + (setv SPEED 100) (setv JUMP_IMPULSE 10) (setv MAX_JUMPING 100) - (defn __init__ [self id tiles tile-size x y] - (.__init__ (super) id tiles tile-size x y) + (defn __init__ [self id tiles physics tile-size x y] + (.__init__ (super) id tiles physics tile-size x y) (setv self.jumping False) (setv self.jump-move 0)) (defn [property] total-move [self] (merge-moves self.moves)) + (defn move [self move] + ;; (.append self.moves move) + ;; (.move_ip self._rect (get move 0) (get move 1)) + ;; ;; (setv self._physics.body.velocity move) + ;; (when (!= (get move 0) 0) + ;; (setv self.facing + ;; (.x-from-move Direction move))) + ) + (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)))))) + (.move self #(0 (neg self.JUMP_IMPULSE))))) + + + (defn [property] rect [self] + (setv self._rect.x self._physics.body.position.x) + (setv self._rect.y self._physics.body.position.y) + self._rect)) (defclass Enemy [Character] (setv _type "Enemy")) |