summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/struct/btl_battle.erl | 378 |
1 files changed, 201 insertions, 177 deletions
diff --git a/src/battle/struct/btl_battle.erl b/src/battle/struct/btl_battle.erl index 48b386a..b1f88ac 100644 --- a/src/battle/struct/btl_battle.erl +++ b/src/battle/struct/btl_battle.erl @@ -30,30 +30,26 @@ -export ( [ - get_related_inventory/1, get_related_tile_ids/1, - get_map/1, - get_characters/1, - get_character/2, - get_resolved_character/2, - get_players/1, - get_player/2, - get_current_player_turn/1, get_encoded_last_turns_effects/1, - get_conditions/1, + get_map/1, set_map/2, ataxia_set_map/2, ataxia_set_map/3, + get_related_inventory/1, set_related_inventory/2, ataxia_set_related_inventory/2, ataxia_set_related_inventory/3, + get_characters/1, set_characters/2, ataxia_set_characters/2, ataxia_set_characters/3, + get_character/2, + get_resolved_character/2, set_character/3, ataxia_set_character/3, ataxia_set_character/4, @@ -61,10 +57,12 @@ add_character/2, ataxia_add_character/2, + get_players/1, set_players/2, ataxia_set_players/2, ataxia_set_players/3, + get_player/2, set_player/3, ataxia_set_player/3, ataxia_set_player/4, @@ -72,10 +70,12 @@ add_player/2, ataxia_add_player/2, + get_current_player_turn/1, set_current_player_turn/2, ataxia_set_current_player_turn/2, ataxia_set_current_player_turn/3, + get_conditions/1, set_conditions/2, ataxia_set_conditions/2, ataxia_set_conditions/3, @@ -96,13 +96,6 @@ ] ). --export -( - [ - resolve_character/2 - ] -). - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -119,79 +112,111 @@ get_all_timelines (Result, CurrentIndex, EndPoint, ArraySize, Players) -> get_all_timelines(NextResult, NextIndex, EndPoint, ArraySize, Players) end. +-spec resolve_character + ( + btl_character:either(), + type() + ) + -> btl_character:type(). +resolve_character (Character, Battle) -> + case btl_character:is_unresolved(Character) of + true -> + 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(Character), + Battle#battle.map + ) + ) + ) + ), + Character + ); + + false -> Character + end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --spec get_related_inventory (type()) -> shr_inventory:type(). -get_related_inventory (Battle) -> Battle#battle.related_inventory. + +%%%% Accessors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%% +%%%% Various %%%% +%%%%%%%%%%%%%%%%% +-spec get_encoded_last_turns_effects (type()) -> list(any()). +get_encoded_last_turns_effects (Battle) -> + CurrentPlayerTurn = Battle#battle.current_player_turn, + Players = Battle#battle.players, + CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), + + PlayersCount = orddict:size(Players), + StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), + get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). + +%%%%%%%%%%%%%%%%%% +%%%% Tile IDs %%%% +%%%%%%%%%%%%%%%%%% +-spec get_related_tile_ids_field () -> non_neg_integer(). +get_related_tile_ids_field () -> #battle.related_tile_ids. -spec get_related_tile_ids (type()) -> ordsets:ordset(shr_tile:id()). get_related_tile_ids (Battle) -> Battle#battle.related_tile_ids. --spec get_map (type()) -> shr_map:type(). -get_map (Battle) -> Battle#battle.map. +%%%%%%%%%%%%%%%%%%% +%%%% Inventory %%%% +%%%%%%%%%%%%%%%%%%% +-spec get_related_inventory_field () -> non_neg_integer(). +get_related_inventory_field () -> #battle.related_inventory. --spec get_characters - ( - type() - ) - -> orddict:orddict(non_neg_integer(), btl_character:either()). -get_characters (Battle) -> Battle#battle.characters. +-spec get_related_inventory (type()) -> shr_inventory:type(). +get_related_inventory (Battle) -> Battle#battle.related_inventory. --spec get_character (non_neg_integer(), type()) -> btl_character:either(). -get_character (IX, Battle) -> orddict:fetch(IX, Battle#battle.characters). +-spec set_related_inventory (shr_inventory:type(), type()) -> type(). +set_related_inventory (Inv, Battle) -> + Battle#battle + { + related_inventory = Inv + }. --spec get_resolved_character +-spec ataxia_set_related_inventory ( - non_neg_integer(), + shr_inventory:type(), type() ) - -> {btl_character:type(), type()}. -get_resolved_character (IX, Battle) -> - Character = orddict:fetch(IX, Battle#battle.characters), - - case btl_character:is_unresolved(Character) of - true -> - ResolvedCharacter = resolve_character(Character, Battle), - { - ResolvedCharacter, - Battle#battle - { - characters = - orddict:store(IX, ResolvedCharacter, Battle#battle.characters) - } - }; - - false -> {Character, Battle} - end. + -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, Battle) -> + ataxia_set_related_inventory(Inv, ataxic:constant(Inv), Battle). --spec get_players +-spec ataxia_set_related_inventory ( + shr_inventory:type(), + ataxic:basic(), type() ) - -> orddict:orddict(non_neg_integer(), btl_player:type()). -get_players (Battle) -> - Battle#battle.players. - --spec get_player (non_neg_integer(), type()) -> btl_player:type(). -get_player (IX, Battle) -> - orddict:fetch(IX, Battle#battle.players). - --spec get_current_player_turn (type()) -> btl_player_turn:type(). -get_current_player_turn (Battle) -> - Battle#battle.current_player_turn. + -> {type(), ataxic:basic()}. +ataxia_set_related_inventory (Inv, InvUpdate, Battle) -> + { + set_related_inventory(Inv, Battle), + ataxic:update_field(get_related_inventory_field(), InvUpdate) + }. --spec get_encoded_last_turns_effects (type()) -> list(any()). -get_encoded_last_turns_effects (Battle) -> - CurrentPlayerTurn = Battle#battle.current_player_turn, - Players = Battle#battle.players, - CurrentPlayerIX = btl_player_turn:get_player_ix(CurrentPlayerTurn), +%%%%%%%%%%%%% +%%%% Map %%%% +%%%%%%%%%%%%% +-spec get_map_field () -> non_neg_integer(). +get_map_field () -> #battle.map. - PlayersCount = orddict:size(Players), - StartingPoint = ((CurrentPlayerIX + 1) rem PlayersCount), - get_all_timelines([], StartingPoint, CurrentPlayerIX, PlayersCount, Players). +-spec get_map (type()) -> shr_map:type(). +get_map (Battle) -> Battle#battle.map. -spec set_map (shr_map:type(), type()) -> type(). set_map (Map, Battle) -> @@ -234,6 +259,18 @@ ataxia_set_map (Map, MapUpdate, Battle) -> ) }. +%%%%%%%%%%%%%%%%%%%% +%%%% Characters %%%% +%%%%%%%%%%%%%%%%%%%% +-spec get_characters_field () -> non_neg_integer(). +get_characters_field () -> #battle.characters. + +-spec get_characters + ( + type() + ) + -> orddict:orddict(non_neg_integer(), btl_character:either()). +get_characters (Battle) -> Battle#battle.characters. -spec set_characters ( @@ -287,18 +324,35 @@ ataxia_set_characters (Characters, CharactersUpdate, Battle) -> ) }. --spec set_character +%%%%%%%%%%%%%%%%%%% +%%%% Character %%%% +%%%%%%%%%%%%%%%%%%% +-spec get_character (non_neg_integer(), type()) -> btl_character:either(). +get_character (IX, Battle) -> orddict:fetch(IX, Battle#battle.characters). + +-spec get_resolved_character ( non_neg_integer(), - btl_character:either(), type() ) - -> type(). -set_character (IX, Character, Battle) -> - Battle#battle - { - characters = orddict:store(IX, Character, Battle#battle.characters) - }. + -> {btl_character:type(), type()}. +get_resolved_character (IX, Battle) -> + Character = orddict:fetch(IX, Battle#battle.characters), + + case btl_character:is_unresolved(Character) of + true -> + ResolvedCharacter = resolve_character(Character, Battle), + { + ResolvedCharacter, + Battle#battle + { + characters = + orddict:store(IX, ResolvedCharacter, Battle#battle.characters) + } + }; + + false -> {Character, Battle} + end. -spec add_character ( @@ -321,6 +375,19 @@ ataxia_add_character (Character, Battle) -> {S0Battle, AtaxicUpdate} = ataxia_set_character(IX, Character, Battle), {IX, S0Battle, AtaxicUpdate}. +-spec set_character + ( + non_neg_integer(), + btl_character:either(), + type() + ) + -> type(). +set_character (IX, Character, Battle) -> + Battle#battle + { + characters = orddict:store(IX, Character, Battle#battle.characters) + }. + -spec ataxia_set_character ( non_neg_integer(), @@ -355,6 +422,20 @@ ataxia_set_character (IX, Character, CharacterUpdate, Battle) -> ) }. +%%%%%%%%%%%%%%%%% +%%%% Players %%%% +%%%%%%%%%%%%%%%%% +-spec get_players_field () -> non_neg_integer(). +get_players_field () -> #battle.players. + +-spec get_players + ( + type() + ) + -> orddict:orddict(non_neg_integer(), btl_player:type()). +get_players (Battle) -> + Battle#battle.players. + -spec set_players ( orddict:orddict(non_neg_integer(), btl_player:type()), @@ -393,34 +474,28 @@ ataxia_set_players (Players, PlayersUpdate, Battle) -> ) }. --spec set_related_inventory (shr_inventory:type(), type()) -> type(). -set_related_inventory (Inv, Battle) -> - Battle#battle - { - related_inventory = Inv - }. +%%%%%%%%%%%%%%%% +%%%% Player %%%% +%%%%%%%%%%%%%%%% +-spec get_player (non_neg_integer(), type()) -> btl_player:type(). +get_player (IX, Battle) -> + orddict:fetch(IX, Battle#battle.players). --spec ataxia_set_related_inventory - ( - shr_inventory:type(), - type() - ) - -> {type(), ataxic:basic()}. -ataxia_set_related_inventory (Inv, Battle) -> - ataxia_set_related_inventory(Inv, ataxic:constant(Inv), Battle). +-spec add_player (btl_player:type(), type()) -> {non_neg_integer(), type()}. +add_player (Player, Battle) -> + IX = orddict:size(Battle#battle.players), + {IX, set_player(IX, Player, Battle)}. --spec ataxia_set_related_inventory +-spec ataxia_add_player ( - shr_inventory:type(), - ataxic:basic(), + btl_player:type(), type() ) - -> {type(), ataxic:basic()}. -ataxia_set_related_inventory (Inv, InvUpdate, Battle) -> - { - set_related_inventory(Inv, Battle), - ataxic:update_field(get_related_inventory_field(), InvUpdate) - }. + -> {non_neg_integer(), type(), ataxic:basic()}. +ataxia_add_player (Player, Battle) -> + IX = orddict:size(Battle#battle.players), + {S0Battle, AtaxicUpdate} = ataxia_set_player(IX, Player, Battle), + {IX, S0Battle, AtaxicUpdate}. -spec set_player (non_neg_integer(), btl_player:type(), type()) -> type(). set_player (IX, Player, Battle) -> @@ -457,21 +532,15 @@ ataxia_set_player (IX, Player, PlayerUpdate, Battle) -> ) }. --spec add_player (btl_player:type(), type()) -> {non_neg_integer(), type()}. -add_player (Player, Battle) -> - IX = orddict:size(Battle#battle.players), - {IX, set_player(IX, Player, Battle)}. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Current Player Turn %%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec get_current_player_turn_field () -> non_neg_integer(). +get_current_player_turn_field () -> #battle.current_player_turn. --spec ataxia_add_player - ( - btl_player:type(), - type() - ) - -> {non_neg_integer(), type(), ataxic:basic()}. -ataxia_add_player (Player, Battle) -> - IX = orddict:size(Battle#battle.players), - {S0Battle, AtaxicUpdate} = ataxia_set_player(IX, Player, Battle), - {IX, S0Battle, AtaxicUpdate}. +-spec get_current_player_turn (type()) -> btl_player_turn:type(). +get_current_player_turn (Battle) -> + Battle#battle.current_player_turn. -spec set_current_player_turn (btl_player_turn:type(), type()) -> type(). set_current_player_turn (PlayerTurn, Battle) -> @@ -511,50 +580,11 @@ ataxia_set_current_player_turn (PlayerTurn, PlayerTurnUpdate, Battle) -> ) }. --spec new (shr_map:type()) -> type(). -new (Map) -> - EmptyDict = orddict:new(), - - #battle - { - related_inventory = shr_inventory:default(), - related_tile_ids = shr_map:get_related_tile_ids(Map), - map = Map, - characters = EmptyDict, - players = EmptyDict, - current_player_turn = btl_player_turn:new(0, 0) - }. - --spec resolve_character - ( - btl_character:either(), - type() - ) - -> btl_character:type(). -resolve_character (Character, Battle) -> - case btl_character:is_unresolved(Character) of - true -> - 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(Character), - Battle#battle.map - ) - ) - ) - ), - Character - ); - - false -> Character - end. +%%%%%%%%%%%%%%%%%%%% +%%%% Conditions %%%% +%%%%%%%%%%%%%%%%%%%% +-spec get_conditions_field() -> non_neg_integer(). +get_conditions_field () -> #battle.conditions. -spec get_conditions (type()) -> btl_condition:collection(). get_conditions (#battle{ conditions = R }) -> R. @@ -594,23 +624,17 @@ ataxia_set_conditions (Conditions, Battle) -> Battle ). --spec get_characters_field () -> non_neg_integer(). -get_characters_field () -> #battle.characters. - --spec get_map_field () -> non_neg_integer(). -get_map_field () -> #battle.map. - --spec get_related_inventory_field () -> non_neg_integer(). -get_related_inventory_field () -> #battle.related_inventory. - --spec get_related_tile_ids_field () -> non_neg_integer(). -get_related_tile_ids_field () -> #battle.related_tile_ids. - --spec get_players_field () -> non_neg_integer(). -get_players_field () -> #battle.players. - --spec get_current_player_turn_field () -> non_neg_integer(). -get_current_player_turn_field () -> #battle.current_player_turn. +%%%% Constructor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (shr_map:type()) -> type(). +new (Map) -> + EmptyDict = orddict:new(), --spec get_conditions_field() -> non_neg_integer(). -get_conditions_field () -> #battle.conditions. + #battle + { + related_inventory = shr_inventory:default(), + related_tile_ids = shr_map:get_related_tile_ids(Map), + map = Map, + characters = EmptyDict, + players = EmptyDict, + current_player_turn = btl_player_turn:new(0, 0) + }. |