src/2d/hitboxes.lisp @ e05ab7ec7e6c default tip
Remove some of the bitrot. It still doesn't really work.
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Mon, 07 Jan 2019 18:25:15 -0500 |
| parents | 4760ced86a2c |
| children | (none) |
(in-package #:coding-math.2d.hitboxes) (defgeneric hitbox-x (object)) (defgeneric hitbox-y (object)) (defgeneric hitbox-radius (object)) (defgeneric hitbox-width (object)) (defgeneric hitbox-height (object)) (defmethod hitbox-x ((object list)) (getf object :x)) (defmethod hitbox-y ((object list)) (getf object :y)) (defmethod hitbox-radius ((object list)) (getf object :radius)) (defmethod hitbox-width ((object list)) (getf object :width)) (defmethod hitbox-height ((object list)) (getf object :height)) (defmethod hitbox-x ((object vec)) (vec-x object)) (defmethod hitbox-y ((object vec)) (vec-y object)) (defun circles-collide-p (c0 c1) (let ((d (distance (hitbox-x c0) (hitbox-y c0) (hitbox-x c1) (hitbox-y c1)))) (< d (+ (hitbox-radius c0) (hitbox-radius c1))))) (defun circle-point-collide-p (c p) (let ((d (distance (hitbox-x c) (hitbox-y c) (hitbox-x p) (hitbox-y p)))) (< d (hitbox-radius c)))) (defun rect-point-collide-p (r p) (with-vals ((rx hitbox-x) (ry hitbox-y) (rw hitbox-width) (rh hitbox-height)) r (and (insidep rx (+ rx rw) (hitbox-x p)) (insidep ry (+ ry rh) (hitbox-y p))))) (defun rects-collide-p (r0 r1) (with-vals ((r0x hitbox-x) ; lol (r0y hitbox-y) (r0w hitbox-width) (r0h hitbox-height)) r0 (with-vals ((r1x hitbox-x) (r1y hitbox-y) (r1w hitbox-width) (r1h hitbox-height)) r1 (and (ranges-overlap-p r0x (+ r0x r0w) r1x (+ r1x r1w)) (ranges-overlap-p r0y (+ r0y r0h) r1y (+ r1y r1h)))))) (defgeneric drag-location-vec (object)) (defgeneric (setf drag-location-vec) (new-value object)) (defgeneric drag-requested-p (object mouse))