blob: 309b5388abe29a68d2f09531afd9301f488674c9 (
plain)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
module Battlemap exposing
(
Type,
apply_to_tile,
apply_to_tile_unsafe,
has_location,
apply_to_all_tiles
)
import Array
import Battlemap.Tile
import Battlemap.Direction
import Battlemap.Location
type alias Type =
{
width : Int,
height : Int,
content : (Array.Array Battlemap.Tile.Type)
}
location_to_index : Type -> Battlemap.Location.Type -> Int
location_to_index bmap loc =
((loc.y * bmap.width) + loc.x)
has_location : Type -> Battlemap.Location.Type -> Bool
has_location bmap loc =
(
(loc.x >= 0)
&& (loc.y >= 0)
&& (loc.x < bmap.width)
&& (loc.y < bmap.height)
)
apply_to_all_tiles : (
Type -> (Battlemap.Tile.Type -> Battlemap.Tile.Type) -> Type
)
apply_to_all_tiles bmap fun =
{bmap |
content = (Array.map fun bmap.content)
}
apply_to_tile : (
Type ->
Battlemap.Location.Type ->
(Battlemap.Tile.Type -> Battlemap.Tile.Type) ->
(Maybe Type)
)
apply_to_tile bmap loc fun =
let
index = (location_to_index bmap loc)
at_index = (Array.get index bmap.content)
in
case at_index of
Nothing ->
Nothing
(Just tile) ->
(Just
{bmap |
content =
(Array.set
index
(fun tile)
bmap.content
)
}
)
apply_to_tile_unsafe : (
Type ->
Battlemap.Location.Type ->
(Battlemap.Tile.Type -> Battlemap.Tile.Type) ->
Type
)
apply_to_tile_unsafe bmap loc fun =
let
index = (location_to_index bmap loc)
at_index = (Array.get index bmap.content)
in
case at_index of
Nothing -> bmap
(Just tile) ->
{bmap |
content =
(Array.set
index
(fun tile)
bmap.content
)
}
|