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.hy69
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)))