From fde827cba1ff3d889135c74ee1978098465fd200 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Wed, 11 Jul 2018 17:54:14 +0200 Subject: "Battlemap" -> "Battle". --- src/battle/struct/btl_turn_result.erl | 215 ++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 src/battle/struct/btl_turn_result.erl (limited to 'src/battle/struct/btl_turn_result.erl') diff --git a/src/battle/struct/btl_turn_result.erl b/src/battle/struct/btl_turn_result.erl new file mode 100644 index 0000000..97169e3 --- /dev/null +++ b/src/battle/struct/btl_turn_result.erl @@ -0,0 +1,215 @@ +-module(btl_turn_result). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% +-record +( + switched_weapon, + { + character_ix :: btl_character:id() + } +). + +-record +( + moved, + { + character_ix :: btl_character:id(), + path :: list(btl_direction:enum()), + new_location :: btl_location:type() + } +). + +-record +( + attacked, + { + attacker_ix :: btl_character:id(), + defender_ix :: btl_character:id(), + sequence :: list(btl_attack:type()) + } +). + +-record +( + player_won, + { + player_ix :: non_neg_integer() + } +). + +-record +( + player_lost, + { + player_ix :: non_neg_integer() + } +). + +-record +( + player_turn_started, + { + player_ix :: non_neg_integer() + } +). + +-opaque type() :: ( + #switched_weapon{} + | #moved{} + | #attacked{} + | #player_won{} + | #player_lost{} + | #player_turn_started{} +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( + [ + new_player_won/1, + new_player_lost/1, + new_player_turn_started/1, + new_character_switched_weapons/1, + new_character_moved/3, + new_character_attacked/3 + ] +). + +-export +( + [ + encode/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new_player_won (non_neg_integer()) -> type(). +new_player_won (PlayerIX) -> + #player_won { player_ix = PlayerIX }. + +-spec new_player_lost (non_neg_integer()) -> type(). +new_player_lost (PlayerIX) -> + #player_lost { player_ix = PlayerIX }. + +-spec new_player_turn_started (non_neg_integer()) -> type(). +new_player_turn_started (PlayerIX) -> + #player_turn_started { player_ix = PlayerIX }. + +-spec new_character_switched_weapons (btl_character:id()) -> type(). +new_character_switched_weapons (CharacterIX) -> + #switched_weapon { character_ix = CharacterIX }. + +-spec new_character_moved + ( + btl_character:id(), + list(btl_direction:enum()), + btl_location:type() + ) + -> type(). +new_character_moved (CharacterIX, Path, NewLocation) -> + #moved + { + character_ix = CharacterIX, + path = Path, + new_location = NewLocation + }. + +-spec new_character_attacked + ( + btl_character:id(), + btl_character:id(), + list(btl_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 btl_direction:encode/1, Path), + EncodedNewLocation = btl_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 btl_attack:encode/1, Sequence), + + { + [ + {<<"t">>, <<"atk">>}, + {<<"aix">>, AttackerIX}, + {<<"dix">>, DefenderIX}, + {<<"seq">>, EncodedSequence} + ] + }; +encode (TurnResult) when is_record(TurnResult, player_won) -> + PlayerIX = TurnResult#player_won.player_ix, + + { + [ + {<<"t">>, <<"pwo">>}, + {<<"ix">>, PlayerIX} + ] + }; +encode (TurnResult) when is_record(TurnResult, player_lost) -> + PlayerIX = TurnResult#player_lost.player_ix, + + { + [ + {<<"t">>, <<"plo">>}, + {<<"ix">>, PlayerIX} + ] + }; +encode (TurnResult) when is_record(TurnResult, player_turn_started) -> + PlayerIX = TurnResult#player_turn_started.player_ix, + + { + [ + {<<"t">>, <<"pts">>}, + {<<"ix">>, PlayerIX} + ] + }; +encode (Other) -> + io:format("~n invalid encode param\"~p\"~n", [Other]), + true = Other. -- cgit v1.2.3-70-g09d2