| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2017-11-21 17:35:32 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2017-11-21 17:35:32 +0100 | 
| commit | f633e4d5320806f13b4cffa8dbef0f59a08ae90f (patch) | |
| tree | 00759914fa79b18577e0cc0368403db4ee60d8f4 /src/battlemap/cross.erl | |
| parent | eea0d1d6d519bba540c261787a6223536abf237b (diff) | |
Server/client disagreement on tile crossing cost.
Diffstat (limited to 'src/battlemap/cross.erl')
| -rw-r--r-- | src/battlemap/cross.erl | 62 | 
1 files changed, 62 insertions, 0 deletions
| diff --git a/src/battlemap/cross.erl b/src/battlemap/cross.erl new file mode 100644 index 0000000..add9c27 --- /dev/null +++ b/src/battlemap/cross.erl @@ -0,0 +1,62 @@ +-export([cross/5]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +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, _CharInstsLocs) -> +   io:format("~nPoints remaining: ~p ~n", [Points]), +   true = (Points >= 0), +   {X, Y}; +calc_new_loc (X, Y, [Step|Path], Points, Map, CharInstsLocs) -> +   io:format("~nStep - Points remaining: ~p ~n", [Points]), +   {NX, NY} = next_loc(X, Y, Step), +   TileCost =  +      tile:get_cost +      ( +         array:get +         ( +            loc_to_index(NX, NY, Map), +            Map#battlemap.content +         ) +      ), +   io:format("~nStep cost: ~p ~n", [TileCost]), +   NPoints = +      ( +         Points +         - +         TileCost +      ), +   false = lists:member({NX, NY}, CharInstsLocs), +   calc_new_loc(NX, NY, Path, NPoints, Map, CharInstsLocs). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +cross (Battlemap, {X, Y}, Points, Path, CharInsts) -> +   calc_new_loc +   ( +      X, +      Y, +      Path, +      Points, +      Battlemap, +      lists:map +      ( +         fun character_instance:get_location/1, +         CharInsts +      ) +   ). | 


