| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-23 21:22:37 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-23 21:22:37 +0100 | 
| commit | 959b994bced0863d4b8a984f38f5ac61aa3620e0 (patch) | |
| tree | a9dbce8e22dd818f60e7cb70557dddad70c85ca9 /src/query/character_turn.erl | |
| parent | f512cb83df8dea9fb39bd98540b0616fe7607f6d (diff) | |
Still working on character_turn queries...
Diffstat (limited to 'src/query/character_turn.erl')
| -rw-r--r-- | src/query/character_turn.erl | 200 | 
1 files changed, 111 insertions, 89 deletions
| diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index d71c64a..19b6cff 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -12,9 +12,9 @@        player_id,        session_token,        battlemap_instance_id, -      character_instance_id, +      character_instance_ix,        path, -      target_id +      target_ix     }  ). @@ -23,8 +23,17 @@     query_state,     {        battlemap_instance, -      character_instance, -      rolls +      character_instance +   } +). + +-record +( +   query_result, +   { +      is_new_turn, +      updated_character_instance_ixs, +      updated_battlemap_instance     }  ). @@ -38,16 +47,16 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  parse_input (Req) ->     JSONReqMap = jiffy:decode(Req, [return_maps]), -   CharacterInstanceID = binary_to_integer(maps:get(<<"cid">>, JSONReqMap)), -   TargetID = binary_to_integer(maps:get(<<"tid">>, JSONReqMap)), +   CharacterInstanceIX = binary_to_integer(maps:get(<<"cix">>, JSONReqMap)), +   TargetIX = binary_to_integer(maps:get(<<"tix">>, JSONReqMap)),     #input     {        player_id = maps:get(<<"pid">>, JSONReqMap),        session_token = maps:get(<<"stk">>, JSONReqMap),        battlemap_instance_id = maps:get(<<"bmp">>, JSONReqMap), -      character_instance_id = CharacterInstanceID, +      character_instance_ix = CharacterInstanceIX,        path = maps:get(<<"p">>, JSONReqMap), -      target_id = TargetID +      target_ix = TargetIX     }.  fetch_data (Input) -> @@ -61,17 +70,16 @@ fetch_data (Input) ->     CharacterInstance =        array:get        ( -         Input#input.character_instance_id, +         Input#input.character_instance_ix,           battlemap_instance:get_character_instances(BattlemapInstance)        ),     #query_state     {        battlemap_instance = BattlemapInstance, -      character_instance = CharacterInstance, -      rolls = [] +      character_instance = CharacterInstance     }. -assert_character_can_be_played (QueryState, Input) -> +assert_character_instance_can_be_played (QueryState, Input) ->     %%% Var     BattlemapInstance = QueryState#query_state.battlemap_instance,     PlayerID = Input#input.player_id, @@ -80,20 +88,20 @@ assert_character_can_be_played (QueryState, Input) ->     PlayerID =        arrays:get        ( -         player_turn:get_player_id +         player_turn:get_player_ix           (              battlemap_instance:get_player_turn(BattlemapInstance)           ), -         battlemap_instance:get_players(BattlemapInstance) +         battlemap_instance:get_player_ids(BattlemapInstance)        ),     PlayerID = -      character:get_owner +      character:get_owner_id        (           character_instance:get_character(ControlledCharacterInstance)        ), -   true = character_instance:is_active(ControlledCharacterInstance). +   true = character_instance:get_is_active(ControlledCharacterInstance). -handle_character_moving (QueryState, Input) -> +handle_character_instance_moving (QueryState, Input) ->     BattlemapInstance = QueryState#query_state.battlemap_instance,     ControlledCharacterInstance = QueryState#query_state.character_instance,     ControlledCharacter = @@ -130,10 +138,12 @@ handle_character_moving (QueryState, Input) ->           )     }. -handle_character_switching_weapons (QueryState) -> +handle_character_instance_switching_weapons (QueryState) ->     ControlledCharacterInstance = QueryState#query_state.character_instance,     ControlledCharacter =        character_instance:get_character(ControlledCharacterInstance), +   {PrimaryWeapon, SecondaryWeapon} = +      character:get_weapons(ControlledCharacter),     QueryState#query_state     {        character_instance = @@ -141,20 +151,17 @@ handle_character_switching_weapons (QueryState) ->           (              character:set_weapons              ( -               weapon_set:switch -               ( -                  character:get_weapons(ControlledCharacter) -               ), +               {SecondaryWeapon, PrimaryWeapon},                 ControlledCharacter              ),              ControlledCharacterInstance           )     }. --include("character_turn/handle_character_attacking_2.erl"). +-include("character_turn/handle_character_instance_attacking_2.erl").  get_type_of_turn (Input) -> -   case {Input#input.path, Input#input.target_id} of +   case {Input#input.path, Input#input.target_ix} of        {[], -1} -> [nothing, nothing];        {[], _} -> [nothing, attack];        {[<<"S">>], -1} -> [switch, nothing]; @@ -174,131 +181,137 @@ finalize_character_instance (QueryState, Input) ->     QueryState#query_state     {        battlemap_instance = -         battlemap_instance:set_characters +         battlemap_instance:set_character_instances           (              array:set              ( -               Input#input.character_instance_id, +               Input#input.character_instance_ix,                 FinalizedCharacterInstance, -               battlemap_instance:get_characters(BattlemapInstance) +               battlemap_instance:get_character_instances(BattlemapInstance)              ),              BattlemapInstance           ),        character_instance = FinalizedCharacterInstance     }. -unnamed_function (IDs, CharacterInstances, _Owner, -1) -> -   {IDs, CharacterInstances}; -unnamed_function (IDs, CharacterInstances, Owner, I) -> -   CharacterInstance = array:get(I, CharacterInstances), +activate_relevant_character_instances (IXs, CharacterInstances, _Owner, -1) -> +   {IXs, CharacterInstances}; +activate_relevant_character_instances (IXs, CharacterInstances, Owner, IX) -> +   CharacterInstance = array:get(IX, CharacterInstances),     Character = character_instance:get_character(CharacterInstance), -   case character:get_owner(Character) of +   case character:get_owner_id(Character) of        OwnerID when (OwnerID == Owner) -> -         unnamed_function +         activate_relevant_character_instances           ( -            [I|IDs], +            [IX|IXs],              array:set              ( -               I, +               IX,                 character_instance:set_is_active(true, CharacterInstance),                 CharacterInstances              ),              Owner, -            (I - 1) +            (IX - 1)           );        _ -> -         unnamed_function +         activate_relevant_character_instances           ( -            IDs, +            IXs,              CharacterInstances,              Owner, -            (I - 1) +            (IX - 1)           )     end.  start_next_players_turn (QueryState, Input) ->     BattlemapInstance = QueryState#query_state.battlemap_instance, -   Players = battlemap_instance:get_players(BattlemapInstance), +   PlayerIDs = battlemap_instance:get_player_ids(BattlemapInstance),     PlayerTurn = battlemap_instance:get_player_turn(BattlemapInstance), -   CurrentPlayerID = player_turn:get_player_id(PlayerTurn), +   CurrentPlayerIX = player_turn:get_player_ix(PlayerTurn),     CurrentTurnNumber = player_turn:get_number(PlayerTurn),     CharacterInstances =        battlemap_instance:get_character_instances(BattlemapInstance), -   NextPlayer = ((CurrentPlayerID + 1) rem (array:size(Players))), +   NextPlayerIX = ((CurrentPlayerIX + 1) rem (array:size(PlayerIDs))),     NextPlayerTurn =        player_turn:new        ( -         case NextPlayer of +         case NextPlayerIX of              0 -> (CurrentTurnNumber + 1);              _ -> CurrentTurnNumber           end, -         NextPlayer +         NextPlayerIX        ), -   {ActivatedCharacterInstancesID, UpdatedCharacterInstances} = -      unnamed_function +   {ActivatedCharacterInstanceIXs, UpdatedCharacterInstances} = +      activate_relevant_character_instances        (           [],           CharacterInstances, -         array:get(NextPlayer, Players), +         array:get(NextPlayerIX, PlayerIDs),           array:size(CharacterInstances)        ), -   { -      ActivatedCharacterInstancesID, -      QueryState#query_state -      { -         battlemap_instance = -            battlemap_instance:set_character_instances -            ( -               UpdatedCharacterInstances, -               battlemap_instance:set_player_turn -               ( -                  NextPlayerTurn, -                  BattlemapInstance -               ) -            ) -      } -   }. +   UpdatedBattlemapInstance = +      battlemap_instance:set_character_instances +      ( +         UpdatedCharacterInstances, +         battlemap_instance:set_player_turn +         ( +            NextPlayerTurn, +            BattlemapInstance +         ) +      ), +   {ActivatedCharacterInstanceIXs, UpdatedBattlemapInstance}.  finalize_character_turn (QueryState, Input) ->     BattlemapInstance = QueryState#query_state.battlemap_instance, -   Players = battlemap_instance:get_players(BattlemapInstance), +   CharacterInstances = +      battlemap_instance:get_character_instances(BattlemapInstance), -   CharacterInstanceRemains = +   AnActiveCharacterInstanceRemains =        array:foldl        ( -         fun (_I, CharacterInstance, Prev) -> +         fun (_IX, CharacterInstance, Prev) ->              (Prev or character_instance:get_is_active(CharacterInstance))           end, -         Players +         CharacterInstances        ), -   case CharacterInstanceRemains of -      true -> {false, {[], QueryState}}; -      false -> {true, start_next_players_turn(QueryState, Input)} +   case AnActiveCharacterInstanceRemains of +      true -> +         #query_result +         { +            is_new_turn = false, +            updated_character_instance_ixs = [], +            updated_battlemap_instance = BattlemapInstance +         }; +      false -> +         {UpdatedCharacterInstanceIXs, UpdatedBattlemapInstance} = +            start_next_players_turn(QueryState, Input), +         #query_result +         { +            is_new_turn = true, +            updated_character_instance_ixs = UpdatedCharacterInstanceIXs, +            updated_battlemap_instance = UpdatedBattlemapInstance +         }     end. -play (QueryState, [], Input) -> -   finalize_character_turn -   ( -      finalize_character_instance(QueryState, Input), -      Input -   ); +play (QueryState, [], _Input) -> +   QueryState;  play (QueryState, [nothing|Next], Input) ->     play(QueryState, Next, Input);  play (QueryState, [move|Next], Input) ->     play     ( -      handle_character_moving(QueryState, Input), +      handle_character_instance_moving(QueryState, Input),        Next,        Input     );  play (QueryState, [switch|Next], Input) ->     play     ( -      handle_character_switching_weapons(QueryState), +      handle_character_instance_switching_weapons(QueryState),        Next,        Input     ); @@ -306,32 +319,41 @@ play (QueryState, [switch|Next], Input) ->  play (QueryState, [attack|Next], Input) ->     play     ( -      handle_character_attacking(QueryState, Input), +      handle_character_instance_attacking(QueryState, Input),        Next,        Input     ). -send_to_database (QueryState, TurnType, Input) -> +send_to_database (QueryResult, TurnType, Input) ->     unimplemented. -update_cache (QueryState, TurnType, Input) -> +update_cache (QueryResult, TurnType, Input) ->     unimplemented. -generate_reply (QueryState, TurnType, Input) -> +generate_reply (QueryResult, TurnType, Input) ->     jiffy:encode([[<<"ok">>]]).  handle (Req) ->     Input = parse_input(Req),     security:assert_identity(Req#input.player_id, Req#input.session_token), +   security:lock_queries(Req#input.player_id),     QueryState = fetch_data(Input), -   assert_character_can_be_played(Input, QueryState), +   assert_character_instance_can_be_played(Input, QueryState),     TurnType = get_type_of_turn(Input), -   {IsNewTurn, {UpdatedCharacterInstancesID, PostPlayQueryState}} = -      play(QueryState, TurnType, Input), -   send_to_database(PostPlayQueryState, TurnType, Input), -   update_cache(PostPlayQueryState, TurnType, Input), -   generate_reply(PostPlayQueryState, TurnType, Input). - +   QueryResult = +      finalize_character_turn +      ( +         finalize_character_instance +         ( +            play(QueryState, TurnType, Input), +            Input +         ), +         Input +      ), +   send_to_database(QueryResult, TurnType, Input), +   update_cache(QueryResult, TurnType, Input), +   security:unlock_queries(Req#input.player_id), +   generate_reply(QueryResult, TurnType, Input).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 


