-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPath.elm
71 lines (59 loc) · 1.87 KB
/
Path.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
module Path exposing (fromTo, renderList)
import Map exposing (Map)
import AStar
import Element exposing (Element)
import Collage exposing (defaultLine)
import Color
import Coordinate
fromTo : Map -> ( Int, Int ) -> ( Int, Int ) -> Maybe AStar.Path
fromTo map fromCoords ( toX, toY ) =
let
destination =
Map.tileNumberFromCoords toX toY map
|> Map.centerOfTile map
|> Coordinate.toTuple
in
AStar.findPath AStar.straightLineCost
(Map.validMovesFrom map)
fromCoords
destination
renderList : List (Maybe AStar.Path) -> Element
renderList paths =
paths
|> List.map render
|> Element.layers
render : Maybe AStar.Path -> Element
render path =
case path of
Nothing ->
Element.empty
Just p ->
-- Collage.path [ ( 0, 0 ), ( 480, -480 ) ]
-- |> Collage.traced { defaultLine | width = 10 }
-- |> Collage.move ( -480, 480 )
-- |> List.singleton
-- |> Collage.collage 960 960
-- Collage.rect 480 480
-- |> Collage.filled Color.black
-- |> List.singleton
-- |> Collage.collage 960 960
Element.layers [ line p, points p ]
line : AStar.Path -> Element
line path =
path
|> List.map (\( x, y ) -> ( toFloat x, negate <| toFloat y ))
|> Collage.path
|> Collage.traced defaultLine
|> Collage.move ( -480, 480 )
|> List.singleton
|> Collage.collage 960 960
points : AStar.Path -> Element
points path =
path
|> List.map
(\( x, y ) ->
Collage.circle 5
|> Collage.filled Color.black
|> Collage.move ( toFloat (x - 480), toFloat (480 - y) )
)
|> Collage.collage 960 960