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
|
-module(battlemap).
-export
(
[
cross/4
]
).
-include("timed_cache_data.hrl").
next_loc (X, Y, <<"L">>) -> {(X - 1), Y};
next_loc (X, Y, <<"R">>) -> {(X + 1), Y};
next_loc (X, Y, <<"U">>) -> {X, (Y - 1)};
next_loc (X, Y, <<"D">>) -> {X, (Y + 1)}.
loc_to_index(X, Y, Map) ->
if
(X < 0) -> error;
(Y < 0) -> error;
(X >= Map#battlemap.width) -> error;
true -> ((Y * Map#battlemap.width) + X)
end.
calc_new_loc (X, Y, [], Points, _Map, _OtherCharsLocs) ->
true = (Points >= 0),
{X, Y};
calc_new_loc (X, Y, [Step|Path], Points, Map, OtherCharsLocs) ->
{NX, NY} = next_loc(X, Y, Step),
NPoints =
(
Points
-
tile:get_cost
(
array:get
(
loc_to_index(X, Y, Map),
Map#battlemap.content
)
)
),
false = lists:member({NX, NY}, OtherCharsLocs),
calc_new_loc(NX, NY, Path, NPoints, Map, OtherCharsLocs).
cross (Battlemap, CharInst, Path, OtherChars) ->
{X, Y} = character_instance:get_location(CharInst),
OtherCharsLocs =
lists:map
(
fun character_instance:get_location/1,
OtherChars
),
{ok, calc_new_loc(X, Y, Path, 99, Battlemap, OtherCharsLocs)}.
|