| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-06 15:54:18 +0200 | 
| commit | ee9c2ac044cc77b80f30420c8f0788cad4281084 (patch) | |
| tree | 6ce9c45b6c0f0c556839b6f462f84eab06e26594 /src/battlemap/struct/bm_turn_result.erl | |
| parent | 97f7511e61cebae3676a83aa9c0dc2efb15d8d8c (diff) | |
Figuring out how to organize the src folder(s)...
Diffstat (limited to 'src/battlemap/struct/bm_turn_result.erl')
| -rw-r--r-- | src/battlemap/struct/bm_turn_result.erl | 142 | 
1 files changed, 142 insertions, 0 deletions
| diff --git a/src/battlemap/struct/bm_turn_result.erl b/src/battlemap/struct/bm_turn_result.erl new file mode 100644 index 0000000..c3440bd --- /dev/null +++ b/src/battlemap/struct/bm_turn_result.erl @@ -0,0 +1,142 @@ +-module(bm_turn_result). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +-record +( +   switched_weapon, +   { +      character_ix :: bm_character:id() +   } +). + +-record +( +   moved, +   { +      character_ix :: bm_character:id(), +      path :: list(bm_direction:enum()), +      new_location :: bm_location:type() +   } +). + +-record +( +   attacked, +   { +      attacker_ix :: bm_character:id(), +      defender_ix :: bm_character:id(), +      sequence :: list(bm_attack:type()) +   } +). + +-opaque type() :: (#switched_weapon{} | #moved{} | #attacked{}). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( +   [ +      new_character_switched_weapons/1, +      new_character_moved/3, +      new_character_attacked/3 +   ] +). + +-export +( +   [ +      encode/1 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new_character_switched_weapons (bm_character:id()) -> type(). +new_character_switched_weapons (CharacterIX) -> +   #switched_weapon { character_ix = CharacterIX }. + +-spec new_character_moved +   ( +      bm_character:id(), +      list(bm_direction:enum()), +      bm_location:type() +   ) +   -> type(). +new_character_moved (CharacterIX, Path, NewLocation) -> +   #moved +   { +      character_ix = CharacterIX, +      path = Path, +      new_location = NewLocation +   }. + +-spec new_character_attacked +   ( +      bm_character:id(), +      bm_character:id(), +      list(bm_attack:type()) +   ) +   -> type(). +new_character_attacked (AttackerIX, DefenderIX, AttackSequence) -> +   #attacked +   { +      attacker_ix = AttackerIX, +      defender_ix = DefenderIX, +      sequence = AttackSequence +   }. + +-spec encode (type()) -> {list(any())}. +encode (TurnResult) when is_record(TurnResult, switched_weapon) -> +   CharacterIX = TurnResult#switched_weapon.character_ix, + +   { +      [ +         {<<"t">>, <<"swp">>}, +         {<<"ix">>, CharacterIX} +      ] +   }; +encode (TurnResult) when is_record(TurnResult, moved) -> +   CharacterIX = TurnResult#moved.character_ix, +   Path = TurnResult#moved.path, +   NewLocation = TurnResult#moved.new_location, + +   EncodedPath = lists:map(fun bm_direction:encode/1, Path), +   EncodedNewLocation = bm_location:encode(NewLocation), + +   { +      [ +         {<<"t">>, <<"mv">>}, +         {<<"ix">>, CharacterIX}, +         {<<"p">>, EncodedPath}, +         {<<"nlc">>, EncodedNewLocation} +      ] +   }; +encode (TurnResult) when is_record(TurnResult, attacked) -> +   AttackerIX = TurnResult#attacked.attacker_ix, +   DefenderIX = TurnResult#attacked.defender_ix, +   Sequence = TurnResult#attacked.sequence, + +   EncodedSequence = lists:map(fun bm_attack:encode/1, Sequence), + +   { +      [ +         {<<"t">>, <<"atk">>}, +         {<<"aix">>, AttackerIX}, +         {<<"dix">>, DefenderIX}, +         {<<"seq">>, EncodedSequence} +      ] +   }; +encode (Other) -> +   io:format("~n invalid encode param\"~p\"~n", [Other]), +   true = Other. | 


