diff options
Diffstat (limited to 'src/macroknight')
| -rw-r--r-- | src/macroknight/entities.hy | 40 | ||||
| -rw-r--r-- | src/macroknight/game.hy | 18 | ||||
| -rw-r--r-- | src/macroknight/systems.hy | 19 | ||||
| -rw-r--r-- | src/macroknight/utils.hy | 7 | 
4 files changed, 57 insertions, 27 deletions
| diff --git a/src/macroknight/entities.hy b/src/macroknight/entities.hy index 760aeca..2ba77ea 100644 --- a/src/macroknight/entities.hy +++ b/src/macroknight/entities.hy @@ -72,8 +72,9 @@    (defn move [self move]      (.append self.moves move)      (.move_ip self._rect (get move 0) (get move 1)) -    (setv self.facing -          (.x-from-move Direction move))) +    (when (!= (get move 0) 0) +      (setv self.facing +            (.x-from-move Direction move))))    (defn [property] total-move [self]      (merge-moves self.moves)) @@ -104,7 +105,9 @@      (setv self._disp_surf            (case self.facing                  Direction.LEFT (pygame.transform.flip self._surf True False) -                Direction.RIGHT (.copy self._surf)))) +                Direction.RIGHT (.copy self._surf))) + +    (.flush self))    (defn flush [self]      (setv self.moves [])) @@ -115,17 +118,23 @@  (defclass Enemy [Entity]    (setv _type "enemy") -  (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.facing Direction.RIGHT)      (setv self.attacking False) +    (setv self.animate-end 0)      (.flush self))    (defn move [self move]      (.append self.moves move)      (.move_ip self._rect (get move 0) (get move 1)) -    (setv self.facing -          (.x-from-move Direction move))) +    (when (!= (get move 0) 0) +      (setv self.facing +            (.x-from-move Direction move)))) + +  (defn attack [self] +    (setv self.attacking True))    (defn flush [self]      (setv self.moves [])) @@ -133,10 +142,23 @@    (defn ground [self])    (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))) +      (setv self._disp_surf            (case self.facing                  Direction.LEFT (pygame.transform.flip self._surf True False) -                Direction.RIGHT (.copy self._surf)))) +                Direction.RIGHT (.copy self._surf))) +    (.flush self))    (defn [property] total-move [self] -    (merge-moves self.moves))) +    (merge-moves self.moves)) + +  (defn [property] surf [self] +    self._disp_surf)) diff --git a/src/macroknight/game.hy b/src/macroknight/game.hy index 95cb8b1..7709f41 100644 --- a/src/macroknight/game.hy +++ b/src/macroknight/game.hy @@ -49,7 +49,8 @@                                    tile-y))              "Enemy1" (.append entities                                (Enemy (len entities) -                                     (get tileset.tiles 128) +                                     [(get tileset.tiles 128) +                                      (get tileset.tiles 129)]                                       TILE_SIZE                                       tile-x                                       tile-y))))) @@ -157,15 +158,14 @@                (for [entity entities]                  (apply-collisions entity entities))) -            (.animate player (pygame.time.get_ticks)) -            (.flush player) -              ;; Apply systems -            (for [entity entities] -              (apply-gravity entity entities) -              (run-enemies entity entities) -              (apply-collisions entity entities)) -             +            (let [ticks (pygame.time.get_ticks)] +              (for [entity entities] +                (run-enemies entity entities) +                (when (hasattr entity "animate") (.animate entity ticks)) +                (apply-gravity entity entities) +                (apply-collisions entity entities))) +              (except [GoalHit]                (setv level-id (+ level-id 1))                (setv running False) diff --git a/src/macroknight/systems.hy b/src/macroknight/systems.hy index 8c1bb9c..f503642 100644 --- a/src/macroknight/systems.hy +++ b/src/macroknight/systems.hy @@ -1,4 +1,4 @@ -(import utils [sub-points Direction]) +(import utils [sub-points distance Direction])  ;; Define systems here  (setv GRAVITY 5) @@ -40,14 +40,17 @@    (= entity.type "enemy")    ;; If the player is on the tile next to the enemy, attack.    (let [player (next (entities-by-type entities ["player"])) -        dist (sub-points entity.pos player.pos) -        direction (.x-from-move Direction dist)] +        delta (sub-points entity.pos player.pos) +        dist (distance entity.pos player.pos) +        direction (.x-from-move Direction delta)]      ;; If facing the player and within reach, attack)      (when (and (= direction entity.facing) -               (< (get dist 1) 1) ;; Same level -               (< (abs (get dist 0)) 2) +               (< (get delta 1) 1) ;; Same level +               (< (abs (get delta 0)) 2)                 (not entity.attacking)) -      (setv entity.attacking True) -      (print "attack") -      ) +      (.attack entity)) +    ;; If not facing the player, turn to face +    (when (and (< dist 5) +               (!= direction entity.facing)) +      (.move entity #((if (< (get delta 0) 0) -1 1) 0)))      )) diff --git a/src/macroknight/utils.hy b/src/macroknight/utils.hy index dde8d2e..5de8887 100644 --- a/src/macroknight/utils.hy +++ b/src/macroknight/utils.hy @@ -1,4 +1,5 @@ -(import enum [Enum]) +(import enum [Enum] +        math [sqrt])  (defclass Direction [Enum]    (setv UP "UP") @@ -44,3 +45,7 @@  (defn sub-points [point1 point2]    #((- (get point2 0) (get point1 0))       (- (get point2 1) (get point2 1)))) + +(defn distance [point1 point2] +  (sqrt (+ (** (- (get point1 0) (get point2 0)) 2) +           (** (- (get point1 1) (get point2 1)) 2)))) | 
