;;; -*- lexical-binding: t -*- ;; ;; -------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; -------------------------------------------------------------------------- (-> 'bad-box) ; NOTE: OK (-> 'bad-color) (-> 'bad-elem) (-> 'bad-move) ;; -------------------------------------------------------------------------- (let ((step-def 0.05)) (cl-defmethod bad-advance ((e elem) &optional step) (or step (setq step step-def)) (unless (z step) (~ (prox) e (let ((mn 0.0) (mx 1.0)) (if (< prox mn) (setf prox mn) (when (< mx prox) (setf prox mx))) (let* ((pos (< 0 step)) (stp 1) (mve (if pos stp (- stp)))) (when (or (& (! pos) (< mn prox)) (& pos (< prox mx))) (bad-add-row e mve) (bad-add-col e mve) (++ prox step) (bad-compute-actual-fg e) (bad-update e))))))) (cl-defmethod bad-retreat ((e elem) &optional step) (or step (setq step step-def)) (bad-advance e (- step)))) (declare-function bad-advance nil) (declare-function bad-retreat nil) ;; -------------------------------------------------------------------------- (cl-defmethod bad-compute-actual-fg ((e elem) &optional verbose) (~ (dist-fg actual-fg fg prox) e (unless dist-fg (setf dist-fg our-black-b)) (unless fg (setf fg our-white-b)) (when (or (!n prox) (< 1.0 prox)) (setf prox 1.0)) (when (< prox 0.0) (setf prox 0.0)) (setf actual-fg (bad-color-norm (col+ (col* (- 1.0 prox) dist-fg) (col* prox fg)) 'to-str)) (when verbose ($ "prox: %.2f ( fg %s | distant %s | actual %s )" prox fg dist-fg actual-fg)))) ;; -------------------------------------------------------------------------- (<- 'bad-proximity)