summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battle')
-rw-r--r-- | src/battle/game-logic/btl_movement.erl | 60 | ||||
-rw-r--r-- | src/battle/mechanic/btl_next_turn.erl (renamed from src/battle/game-logic/btl_next_turn.erl) | 0 | ||||
-rw-r--r-- | src/battle/mechanic/btl_turn_actions.erl | 83 | ||||
-rw-r--r-- | src/battle/mechanic/btl_victory.erl (renamed from src/battle/game-logic/btl_victory.erl) | 0 | ||||
-rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_attack.erl (renamed from src/battle/game-logic/btl_turn_actions_attack.erl) | 0 | ||||
-rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_move.erl (renamed from src/battle/game-logic/btl_turn_actions_move.erl) | 50 | ||||
-rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_stats_change.erl (renamed from src/battle/game-logic/btl_turn_actions.erl) | 18 | ||||
-rw-r--r-- | src/battle/mechanic/turn_action/btl_turn_actions_switch_weapon.erl (renamed from src/battle/game-logic/btl_turn_actions_switch_weapon.erl) | 2 | ||||
-rw-r--r-- | src/battle/query/btl_character_turn.erl | 65 |
9 files changed, 141 insertions, 137 deletions
diff --git a/src/battle/game-logic/btl_movement.erl b/src/battle/game-logic/btl_movement.erl deleted file mode 100644 index dd7eff9..0000000 --- a/src/battle/game-logic/btl_movement.erl +++ /dev/null @@ -1,60 +0,0 @@ --module(btl_movement). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([cross/4]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec cross - ( - btl_map:type(), - list(btl_location:type()), - list(btl_direction:enum()), - non_neg_integer(), - btl_location:type() - ) - -> {btl_location:type(), non_neg_integer()}. -cross (_Map, _ForbiddenLocations, [], Cost, Location) -> - {Location, Cost}; -cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) -> - NextLocation = btl_location:apply_direction(Step, Location), - NextTileInstance = btl_map:get_tile_instance(NextLocation, Map), - NextTileClassID = shr_tile:extract_main_class_id(NextTileInstance), - NextTile = shr_tile:from_class_id(NextTileClassID), - NextCost = (Cost + shr_tile:get_cost(NextTile)), - IsForbidden = - lists:foldl - ( - fun (ForbiddenLocation, Prev) -> - (Prev or (NextLocation == ForbiddenLocation)) - end, - false, - ForbiddenLocations - ), - - IsForbidden = false, - - cross(Map, ForbiddenLocations, NextSteps, NextCost, NextLocation). - --spec cross - ( - btl_map:type(), - list(btl_location:type()), - list(btl_direction:enum()), - btl_location:type() - ) - -> {btl_location:type(), non_neg_integer()}. -cross (Map, ForbiddenLocations, Path, Location) -> - cross(Map, ForbiddenLocations, Path, 0, Location). diff --git a/src/battle/game-logic/btl_next_turn.erl b/src/battle/mechanic/btl_next_turn.erl index 886916d..886916d 100644 --- a/src/battle/game-logic/btl_next_turn.erl +++ b/src/battle/mechanic/btl_next_turn.erl diff --git a/src/battle/mechanic/btl_turn_actions.erl b/src/battle/mechanic/btl_turn_actions.erl new file mode 100644 index 0000000..d4a81fc --- /dev/null +++ b/src/battle/mechanic/btl_turn_actions.erl @@ -0,0 +1,83 @@ +-module(btl_turn_actions). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + apply_requested_actions/2 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Move elsewhere + +%%%% TODO: move this elsewhere +-spec finalize_character + ( + btl_character_turn_update:type() + ) + -> btl_character_turn_update:type(). +finalize_character (Update) -> + Data = btl_character_turn_update:get_data(Update), + Character = btl_character_turn_data:get_character(Data), + + DisabledCharacter = btl_character:set_is_active(false, Character), + UpdatedData = btl_character_turn_data:set_character(DisabledCharacter, Data), + FinalizedData = btl_character_turn_data:clean_battle(UpdatedData), + + DBQuery = + ataxic:update_field + ( + btl_battle:get_characters_field(), + ataxic_sugar:update_orddict_element + ( + btl_character_turn_data:get_character_ix(Data), + ataxic:update_field + ( + btl_character:get_is_active_field(), + ataxic:constant(false) + ) + ) + ), + + S0Update = btl_character_turn_update:set_data(FinalizedData, Update), + S1Update = btl_character_turn_update:add_to_db(DBQuery, S0Update), + + S1Update. + +-spec handle +( + btl_battle_action:type(), + btl_character_turn_update:type() +) +-> btl_character_turn_update:type(). +handle (BattleAction, Update) -> + case btl_battle_action:get_category(BattleAction) of + move -> btl_turn_actions_move:handle(BattleAction, Update); + switch_weapon -> btl_turn_actions_switch_weapon:handle(Update); + attack -> btl_turn_actions_attack:handle(BattleAction, Update) + end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec apply_requested_actions + ( + btl_character_turn_data:type(), + btl_character_turn_request:type() + ) + -> btl_character_turn_update:type(). +apply_requested_actions (Data, Request) -> + Actions = btl_character_turn_request:get_actions(Request), + + EmptyUpdate = btl_character_turn_update:new(Data), + PostActionsUpdate = lists:foldl(fun handle/2, EmptyUpdate, Actions), + + finalize_character(PostActionsUpdate). diff --git a/src/battle/game-logic/btl_victory.erl b/src/battle/mechanic/btl_victory.erl index 089af81..089af81 100644 --- a/src/battle/game-logic/btl_victory.erl +++ b/src/battle/mechanic/btl_victory.erl diff --git a/src/battle/game-logic/btl_turn_actions_attack.erl b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl index 52dd3fb..52dd3fb 100644 --- a/src/battle/game-logic/btl_turn_actions_attack.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl diff --git a/src/battle/game-logic/btl_turn_actions_move.erl b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl index 80e5170..bf023d5 100644 --- a/src/battle/game-logic/btl_turn_actions_move.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl @@ -16,6 +16,48 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec cross + ( + btl_map:type(), + list(btl_location:type()), + list(btl_direction:enum()), + non_neg_integer(), + btl_location:type() + ) + -> {btl_location:type(), non_neg_integer()}. +cross (_Map, _ForbiddenLocations, [], Cost, Location) -> + {Location, Cost}; +cross (Map, ForbiddenLocations, [Step|NextSteps], Cost, Location) -> + NextLocation = btl_location:apply_direction(Step, Location), + NextTileInstance = btl_map:get_tile_instance(NextLocation, Map), + NextTileClassID = shr_tile:extract_main_class_id(NextTileInstance), + NextTile = shr_tile:from_class_id(NextTileClassID), + NextCost = (Cost + shr_tile:get_cost(NextTile)), + IsForbidden = + lists:foldl + ( + fun (ForbiddenLocation, Prev) -> + (Prev or (NextLocation == ForbiddenLocation)) + end, + false, + ForbiddenLocations + ), + + IsForbidden = false, + + cross(Map, ForbiddenLocations, NextSteps, NextCost, NextLocation). + +-spec cross + ( + btl_map:type(), + list(btl_location:type()), + list(btl_direction:enum()), + btl_location:type() + ) + -> {btl_location:type(), non_neg_integer()}. +cross (Map, ForbiddenLocations, Path, Location) -> + cross(Map, ForbiddenLocations, Path, 0, Location). + -spec get_path_cost_and_destination ( btl_character_turn_data:type(), @@ -45,7 +87,7 @@ get_path_cost_and_destination (Data, Path) -> ), {NewLocation, Cost} = - btl_movement:cross + cross ( Map, ForbiddenLocations, @@ -89,7 +131,11 @@ commit_move (PreviousCurrentData, Update, Path, NewLocation) -> S0Update = btl_character_turn_update:set_data(S1Data, Update), S1Update = - btl_turn_actions:handle_max_health_changes(PreviousCurrentData, S0Update), + btl_turn_actions_stats_change:handle_max_health_changes + ( + PreviousCurrentData, + S0Update + ), TimelineItem = btl_turn_result:new_character_moved(CharacterIX, Path, NewLocation), diff --git a/src/battle/game-logic/btl_turn_actions.erl b/src/battle/mechanic/turn_action/btl_turn_actions_stats_change.erl index 4e469f1..5fe5444 100644 --- a/src/battle/game-logic/btl_turn_actions.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_stats_change.erl @@ -1,4 +1,5 @@ --module(btl_turn_actions). +-module(btl_turn_actions_stats_change). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -9,7 +10,6 @@ -export ( [ - handle/2, handle_max_health_changes/2 ] ). @@ -61,23 +61,9 @@ mod_current_health (CurrentMaxHealth, PreviousMaxHealth, Update) -> S1Update. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle -( - btl_battle_action:type(), - btl_character_turn_update:type() -) --> btl_character_turn_update:type(). -handle (BattleAction, Update) -> - case btl_battle_action:get_category(BattleAction) of - move -> btl_turn_actions_move:handle(BattleAction, Update); - switch_weapon -> btl_turn_actions_switch_weapon:handle(Update); - attack -> btl_turn_actions_attack:handle(BattleAction, Update) - end. - -spec handle_max_health_changes ( btl_character_current_data:type(), diff --git a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl b/src/battle/mechanic/turn_action/btl_turn_actions_switch_weapon.erl index 990f91f..119dbe7 100644 --- a/src/battle/game-logic/btl_turn_actions_switch_weapon.erl +++ b/src/battle/mechanic/turn_action/btl_turn_actions_switch_weapon.erl @@ -42,7 +42,7 @@ handle (Update) -> S0Update = btl_character_turn_update:set_data(S1Data, Update), S1Update = - btl_turn_actions:handle_max_health_changes + btl_turn_actions_stats_change:handle_max_health_changes ( CharacterCurrentData, S0Update diff --git a/src/battle/query/btl_character_turn.erl b/src/battle/query/btl_character_turn.erl index 32ec9be..90afba8 100644 --- a/src/battle/query/btl_character_turn.erl +++ b/src/battle/query/btl_character_turn.erl @@ -113,54 +113,8 @@ assert_user_permissions (Data, Request) -> ok. %%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec finalize_character - ( - btl_character_turn_update:type() - ) - -> btl_character_turn_update:type(). -finalize_character (Update) -> - Data = btl_character_turn_update:get_data(Update), - Character = btl_character_turn_data:get_character(Data), - - DisabledCharacter = btl_character:set_is_active(false, Character), - UpdatedData = btl_character_turn_data:set_character(DisabledCharacter, Data), - FinalizedData = btl_character_turn_data:clean_battle(UpdatedData), - - DBQuery = - ataxic:update_field - ( - btl_battle:get_characters_field(), - ataxic_sugar:update_orddict_element - ( - btl_character_turn_data:get_character_ix(Data), - ataxic:update_field - ( - btl_character:get_is_active_field(), - ataxic:constant(false) - ) - ) - ), - - S0Update = btl_character_turn_update:set_data(FinalizedData, Update), - S1Update = btl_character_turn_update:add_to_db(DBQuery, S0Update), - - S1Update. - --spec handle_actions - ( - btl_character_turn_data:type(), - btl_character_turn_request:type() - ) - -> btl_character_turn_update:type(). -handle_actions (Data, Request) -> - Actions = btl_character_turn_request:get_actions(Request), - - EmptyUpdate = btl_character_turn_update:new(Data), - PostActionsUpdate = - lists:foldl(fun btl_turn_actions:handle/2, EmptyUpdate, Actions), - - finalize_character(PostActionsUpdate). +%%%% TODO: move this elsewhere -spec update_timeline ( btl_character_turn_update:type() @@ -214,7 +168,7 @@ update_timeline (Update) -> ) -> btl_character_turn_update:type(). update_data (Data, Request) -> - PostActionsUpdate = handle_actions(Data, Request), + PostActionsUpdate = btl_turn_actions:apply_requested_actions(Data, Request), PostCharacterTurnUpdate = update_timeline(PostActionsUpdate), btl_next_turn:update_if_needed(PostCharacterTurnUpdate). @@ -276,15 +230,6 @@ commit_update (Update, Request) -> ok. -%%%% USER DISCONNECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec disconnect_user (btl_character_turn_request:type()) -> 'ok'. -disconnect_user (Request) -> - PlayerID = btl_character_turn_request:get_player_id(Request), - - shr_security:unlock_queries(PlayerID), - - ok. - %%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec generate_reply (btl_character_turn_update:type()) -> binary(). generate_reply (Update) -> @@ -301,12 +246,16 @@ handle (EncodedRequest) -> case authenticate_user(Request) of ok -> PlayerID = btl_character_turn_request:get_player_id(Request), + shr_security:lock_queries(PlayerID), + Data = fetch_data(Request), assert_user_permissions(Data, Request), Update = update_data(Data, Request), commit_update(Update, Request), - disconnect_user(Request), + + shr_security:unlock_queries(PlayerID), + generate_reply(Update); error -> jiffy:encode([shr_disconnected:generate()]) |