(last-y :initarg :last-pos
:accessor last-y
:initform nil)
+ (bounced :initarg :bounced
+ :accessor bounced
+ :initform nil)
(jump-accel :accessor jump-accel
:initform -50)
(mayjump :accessor mayjump
:documentation "after hit by an enemy you wont be
wounded by another enemy for that ammount of
frames.")
- (keys :initform 0
+ (keys :initform nil
+ :initarg :keys
:accessor keys
- :documentation "Number of keys for doors")
- ))
+ :documentation "List of Key-Dungeons of keys (i.e. for every
+ key its key-dungeon is pushed on that list, for every door, its
+ removed again).") ))
;; Interaction with enemies
(class-name (class-of item))
(class-name (class-of player))))
+(defmethod item-catch ((item key) (player player) &rest args)
+ (declare (ignore args))
+ (push (dungeon item) (keys player))
+ (setf (visible item) nil)
+ (setf (colliding item) nil))
+
(defmethod (setf animation) ((new-value animation) (object player))
(setf (x new-value) (+ (x object) (x(animation-translation object))))
(setf (y new-value) (+ (y object) (y(animation-translation object))))
(defmethod invoke ((obj player))
"Do whatever a player does ^^"
- (if (and
- (last-y obj)
- (< (last-y obj) (y obj)))
- (setf (mayjump obj) nil))
+ (cond
+ ((bounced obj)
+ (setf (bounced obj) nil))
+ ((and
+ (last-y obj)
+ (< (last-y obj) (y obj)))
+ (setf (mayjump obj) nil)))
(setf (last-y obj) (y obj))