summaryrefslogtreecommitdiff
blob: 0b742d99467589705f9ee5b2db7cbcdb2775b92e (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
-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)}.