diff options
Diffstat (limited to 'src/macroknight/entities.hy')
-rw-r--r-- | src/macroknight/entities.hy | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy index c490b25..760aeca 100644 --- a/src/macroknight/entities.hy +++ b/src/macroknight/entities.hy @@ -1,16 +1,19 @@ +(require hyrule [case]) (import pygame.sprite [Sprite] pygame [Surface] pygame - utils [neg merge-moves]) + utils [neg merge-moves Direction] + enum [Enum]) (defclass Entity [Sprite] - ;;; Game entity +;;; Game entity (setv _fixed False) (setv _type "none") (defn __init__ [self id tile tile-size x y] (.__init__ (super)) (setv self.id id) + (setv self.tile-size tile-size) (setv self._surf (Surface #(tile-size tile-size))) (.blit self._surf tile #(0 0)) (setv self._rect (.get_rect self._surf @@ -27,7 +30,11 @@ self._surf) (defn [property] type [self] - self._type)) + self._type) + + (defn [property] pos [self] + #((/ self.rect.x self.tile-size) + (/ self.rect.y self.tile-size)))) (defclass LevelTile [Entity] (setv _fixed True) @@ -51,20 +58,29 @@ (setv JUMP_IMPULSE 10) (setv MAX_JUMPING 100) - (defn __init__ [self id tile tile-size x y] - (.__init__ (super) id tile tile-size x y) + (defn __init__ [self id tiles tile-size x y] + (.__init__ (super) id (get tiles 0) tile-size x y) + (setv self.tiles tiles) (setv self.jumping False) (setv self.jump-move 0) (setv self.moves []) - (setv self._disp_surf (.copy self._surf))) + (setv self._disp_surf (.copy self._surf)) + (setv self.facing Direction.RIGHT) + (setv self.attacking False) + (setv self.animate-end 0)) (defn move [self move] (.append self.moves move) - (.move_ip self._rect (get move 0) (get move 1))) + (.move_ip self._rect (get move 0) (get move 1)) + (setv self.facing + (.x-from-move Direction move))) (defn [property] total-move [self] (merge-moves self.moves)) + (defn attack [self] + (setv self.attacking True)) + (defn jump [self] (setv self.jumping True) (when (< self.jump-move self.MAX_JUMPING) @@ -74,13 +90,21 @@ (defn ground [self] (setv self.jump-move 0)) - (defn animate [self] - (let [x-move (get self.total-move 0)] - (setv self._disp_surf - (cond - (< x-move 0) (pygame.transform.flip self._surf True False) - (> x-move 0) (.copy self._surf) - True self._disp_surf)))) + (defn animate [self ticks] + ;; Attack animation + (when (and self.attacking (= self.animate-end 0)) + (setv self.animate-end (+ ticks 200)) + (.blit self._surf (get self.tiles 1) #(0 0))) + (when (and self.attacking (> ticks self.animate-end)) + (setv self.animate-end 0) + (setv self.attacking False) + (.blit self._surf (get self.tiles 0) #(0 0))) + + ;; Facing direction + (setv self._disp_surf + (case self.facing + Direction.LEFT (pygame.transform.flip self._surf True False) + Direction.RIGHT (.copy self._surf)))) (defn flush [self] (setv self.moves [])) @@ -89,21 +113,30 @@ self._disp_surf)) (defclass Enemy [Entity] - (setv _type "enemy")) + (setv _type "enemy") -(defclass Enemy2Swords [Enemy] (defn __init__ [self id tile tile-size x y] (.__init__ (super) id tile tile-size x y) + (setv self.facing Direction.RIGHT) + (setv self.attacking False) (.flush self)) - + (defn move [self move] (.append self.moves move) - (.move_ip self._rect (get move 0) (get move 1))) + (.move_ip self._rect (get move 0) (get move 1)) + (setv self.facing + (.x-from-move Direction move))) (defn flush [self] (setv self.moves [])) (defn ground [self]) + + (defn animate [self ticks] + (setv self._disp_surf + (case self.facing + Direction.LEFT (pygame.transform.flip self._surf True False) + Direction.RIGHT (.copy self._surf)))) (defn [property] total-move [self] (merge-moves self.moves))) |