summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-04-26 15:05:44 +0200
committernsensfel <SpamShield0@noot-noot.org>2019-04-26 15:05:44 +0200
commitec6eec260d6383ae948505c3d42b3055ae3dd94c (patch)
tree1d9ab2b09ab0a534fc6c09b62b940d9f1c7e139f /src/battle/mechanic
parent7d428bac2f9d62c5a0e704eb32be869c10fec72e (diff)
Makes Dialyzer validate shared & battle.
Diffstat (limited to 'src/battle/mechanic')
-rw-r--r--src/battle/mechanic/btl_turn_actions_management.erl5
-rw-r--r--src/battle/mechanic/btl_turn_progression.erl69
-rw-r--r--src/battle/mechanic/btl_victory_progression.erl78
-rw-r--r--src/battle/mechanic/turn_action/btl_turn_actions_attack.erl263
-rw-r--r--src/battle/mechanic/turn_action/btl_turn_actions_move.erl107
5 files changed, 259 insertions, 263 deletions
diff --git a/src/battle/mechanic/btl_turn_actions_management.erl b/src/battle/mechanic/btl_turn_actions_management.erl
index d3a84bd..d33fbad 100644
--- a/src/battle/mechanic/btl_turn_actions_management.erl
+++ b/src/battle/mechanic/btl_turn_actions_management.erl
@@ -39,12 +39,12 @@ deactivate_character (Update) ->
-spec handle_action
(
- btl_battle_action:type(),
+ btl_action:type(),
btl_character_turn_update:type()
)
-> btl_character_turn_update:type().
handle_action (BattleAction, Update) ->
- case btl_battle_action:get_category(BattleAction) of
+ case btl_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)
@@ -78,6 +78,7 @@ update_timeline (Update) ->
btl_character_turn_update:ataxia_set_battle
(
UpdatedBattle,
+ false,
BattleAtaxiaUpdate,
S0Update
),
diff --git a/src/battle/mechanic/btl_turn_progression.erl b/src/battle/mechanic/btl_turn_progression.erl
index a6443b8..6286cc1 100644
--- a/src/battle/mechanic/btl_turn_progression.erl
+++ b/src/battle/mechanic/btl_turn_progression.erl
@@ -87,7 +87,8 @@ activate_next_players_characters (Battle, NextPlayer) ->
(
IX,
UpdatedCharacter,
- CharacterAtaxicUpdate
+ CharacterAtaxicUpdate,
+ CurrentBattle
),
{UpdatedBattle, [BattleAtaxicUpdate|CurrentBattleUpdates]};
@@ -107,35 +108,41 @@ activate_next_players_characters (Battle, NextPlayer) ->
)
-> btl_character_turn_update:type().
activate_next_player (Update) ->
- Data = btl_character_turn_update:get_data(Update),
- Battle = btl_character_turn_data:get_battle(Data),
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
- {S0Battle, DBQuery0} = prepare_player_turn_for_next_player(Battle),
- {S1Battle, NextPlayer, DBQuery1} = reset_next_player_timeline(S0Battle),
- {S2Battle, DBQuery2} =
- activate_next_players_characters(S1Battle, NextPlayer),
+ {S0Battle, BattleAtaxiaUpdate0} =
+ prepare_player_turn_for_next_player(Battle),
- S0Data = btl_character_turn_data:set_battle(S2Battle, Data),
+ {S1Battle, NextPlayer, BattleAtaxiaUpdate1} =
+ reset_next_player_timeline(S0Battle),
- S0Update =
- btl_character_turn_update:add_to_timeline
+ {S2Battle, BattleAtaxiaUpdate2} =
+ activate_next_players_characters(S1Battle, NextPlayer),
+
+ S1Update =
+ btl_character_turn_update:ataxia_set_battle
(
- btl_turn_result:new_player_turn_started
+ S2Battle,
+ true,
+ ataxic:sequence
(
- btl_player:get_index(NextPlayer)
+ [
+ BattleAtaxiaUpdate0,
+ BattleAtaxiaUpdate1,
+ BattleAtaxiaUpdate2
+ ]
),
- DBQuery0,
- Update
+ S0Update
),
- S1Update = btl_character_turn_update:set_data(S0Data, S0Update),
-
S2Update =
- lists:foldl
+ btl_character_turn_update:add_to_timeline
(
- fun btl_character_turn_update:add_to_db/2,
- S1Update,
- [DBQuery1,DBQuery2]
+ btl_turn_result:new_player_turn_started
+ (
+ btl_player:get_index(NextPlayer)
+ ),
+ S1Update
),
S2Update.
@@ -144,17 +151,19 @@ activate_next_player (Update) ->
(
btl_character_turn_update:type()
)
- -> boolean().
+ -> {boolean(), btl_character_turn_update:type()}.
has_active_characters_remaining (Update) ->
- Data = btl_character_turn_update:get_data(Update),
- Battle = btl_character_turn_data:get_battle(Data),
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
Characters = btl_battle:get_characters(Battle),
- lists:any
- (
- fun ({_IX, Char}) -> btl_character:get_is_active(Char) end,
- orddict:to_list(Characters)
- ).
+ {
+ lists:any
+ (
+ fun ({_IX, Char}) -> btl_character:get_is_active(Char) end,
+ orddict:to_list(Characters)
+ ),
+ S0Update
+ }.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -166,6 +175,6 @@ has_active_characters_remaining (Update) ->
-> btl_character_turn_update:type().
handle (Update) ->
case has_active_characters_remaining(Update) of
- false -> activate_next_player(Update);
- _ -> Update
+ {false, S0Update} -> activate_next_player(S0Update);
+ {true, S0Update} -> S0Update
end.
diff --git a/src/battle/mechanic/btl_victory_progression.erl b/src/battle/mechanic/btl_victory_progression.erl
index f50718a..ab8a351 100644
--- a/src/battle/mechanic/btl_victory_progression.erl
+++ b/src/battle/mechanic/btl_victory_progression.erl
@@ -9,7 +9,7 @@
-export
(
[
- handle_character_lost_health/3
+ handle_character_loss/2
]
).
@@ -90,37 +90,43 @@ mark_player_as_inactive (PlayerIX, Battle) ->
)
-> btl_character_turn_update:type().
handle_player_defeat (PlayerIX, Update) ->
- Data = btl_character_turn_update:get_data(Update),
- Battle = btl_character_turn_data:get_battle(Data),
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
{S0Battle, BattleAtaxicUpdate0} =
mark_characters_of_player_as_defeated(PlayerIX, Battle),
{S1Battle, BattleAtaxicUpdate1} =
mark_player_as_inactive(PlayerIX, S0Battle),
- UpdatedData = btl_character_turn_data:set_battle(S1Battle, Data),
- S0Update = btl_character_turn_update:set_data(UpdatedData, Update),
-
S1Update =
+ btl_character_turn_update:ataxia_set_battle
+ (
+ S1Battle,
+ true,
+ ataxic:sequence([BattleAtaxicUpdate0, BattleAtaxicUpdate1]),
+ S0Update
+ ),
+
+ S2Update =
btl_character_turn_update:add_to_timeline
(
btl_turn_result:new_player_lost(PlayerIX),
- ataxia:sequence([BattleAtaxicUpdate0, BattleAtaxicUpdate1]),
- S0Update
+ S1Update
),
- S1Update.
+ S2Update.
--spec actually_handle_character_lost_health
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec handle_character_loss
(
- non_neg_integer(),
+ btl_character:either(),
btl_character_turn_update:type()
)
-> btl_character_turn_update:type().
-actually_handle_character_lost_health (CharIX, Update) ->
- Data = btl_character_turn_update:get_data(Update),
- Battle = btl_character_turn_data:get_battle(Data),
- Character = btl_battle:get_character(CharIX, Battle),
+handle_character_loss (Character, Update) ->
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
Characters = btl_battle:get_characters(Battle),
CharacterPlayerIX = btl_character:get_player_index(Character),
@@ -133,10 +139,9 @@ actually_handle_character_lost_health (CharIX, Update) ->
StillHasAliveChar =
lists:any
(
- fun ({IX, Char}) ->
+ fun ({_IX, Char}) ->
(
(CharacterPlayerIX == btl_character:get_player_index(Char))
- and (IX /= CharIX)
and btl_character:get_is_alive(Char)
)
end,
@@ -144,53 +149,28 @@ actually_handle_character_lost_health (CharIX, Update) ->
),
case StillHasAliveChar of
- true -> Update;
- _ -> handle_player_defeat(CharacterPlayerIX, Update)
+ true -> S0Update;
+ _ -> handle_player_defeat(CharacterPlayerIX, S0Update)
end;
- commander -> handle_player_defeat(CharacterPlayerIX, Update);
+ commander -> handle_player_defeat(CharacterPlayerIX, S0Update);
target ->
StillHasAliveTargetChar =
lists:any
(
- fun ({IX, Char}) ->
+ fun ({_IX, Char}) ->
(
(CharacterPlayerIX == btl_character:get_player_index(Char))
- and (IX /= CharIX)
and btl_character:get_is_alive(Char)
- and (blt_character:get_rank(Char) == target)
+ and (btl_character:get_rank(Char) == target)
)
end,
orddict:to_list(Characters)
),
case StillHasAliveTargetChar of
- true -> Update;
- _ -> handle_player_defeat(CharacterPlayerIX, Update)
+ true -> S0Update;
+ _ -> handle_player_defeat(CharacterPlayerIX, S0Update)
end
end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec handle_character_lost_health
- (
- non_neg_integer(),
- integer(),
- btl_character_turn_update:type()
- )
- -> btl_character_turn_update:type().
-handle_character_lost_health (_, Health, Update) when (Health > 0) -> Update;
-handle_character_lost_health (CharIX, _Health, Update) ->
- Data = btl_character_turn_update:get_data(Update),
- S1Data = btl_character_turn_data:clean_battle(Data),
- S1Update = btl_character_turn_update:set_data(S1Data, Update),
-
- S2Update = actually_handle_character_lost_health(CharIX, S1Update),
-
- S2Data = btl_character_turn_update:get_data(S2Update),
- S3Data = btl_character_turn_data:refresh_character(S2Data),
- S3Update = btl_character_turn_update:set_data(S3Data, S2Update),
-
- S3Update.
diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl
index b59efb7..e36c7e3 100644
--- a/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl
+++ b/src/battle/mechanic/turn_action/btl_turn_actions_attack.erl
@@ -19,9 +19,9 @@
-spec handle_attack_sequence
(
- btl_character_current_data:type(),
+ btl_character:type(),
non_neg_integer(),
- btl_character_current_data:type(),
+ btl_character:type(),
non_neg_integer(),
integer(),
integer(),
@@ -38,9 +38,9 @@
}.
handle_attack_sequence
(
- _CharacterCurrentData,
+ _Character,
CharacterCurrentHealth,
- _TargetCurrentData,
+ _TargetCharacter,
TargetCurrentHealth,
AttackerLuck,
DefenderLuck,
@@ -62,9 +62,9 @@ when
};
handle_attack_sequence
(
- CharacterCurrentData,
+ Character,
AttackerHealth,
- TargetCurrentData,
+ TargetCharacter,
DefenderHealth,
AttackerLuck,
DefenderLuck,
@@ -75,8 +75,8 @@ handle_attack_sequence
btl_attack:get_description_of
(
NextAttack,
- CharacterCurrentData,
- TargetCurrentData,
+ btl_character:get_base_character(Character),
+ btl_character:get_base_character(TargetCharacter),
AttackerLuck,
DefenderLuck
),
@@ -105,9 +105,9 @@ handle_attack_sequence
handle_attack_sequence
(
- CharacterCurrentData,
+ Character,
NewAttackerHealth,
- TargetCurrentData,
+ TargetCharacter,
NewDefenderHealth,
NewAttackerLuck,
NewDefenderLuck,
@@ -129,11 +129,17 @@ get_attack_sequence (Character, TargetCharacter) ->
btl_character:get_location(TargetCharacter)
),
- {AttackingWeaponID, _} = btl_character:get_weapon_ids(Character),
- {DefendingWeaponID, _} = btl_character:get_weapon_ids(TargetCharacter),
+ AttackingWeapon =
+ shr_character:get_active_weapon
+ (
+ btl_character:get_base_character(Character)
+ ),
- AttackingWeapon = shr_weapon:from_id(AttackingWeaponID),
- DefendingWeapon = shr_weapon:from_id(DefendingWeaponID),
+ DefendingWeapon =
+ shr_character:get_active_weapon
+ (
+ btl_character:get_base_character(TargetCharacter)
+ ),
btl_attack:get_sequence(Range, AttackingWeapon, DefendingWeapon).
@@ -142,31 +148,49 @@ get_attack_sequence (Character, TargetCharacter) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle
(
- btl_battle_action:type(),
+ btl_action:type(),
btl_character_turn_update:type()
)
-> btl_character_turn_update:type().
handle (BattleAction, Update) ->
- Data = btl_character_turn_update:get_data(Update),
- Battle = btl_character_turn_data:get_battle(Data),
- Character = btl_character_turn_data:get_character(Data),
- CharacterIX = btl_character_turn_data:get_character_ix(Data),
- CharacterCurrentData =
- btl_character_turn_data:get_character_current_data(Data),
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
+ {S1Update, Character} = btl_character_turn_update:get_character(S0Update),
+
AttackingPlayerIX = btl_character:get_player_index(Character),
AttackingPlayer = btl_battle:get_player(AttackingPlayerIX, Battle),
AttackingPlayerLuck = btl_player:get_luck(AttackingPlayer),
+ TargetIX = btl_action:get_target_ix(BattleAction),
Map = btl_battle:get_map(Battle),
- TargetIX = btl_battle_action:get_target_ix(BattleAction),
- TargetCharacter = btl_battle:get_character(TargetIX, Battle),
- TargetCurrentData = btl_character_current_data:new(TargetCharacter, Map),
+ TargetCharacterRef = btl_battle:get_character(TargetIX, Battle),
+ TargetCharacter =
+ btl_character:resolve
+ (
+ shr_tile:get_omnimods
+ (
+ shr_tile:from_id
+ (
+ shr_tile_instance:get_tile_id
+ (
+ shr_map:get_tile_instance
+ (
+ btl_character:get_location(TargetCharacterRef),
+ Map
+ )
+ )
+ )
+ ),
+ TargetCharacterRef
+ ),
+
DefendingPlayerIX = btl_character:get_player_index(TargetCharacter),
DefendingPlayer = btl_battle:get_player(DefendingPlayerIX, Battle),
DefendingPlayerLuck = btl_player:get_luck(DefendingPlayer),
+
true = btl_character:get_is_alive(TargetCharacter),
+
AttackSequence = get_attack_sequence(Character, TargetCharacter),
{
@@ -178,9 +202,9 @@ handle (BattleAction, Update) ->
} =
handle_attack_sequence
(
- CharacterCurrentData,
+ Character,
btl_character:get_current_health(Character),
- TargetCurrentData,
+ TargetCharacter,
btl_character:get_current_health(TargetCharacter),
AttackingPlayerLuck,
DefendingPlayerLuck,
@@ -202,135 +226,114 @@ handle (BattleAction, Update) ->
_ -> 0
end,
- NextAttackingPlayer =
- btl_player:set_luck(S0NewAttackerLuck, AttackingPlayer),
+ {UpdatedAttackingPlayer, AttackingPlayerAtaxiaUpdate} =
+ btl_player:ataxia_set_luck(S0NewAttackerLuck, AttackingPlayer),
- NextDefendingPlayer =
- btl_player:set_luck(S0NewDefenderLuck, DefendingPlayer),
+ {UpdatedDefendingPlayer, DefendingPlayerAtaxiaUpdate} =
+ btl_player:ataxia_set_luck(S0NewDefenderLuck, DefendingPlayer),
- UpdatedCharacter =
- btl_character:set_current_health(RemainingAttackerHealth, Character),
+ {UpdatedCharacter, CharacterAtaxiaUpdate} =
+ btl_character:ataxia_set_current_health
+ (
+ RemainingAttackerHealth,
+ Character
+ ),
- UpdatedBattle =
- btl_battle:set_player
+ {UpdatedTargetCharacterRef, TargetCharacterRefAtaxiaUpdate} =
+ btl_character:ataxia_set_current_health
(
- DefendingPlayerIX,
- NextDefendingPlayer,
- btl_battle:set_player
- (
- AttackingPlayerIX,
- NextAttackingPlayer,
- btl_battle:set_character
- (
- TargetIX,
- btl_character:set_current_health
- (
- RemainingDefenderHealth,
- TargetCharacter
- ),
- Battle
- )
- )
+ RemainingDefenderHealth,
+ TargetCharacterRef
),
- S0Data = btl_character_turn_data:set_battle(UpdatedBattle, Data),
- S1Data = btl_character_turn_data:set_character(UpdatedCharacter, S0Data),
+ {S0Battle, BattleAtaxiaUpdate0} =
+ btl_battle:ataxia_set_player
+ (
+ AttackingPlayerIX,
+ UpdatedAttackingPlayer,
+ AttackingPlayerAtaxiaUpdate,
+ Battle
+ ),
- TimelineItem =
- btl_turn_result:new_character_attacked
+ {S1Battle, BattleAtaxiaUpdate1} =
+ btl_battle:ataxia_set_player
(
- CharacterIX,
- TargetIX,
- AttackEffects,
- S0NewAttackerLuck,
- S0NewDefenderLuck
+ DefendingPlayerIX,
+ UpdatedDefendingPlayer,
+ DefendingPlayerAtaxiaUpdate,
+ S0Battle
),
- DBQuery0 =
- ataxic:update_field
+ {S2Battle, BattleAtaxiaUpdate2} =
+ btl_battle:ataxia_set_character
(
- btl_battle:get_characters_field(),
- ataxic_sugar:update_orddict_element
- (
- TargetIX,
- ataxic:update_field
- (
- btl_character:get_current_health_field(),
- ataxic:constant(RemainingDefenderHealth)
- )
- )
+ TargetIX,
+ UpdatedTargetCharacterRef,
+ TargetCharacterRefAtaxiaUpdate,
+ S1Battle
),
- DBQuery1 =
- ataxic:update_field
+ % Potential danger ahead: we're going to update both the 'character' and
+ % 'battle' members of a btl_character_turn_update.
+ % 'S1Update' is sure to have both up to date (as it's the result of 'get'
+ % requests for both) and there is no risk of the 'battle' update influencing
+ % 'character', making what follows safe.
+
+ S2Update =
+ btl_character_turn_update:ataxia_set_battle
(
- btl_battle:get_characters_field(),
- ataxic_sugar:update_orddict_element
+ S2Battle,
+ false,
+ ataxic:optimize
(
- CharacterIX,
- ataxic:update_field
+ ataxic:sequence
(
- btl_character:get_current_health_field(),
- ataxic:constant(RemainingAttackerHealth)
+ [
+ BattleAtaxiaUpdate0,
+ BattleAtaxiaUpdate1,
+ BattleAtaxiaUpdate2
+ ]
)
- )
+ ),
+ S1Update
),
- DBQuery2 =
- ataxic:update_field
+ S3Update =
+ btl_character_turn_update:ataxia_set_character
(
- btl_battle:get_players_field(),
- ataxic:sequence
- (
- [
- ataxic_sugar:update_orddict_element
- (
- DefendingPlayerIX,
- ataxic:update_field
- (
- btl_player:get_luck_field(),
- ataxic:constant(S0NewDefenderLuck)
- )
- ),
- ataxic_sugar:update_orddict_element
- (
- AttackingPlayerIX,
- ataxic:update_field
- (
- btl_player:get_luck_field(),
- ataxic:constant(S0NewAttackerLuck)
- )
- )
- ]
- )
+ UpdatedCharacter,
+ CharacterAtaxiaUpdate,
+ S2Update
),
- S0Update =
- btl_character_turn_update:add_to_timeline
+ TimelineItem =
+ btl_turn_result:new_character_attacked
(
- TimelineItem,
- DBQuery0,
- Update
+ btl_character_turn_update:get_character_ix(S3Update),
+ TargetIX,
+ AttackEffects,
+ S0NewAttackerLuck,
+ S0NewDefenderLuck
),
- S1Update = btl_character_turn_update:add_to_db(DBQuery1, S0Update),
- S2Update = btl_character_turn_update:add_to_db(DBQuery2, S1Update),
- S3Update = btl_character_turn_update:set_data(S1Data, S2Update),
-
- S4Update =
- btl_victory:handle_character_lost_health
- (
- CharacterIX,
- RemainingAttackerHealth,
- S3Update
- ),
+ S4Update = btl_character_turn_update:add_to_timeline(TimelineItem, S3Update),
S5Update =
- btl_victory:handle_character_lost_health
- (
- TargetIX,
- RemainingDefenderHealth,
- S4Update
- ),
+ case (RemainingAttackerHealth > 0) of
+ true -> S4Update;
+ false ->
+ btl_victory_progression:handle_character_loss(Character, S4Update)
+ end,
+
+ S6Update =
+ case (RemainingAttackerHealth > 0) of
+ true -> S5Update;
+ false ->
+ btl_victory_progression:handle_character_loss
+ (
+ TargetCharacterRef,
+ S5Update
+ )
+ end,
- S5Update.
+ S6Update.
diff --git a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
index db46ef0..da62e8c 100644
--- a/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
+++ b/src/battle/mechanic/turn_action/btl_turn_actions_move.erl
@@ -60,14 +60,19 @@ cross (Map, ForbiddenLocations, Path, Location) ->
-spec get_path_cost_and_destination
(
- btl_character_turn_data:type(),
+ btl_character_turn_update:type(),
list(shr_direction:type())
)
- -> {non_neg_integer(), shr_location:type()}.
-get_path_cost_and_destination (Data, Path) ->
- Character = btl_character_turn_data:get_character(Data),
- CharacterIX = btl_character_turn_data:get_character_ix(Data),
- Battle = btl_character_turn_data:get_battle(Data),
+ ->
+ {
+ non_neg_integer(),
+ shr_location:type(),
+ btl_character_turn_update:type()
+ }.
+get_path_cost_and_destination (Update, Path) ->
+ {S0Update, Character} = btl_character_turn_update:get_character(Update),
+ {S1Update, Battle} = btl_character_turn_update:get_battle(S0Update),
+ CharacterIX = btl_character_turn_update:get_character_ix(S1Update),
Map = btl_battle:get_map(Battle),
ForbiddenLocations =
@@ -95,18 +100,23 @@ get_path_cost_and_destination (Data, Path) ->
btl_character:get_location(Character)
),
- {Cost, NewLocation}.
+ {Cost, NewLocation, S1Update}.
-spec assert_character_can_move
(
- btl_character_turn_data:type(),
+ btl_character:type(),
non_neg_integer()
)
-> 'ok'.
-assert_character_can_move (Data, Cost) ->
- CharacterData = btl_character_turn_data:get_character_current_data(Data),
- CharacterStats= btl_character_current_data:get_statistics(CharacterData),
- CharacterMovementPoints = shr_statistics:get_movement_points(CharacterStats),
+assert_character_can_move (Char, Cost) ->
+ CharacterMovementPoints =
+ shr_statistics:get_movement_points
+ (
+ shr_character:get_statistics
+ (
+ btl_character:get_base_character(Char)
+ )
+ ),
true = (Cost =< CharacterMovementPoints),
@@ -114,54 +124,47 @@ assert_character_can_move (Data, Cost) ->
-spec commit_move
(
- btl_character_current_data:type(),
+ btl_character:type(),
btl_character_turn_update:type(),
list(shr_direction:type()),
shr_location:type()
)
-> btl_character_turn_update:type().
-commit_move (PreviousCurrentData, Update, Path, NewLocation) ->
- Data = btl_character_turn_update:get_data(Update),
- Character = btl_character_turn_data:get_character(Data),
- CharacterIX = btl_character_turn_data:get_character_ix(Data),
+commit_move (Character, Update, Path, NewLocation) ->
+ {S0Update, Battle} = btl_character_turn_update:get_battle(Update),
+ Map = btl_battle:get_map(Battle),
+ TileOmnimods =
+ shr_tile:get_omnimods
+ (
+ shr_tile:from_id
+ (
+ shr_tile_instance:get_tile_id
+ (
+ shr_map:get_tile_instance(NewLocation, Map)
+ )
+ )
+ ),
- UpdatedCharacter = btl_character:set_location(NewLocation, Character),
- S0Data = btl_character_turn_data:set_character(UpdatedCharacter, Data),
- S1Data = btl_character_turn_data:refresh_character_current_data(S0Data),
+ {UpdatedCharacter, CharacterAtaxiaUpdate} =
+ btl_character:ataxia_set_location(NewLocation, TileOmnimods, Character),
- S0Update = btl_character_turn_update:set_data(S1Data, Update),
S1Update =
- btl_turn_actions_stats_change:handle_max_health_changes
+ btl_character_turn_update:ataxia_set_character
(
- PreviousCurrentData,
+ UpdatedCharacter,
+ CharacterAtaxiaUpdate,
S0Update
),
TimelineItem =
- btl_turn_result:new_character_moved(CharacterIX, Path, NewLocation),
-
- DBQuery =
- ataxic:update_field
+ btl_turn_result:new_character_moved
(
- btl_battle:get_characters_field(),
- ataxic_sugar:update_orddict_element
- (
- CharacterIX,
- ataxic:update_field
- (
- btl_character:get_location_field(),
- ataxic:constant(NewLocation)
- )
- )
+ btl_character_turn_update:get_character_ix(S1Update),
+ Path,
+ NewLocation
),
- S2Update =
- btl_character_turn_update:add_to_timeline
- (
- TimelineItem,
- DBQuery,
- S1Update
- ),
+ S2Update = btl_character_turn_update:add_to_timeline(TimelineItem, S1Update),
S2Update.
@@ -170,17 +173,17 @@ commit_move (PreviousCurrentData, Update, Path, NewLocation) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec handle
(
- btl_battle_action:type(),
+ btl_action:type(),
btl_character_turn_update:type()
)
-> btl_character_turn_update:type().
handle (BattleAction, Update) ->
- Data = btl_character_turn_update:get_data(Update),
- CharacterCurrentData =
- btl_character_turn_data:get_character_current_data(Data),
- Path = btl_battle_action:get_path(BattleAction),
+ {S0Update, Character} = btl_character_turn_update:get_character(Update),
+ Path = btl_action:get_path(BattleAction),
+
+ {PathCost, NewLocation, S1Update} =
+ get_path_cost_and_destination(S0Update, Path),
- {PathCost, NewLocation} = get_path_cost_and_destination(Data, Path),
- assert_character_can_move(Data, PathCost),
+ assert_character_can_move(Character, PathCost),
- commit_move(CharacterCurrentData, Update, Path, NewLocation).
+ commit_move(Character, S1Update, Path, NewLocation).