summaryrefslogtreecommitdiff |
diff options
author | nsensfel <SpamShield0@noot-noot.org> | 2018-02-26 17:16:08 +0100 |
---|---|---|
committer | nsensfel <SpamShield0@noot-noot.org> | 2018-02-26 17:16:08 +0100 |
commit | 6494b74a45e27085fd81836f7b8c969431e8ff3c (patch) | |
tree | e344a24fa2e9a2ee198314c0552c46b235072009 /src/query/character_turn.erl | |
parent | fd4d031ab5b31763d376c663cc049f62ee389243 (diff) |
Got it to work, I think.
Diffstat (limited to 'src/query/character_turn.erl')
-rw-r--r-- | src/query/character_turn.erl | 111 |
1 files changed, 77 insertions, 34 deletions
diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index 0519a80..33684d9 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -91,11 +91,11 @@ assert_character_instance_can_be_played (QueryState, Input) -> ControlledCharacterInstance = QueryState#query_state.character_instance, %%% Asserts PlayerID = - arrays:get + array:get ( player_turn:get_player_ix ( - battlemap_instance:get_player_turn(BattlemapInstance) + battlemap_instance:get_current_player_turn(BattlemapInstance) ), battlemap_instance:get_player_ids(BattlemapInstance) ), @@ -111,6 +111,8 @@ handle_character_instance_moving (QueryState, Input) -> ControlledCharacterInstance = QueryState#query_state.character_instance, ControlledCharacter = character_instance:get_character(ControlledCharacterInstance), + ControlledCharacterIX = Input#input.character_instance_ix, + Path = Input#input.path, Battlemap = battlemap_instance:get_battlemap(BattlemapInstance), ControlledCharacterStatistics = @@ -121,7 +123,9 @@ handle_character_instance_moving (QueryState, Input) -> ForbiddenLocations = array:map ( - fun character_instance:get_location/1, + fun (_IX, CharacterInstance) -> + character_instance:get_location(CharacterInstance) + end, battlemap_instance:get_character_instances(BattlemapInstance) ), {NewLocation, Cost} = @@ -133,19 +137,35 @@ handle_character_instance_moving (QueryState, Input) -> character_instance:get_location(ControlledCharacterInstance) ), + io:format + ( + "~nMoving from ~p to ~p (cost ~p) with ~p movement points.~n", + [ + character_instance:get_location(ControlledCharacterInstance), + NewLocation, + Cost, + ControlledCharacterMovementPoints + ] + ), + true = (Cost =< ControlledCharacterMovementPoints), - QueryState#query_state + UpdatedQueryState = + QueryState#query_state + { + character_instance = + character_instance:set_location + ( + NewLocation, + ControlledCharacterInstance + ) + }, { - character_instance = - character_instance:set_location - ( - NewLocation, - ControlledCharacterInstance - ) + [{move, ControlledCharacterIX, NewLocation}], + UpdatedQueryState }. -handle_character_instance_switching_weapons (QueryState) -> +handle_character_instance_switching_weapons (QueryState, Input) -> ControlledCharacterInstance = QueryState#query_state.character_instance, ControlledCharacter = character_instance:get_character(ControlledCharacterInstance), @@ -153,6 +173,7 @@ handle_character_instance_switching_weapons (QueryState) -> character:get_attributes(ControlledCharacter), {PrimaryWeapon, SecondaryWeapon} = character:get_weapons(ControlledCharacter), + ControlledCharacterIX = Input#input.character_instance_ix, UpdatedWeapons = {SecondaryWeapon, PrimaryWeapon}, UpdatedControlledCharacterStatistics = @@ -176,10 +197,15 @@ handle_character_instance_switching_weapons (QueryState) -> UpdatedControlledCharacter, ControlledCharacterInstance ), + UpdatedQueryState = + QueryState#query_state + { + character_instance = UpdatedControlledCharacterInstance + }, - QueryState#query_state { - character_instance = UpdatedControlledCharacterInstance + [{switch_weapons, ControlledCharacterIX}], + UpdatedQueryState }. -include("character_turn/handle_character_instance_attacking_2.erl"). @@ -197,7 +223,7 @@ get_type_of_turn (Input) -> finalize_character_instance (QueryState, Input) -> BattlemapInstance = QueryState#query_state.battlemap_instance, FinalizedCharacterInstance = - character_instance:set_active + character_instance:set_is_active ( false, QueryState#query_state.character_instance @@ -251,7 +277,7 @@ activate_relevant_character_instances (IXs, CharacterInstances, Owner, IX) -> start_next_players_turn (QueryState) -> BattlemapInstance = QueryState#query_state.battlemap_instance, PlayerIDs = battlemap_instance:get_player_ids(BattlemapInstance), - PlayerTurn = battlemap_instance:get_player_turn(BattlemapInstance), + PlayerTurn = battlemap_instance:get_current_player_turn(BattlemapInstance), CurrentPlayerIX = player_turn:get_player_ix(PlayerTurn), CurrentTurnNumber = player_turn:get_number(PlayerTurn), CharacterInstances = @@ -299,6 +325,7 @@ finalize_character_turn (QueryState) -> fun (_IX, CharacterInstance, Prev) -> (Prev or character_instance:get_is_active(CharacterInstance)) end, + false, CharacterInstances ), @@ -321,29 +348,38 @@ finalize_character_turn (QueryState) -> } end. -play (QueryState, [], _Input) -> - QueryState; -play (QueryState, [nothing|Next], Input) -> - play(QueryState, Next, Input); -play (QueryState, [move|Next], Input) -> +play (DiffUpdate, QueryState, [], _Input) -> + {DiffUpdate, QueryState}; +play (DiffUpdate, QueryState, [nothing|Next], Input) -> + play(DiffUpdate, QueryState, Next, Input); +play (DiffUpdate, QueryState, [move|Next], Input) -> + {AddedDiffContent, NewQueryState} = + handle_character_instance_moving(QueryState, Input), play ( - handle_character_instance_moving(QueryState, Input), + (AddedDiffContent ++ DiffUpdate), + NewQueryState, Next, Input ); -play (QueryState, [switch|Next], Input) -> +play (DiffUpdate, QueryState, [switch|Next], Input) -> + {AddedDiffContent, NewQueryState} = + handle_character_instance_switching_weapons(QueryState, Input), play ( - handle_character_instance_switching_weapons(QueryState), + (AddedDiffContent ++ DiffUpdate), + NewQueryState, Next, Input ); -play (QueryState, [attack|Next], Input) -> +play (DiffUpdate, QueryState, [attack|Next], Input) -> + {AddedDiffContent, NewQueryState} = + handle_character_instance_attacking(QueryState, Input), play ( - handle_character_instance_attacking(QueryState, Input), + (AddedDiffContent ++ DiffUpdate), + NewQueryState, Next, Input ). @@ -375,29 +411,36 @@ update_cache (QueryResult, Input) -> BattlemapInstance ). -generate_reply (_QueryResult, _TurnType, _Input) -> - unimplemented. +generate_reply (_QueryResult, DiffUpdate, _TurnType, _Input) -> + %% TODO + jiffy:encode + ( + [ + [ + <<"raw">>, + list_to_binary(io_lib:format("~p", [DiffUpdate])) + ] + ] + ). handle (Req) -> Input = parse_input(Req), security:assert_identity(Input#input.player_id, Input#input.session_token), security:lock_queries(Input#input.player_id), QueryState = fetch_data(Input), - assert_character_instance_can_be_played(Input, QueryState), + assert_character_instance_can_be_played(QueryState, Input), TurnType = get_type_of_turn(Input), + {DiffUpdate, UpdatedQueryState} = play([], QueryState, TurnType, Input), QueryResult = finalize_character_turn ( - finalize_character_instance - ( - play(QueryState, TurnType, Input), - Input - ) + finalize_character_instance(UpdatedQueryState, Input) ), send_to_database(QueryResult, TurnType, Input), update_cache(QueryResult, Input), + io:format("~nCharacter turn result:~n~p~n", [DiffUpdate]), security:unlock_queries(Input#input.player_id), - generate_reply(QueryResult, TurnType, Input). + generate_reply(QueryResult, DiffUpdate, TurnType, Input). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |