| summaryrefslogtreecommitdiff | 
diff options
| -rw-r--r-- | src/battlemap/bm_shim.erl | 2 | ||||
| -rw-r--r-- | src/battlemap/game-logic/bm_next_turn.erl | 21 | ||||
| -rw-r--r-- | src/battlemap/reply/bm_add_char.erl | 9 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_character.erl | 13 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_player.erl | 12 | ||||
| -rw-r--r-- | src/battlemap/struct/bm_turn_result.erl | 75 | 
6 files changed, 121 insertions, 11 deletions
| diff --git a/src/battlemap/bm_shim.erl b/src/battlemap/bm_shim.erl index 4fdff05..6dd8cf2 100644 --- a/src/battlemap/bm_shim.erl +++ b/src/battlemap/bm_shim.erl @@ -137,7 +137,7 @@ generate_random_battle () ->     %Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight),     Battlemap = bm_battlemap:from_list(0, 32, 32, demo_map()),     Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []), -   PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)], +   PlayersAsList = [bm_player:new(0, <<"0">>), bm_player:new(1, <<"1">>)],     {UsedWeaponIDs, UsedArmorIDs} =        lists:foldl diff --git a/src/battlemap/game-logic/bm_next_turn.erl b/src/battlemap/game-logic/bm_next_turn.erl index 79cea14..74f3ea5 100644 --- a/src/battlemap/game-logic/bm_next_turn.erl +++ b/src/battlemap/game-logic/bm_next_turn.erl @@ -114,17 +114,28 @@ update (Update) ->        activate_next_players_characters(S1Battle, NextPlayer),     S0Data = bm_character_turn_data:set_battle(S2Battle, Data), -   S0Update = bm_character_turn_update:set_data(S0Data, Update), +   S0Update = +      bm_character_turn_update:add_to_timeline +      ( +         bm_turn_result:new_player_turn_started +         ( +            bm_player:get_index(NextPlayer) +         ), +         DBQuery0, +         Update +      ), + +   S1Update = bm_character_turn_update:set_data(S0Data, S0Update), -   S1Update = +   S2Update =        lists:foldl        (           fun bm_character_turn_update:add_to_db/2, -         S0Update, -         [DBQuery0|[DBQuery1|DBQueries]] +         S1Update, +         [DBQuery1|DBQueries]        ), -   S1Update. +   S2Update.  -spec requires_update (bm_character_turn_update:type()) -> boolean().  requires_update (Update) -> diff --git a/src/battlemap/reply/bm_add_char.erl b/src/battlemap/reply/bm_add_char.erl index d7b76c3..0fbaf82 100644 --- a/src/battlemap/reply/bm_add_char.erl +++ b/src/battlemap/reply/bm_add_char.erl @@ -12,6 +12,14 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec rank_to_string (bm_character:rank()) -> binary(). +rank_to_string (Rank) -> +   case Rank of +      optional -> <<"o">>; +      target -> <<"t">>; +      commander -> <<"c">> +   end. +  -spec attributes_as_json     (        sh_attributes:type() @@ -50,6 +58,7 @@ generate (IX, Character, PlayerID) ->           {<<"msg">>, <<"add_char">>},           {<<"ix">>, IX},           {<<"nam">>, bm_character:get_name(Character)}, +         {<<"rnk">>, rank_to_string(bm_character:get_rank(Character))},           {<<"ico">>, bm_character:get_icon(Character)},           {<<"prt">>, bm_character:get_portrait(Character)},           { diff --git a/src/battlemap/struct/bm_character.erl b/src/battlemap/struct/bm_character.erl index 1fbd3b1..41c0fb4 100644 --- a/src/battlemap/struct/bm_character.erl +++ b/src/battlemap/struct/bm_character.erl @@ -4,6 +4,7 @@  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -type id() :: non_neg_integer(). +-type rank() :: ('optional' | 'target' | 'commander').  -record  ( @@ -12,6 +13,7 @@        id :: id(),        owner_id :: bm_player:id(),        name :: binary(), +      rank :: rank(),        icon :: binary(),        portrait :: binary(),        attributes :: sh_attributes:type(), @@ -26,7 +28,7 @@  -opaque type() :: #character{}. --export_type([type/0, id/0]). +-export_type([type/0, rank/0, id/0]).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -37,6 +39,7 @@        get_id/1,        get_owner_id/1,        get_name/1, +      get_rank/1,        get_icon/1,        get_portrait/1,        get_attributes/1, @@ -111,6 +114,9 @@ get_owner_id (Char) -> Char#character.owner_id.  -spec get_name (type()) -> binary().  get_name (Char) -> Char#character.name. +-spec get_rank (type()) -> rank(). +get_rank (Char) -> Char#character.rank. +  -spec get_icon (type()) -> binary().  get_icon (Char) -> Char#character.icon. @@ -224,6 +230,11 @@ random (ID, OwnerID, BattlemapWidth, BattlemapHeight, ForbiddenLocations) ->        id = ID,        owner_id = OwnerID,        name = list_to_binary("Char" ++ IDAsListString), +      rank = +         if +            ((ID rem 8) == 0) -> commander; +            true -> optional +         end,        icon = IDAsBinaryString,        portrait = IDAsBinaryString,        attributes = Attributes, diff --git a/src/battlemap/struct/bm_player.erl b/src/battlemap/struct/bm_player.erl index fa877c1..9be2a95 100644 --- a/src/battlemap/struct/bm_player.erl +++ b/src/battlemap/struct/bm_player.erl @@ -9,6 +9,7 @@  (     player,     { +      ix :: non_neg_integer(),        id :: id(),        timeline :: list(any())     } @@ -24,6 +25,7 @@  (     [        get_id/1, +      get_index/1,        get_timeline/1,        add_to_timeline/2,        reset_timeline/1, @@ -35,7 +37,7 @@  -export  (     [ -      new/1 +      new/2     ]  ). @@ -49,6 +51,9 @@  -spec get_id (type()) -> id().  get_id (Player) -> Player#player.id. +-spec get_index (type()) -> non_neg_integer(). +get_index (Player) -> Player#player.ix. +  -spec get_timeline (type()) -> list(any()).  get_timeline (Player) -> Player#player.timeline. @@ -64,10 +69,11 @@ add_to_timeline (NewEvents, Player) ->  -spec reset_timeline (type()) -> type().  reset_timeline (Player) -> Player#player{ timeline = [] }. --spec new (id()) -> type(). -new (ID) -> +-spec new (non_neg_integer(), id()) -> type(). +new (IX, ID) ->     #player     { +      ix = IX,        id = ID,        timeline = []     }. diff --git a/src/battlemap/struct/bm_turn_result.erl b/src/battlemap/struct/bm_turn_result.erl index c3440bd..79fd7f3 100644 --- a/src/battlemap/struct/bm_turn_result.erl +++ b/src/battlemap/struct/bm_turn_result.erl @@ -32,7 +32,38 @@     }  ). --opaque type() :: (#switched_weapon{} | #moved{} | #attacked{}). +-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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -42,6 +73,9 @@  -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 @@ -62,6 +96,18 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% 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 (bm_character:id()) -> type().  new_character_switched_weapons (CharacterIX) ->     #switched_weapon { character_ix = CharacterIX }. @@ -137,6 +183,33 @@ encode (TurnResult) when is_record(TurnResult, attacked) ->           {<<"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. | 


