aboutsummaryrefslogtreecommitdiff
path: root/src/macroknight/entities.hy
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2025-05-28 01:19:25 +0100
committerGene Pasquet <dev@etenil.net>2025-05-28 01:19:25 +0100
commit71ca9de9cadfcbd41327cbc37a94f54794d2316d (patch)
treeb690ded62c0cb36bb510c7c55c63366e5496e959 /src/macroknight/entities.hy
parent4fd3c145865cde9f6afaddf6f1eed376ba0384bb (diff)
Start using pymunk for physics
Diffstat (limited to 'src/macroknight/entities.hy')
-rw-r--r--src/macroknight/entities.hy45
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"))