<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../../coverage.css"/> <title> the_great_game/world/location.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns the-great-game.world.location </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 002 "Functions dealing with location in the world." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 003 (:require [clojure.math.numeric-tower :refer [expt sqrt]])) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 004 </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 005 ;; A 'location' value is a list comprising at most the x/y coordinate location </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 006 ;; and the ids of the settlement and region (possibly hierarchically) that contain </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 007 ;; the location. If the x/y is not local to the home of the receiving agent, they </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 008 ;; won't remember it and won't pass it on; if any of the ids are not interesting </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 009 ;; So location information will degrade progressively as the item is passed along. </span><br/> <span class="blank" title="0 out of 0 forms covered"> 010 </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 011 ;; It is assumed that the `:home` of a character is a location in this sense. </span><br/> <span class="blank" title="0 out of 0 forms covered"> 012 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 013 (defn get-coords </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 014 "Return the coordinates in the game world of `location`, which may be </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 015 1. A coordinate pair in the format {:x 5 :y 32}; </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 016 2. A location, as discussed above; </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 017 3. Any other gameworld object, having a `:location` property whose value </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 018 is one of the above." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 019 [location] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 020 (cond </span><br/> <span class="covered" title="3 out of 3 forms covered"> 021 (empty? location) nil </span><br/> <span class="covered" title="3 out of 3 forms covered"> 022 (map? location) </span><br/> <span class="partial" title="1 out of 3 forms covered"> 023 (cond </span><br/> <span class="partial" title="13 out of 14 forms covered"> 024 (and (number? (:x location)) (number? (:y location))) </span><br/> <span class="covered" title="1 out of 1 forms covered"> 025 location </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 026 (:location location) </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 027 (:location location)) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 028 :else </span><br/> <span class="covered" title="8 out of 8 forms covered"> 029 (get-coords (first (remove keyword? location))))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 030 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 031 (defn distance-between </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 032 [location-1 location-2] </span><br/> <span class="covered" title="4 out of 4 forms covered"> 033 (let [c1 (get-coords location-1) </span><br/> <span class="covered" title="3 out of 3 forms covered"> 034 c2 (get-coords location-2)] </span><br/> <span class="covered" title="2 out of 2 forms covered"> 035 (when </span><br/> <span class="partial" title="5 out of 6 forms covered"> 036 (and c1 c2) </span><br/> <span class="covered" title="23 out of 23 forms covered"> 037 (sqrt (+ (expt (- (:x c1) (:x c2)) 2) (expt (- (:y c1) (:y c2)) 2)))))) </span><br/> </body> </html>