120 lines
7.3 KiB
HTML
120 lines
7.3 KiB
HTML
<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>
|