diff --git a/.calva/output-window/output.calva-repl b/.calva/output-window/output.calva-repl deleted file mode 100644 index 9fea8a2..0000000 --- a/.calva/output-window/output.calva-repl +++ /dev/null @@ -1,171 +0,0 @@ -; This is the Calva evaluation results output window. -; TIPS: The keyboard shortcut `ctrl+alt+o o` shows and focuses this window -; when connected to a REPL session. -; Please see https://calva.io/output/ for more info. -; Happy coding! ♥️ - -; Connecting ... -; Reading port file: file:///Users/simon/workspace/MicroWorld/mw-engine/.nrepl-port ... -; Using host:port localhost:58100 ... -; Hooking up nREPL sessions ... -; Connected session: clj -; TIPS: -; - You can edit the contents here. Use it as a REPL if you like. -; - `alt+enter` evaluates the current top level form. -; - `ctrl+enter` evaluates the current form. -; - `alt+up` and `alt+down` traverse up and down the REPL command history -; when the cursor is after the last contents at the prompt -; - Clojure lines in stack traces are peekable and clickable. -; Evaluating code from settings: 'calva.autoEvaluateCode.onConnect.clj' -nil -clj꞉user꞉>  ; Use `alt+enter` to evaluate -clj꞉user꞉>  -nil -; WARNING: abs already refers to: #'clojure.core/abs in namespace: mw-engine.utils, being replaced by: #'mw-engine.utils/abs -clj꞉mw-engine.core꞉>  -nil -clj꞉mw-engine.core꞉>  -#'mw-engine.core/apply-rule -clj꞉mw-engine.core꞉>  -#'mw-engine.core/apply-rules -clj꞉mw-engine.core꞉>  -#'mw-engine.core/transform-cell -clj꞉mw-engine.core꞉>  -#'mw-engine.core/transform-world -clj꞉mw-engine.core꞉>  -#'mw-engine.core/run-world -clj꞉mw-engine.core꞉>  -#'mw-engine.display/*image-base* -clj꞉mw-engine.display꞉>  -; Syntax error compiling at (src/cljc/mw_engine/display.clj:32:1). -; Unable to resolve symbol: defn in this context -clj꞉mw-engine.display꞉>  -; Syntax error compiling at (src/cljc/mw_engine/display.clj:32:1). -; Unable to resolve symbol: defn in this context -clj꞉mw-engine.display꞉>  -nil -clj꞉mw-engine.display꞉>  -#'mw-engine.display/*image-base* -clj꞉mw-engine.display꞉>  -#'mw-engine.display/format-css-class -clj꞉mw-engine.display꞉>  -#'mw-engine.display/format-image-path -clj꞉mw-engine.display꞉>  -#'mw-engine.display/format-mouseover -clj꞉mw-engine.display꞉>  -#'mw-engine.display/render-cell -clj꞉mw-engine.display꞉>  -#'mw-engine.display/render-world-row -clj꞉mw-engine.display꞉>  -#'mw-engine.display/render-world-table -clj꞉mw-engine.display꞉>  -nil -; WARNING: abs already refers to: #'clojure.core/abs in namespace: mw-engine.heightmap, being replaced by: #'mw-engine.utils/abs -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/*sealevel* -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/rainfall -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/rain-row -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/rain-world -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow-contributors -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/is-hollow -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flood-hollow -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flood-hollows -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/max-altitude -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow-nr -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow-world-nr -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/flow-world -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/explore-lake -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/is-lake? -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/find-lakes -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/run-drainage -clj꞉mw-engine.drainage꞉>  -#'mw-engine.drainage/run-drainage -clj꞉mw-engine.drainage꞉>  -nil -clj꞉mw-engine.heightmap꞉>  -#'mw-engine.heightmap/tag-property -clj꞉mw-engine.heightmap꞉>  -#'mw-engine.heightmap/tag-gradient -clj꞉mw-engine.heightmap꞉>  -#'mw-engine.heightmap/tag-gradients -clj꞉mw-engine.heightmap꞉>  -#'mw-engine.heightmap/tag-altitude -clj꞉mw-engine.heightmap꞉>  -#'mw-engine.heightmap/apply-heightmap -clj꞉mw-engine.heightmap꞉>  -nil -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/member? -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-int-or-zero -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/in-bounds -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/in-bounds? -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/map-world-n-n -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/map-world-p-p -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/map-world -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-cell -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-int -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/population -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/memo-get-neighbours -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-neighbours -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-neighbours-with-property-value -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-neighbours-with-state -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/get-least-cell -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/set-cell-property -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/set-property -clj꞉mw-engine.utils꞉>  -#'mw-engine.utils/merge-cell -clj꞉mw-engine.utils꞉>  -nil -clj꞉mw-engine.world꞉>  -#'mw-engine.world/make-cell -clj꞉mw-engine.world꞉>  -#'mw-engine.world/make-world-row -clj꞉mw-engine.world꞉>  -#'mw-engine.world/make-world-rows -clj꞉mw-engine.world꞉>  -#'mw-engine.world/make-world -clj꞉mw-engine.world꞉>  -#'mw-engine.world/truncate-state -clj꞉mw-engine.world꞉>  -#'mw-engine.world/format-cell -clj꞉mw-engine.world꞉>  -#'mw-engine.world/format-world-row -clj꞉mw-engine.world꞉>  -#'mw-engine.world/print-world -clj꞉mw-engine.world꞉>  -; nREPL Connection was closed diff --git a/src/cljc/mw_engine/core.clj b/src/cljc/mw_engine/core.clj index c35bdc1..5c95e58 100644 --- a/src/cljc/mw_engine/core.clj +++ b/src/cljc/mw_engine/core.clj @@ -82,16 +82,17 @@ (apply-rules world cell rules) {:generation (+ (get-int-or-zero cell :generation) 1)}) (catch Exception e - (merge cell {:error - (format "%s with message `%s` at generation %d when in state %s" - (-> e .getClass .getName) - (.getMessage e) - (:generation cell) - (:state cell)) + (let [narrative (format "%s with message `%s` at generation %d when in state %s" + (-> e .getClass .getName) + (.getMessage e) + (:generation cell) + (:state cell))] + (l/warn e narrative) + (merge cell {:error narrative :stacktrace ;; (remove #(starts-with? % "clojure.") (map #(.toString %) (.getStackTrace e)) ;;) - :state :error})))) + :state :error}))))) (defn transform-world "Return a world derived from this `world` by applying the production rules